J'ai xrandr sortie comme suit
HDMI1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 480mm x 270mm
1920x1080 60.00*+ 50.00 59.94
1920x1080i 60.00 50.00 59.94
1680x1050 59.88
1400x1050 59.95
1600x900 60.00
1280x1024 75.02 60.02
1440x900 59.90
1280x800 59.91
1152x864 75.00
1280x720 60.00 50.00 59.94
1024x768 75.03 60.00
800x600 75.00 60.32
720x576 50.00
720x480 60.00 59.94
640x480 75.00 60.00 59.94
720x400 70.08
HDMI2 disconnected (normal left inverted right x axis y axis)
VGA1 connected 1600x900+1920+0 (normal left inverted right x axis y axis) 440mm x 250mm
1600x900 60.00*+
1440x900 59.89
1280x800 59.81
1152x864 75.00
1280x720 60.00
1024x768 75.03 60.00
832x624 74.55
800x600 75.00 60.32 56.25
640x480 75.00 59.94
720x400 70.08
Comment peut-on composer un script bash pour obtenir les résolutions disponibles à partir du résultat de xrandr ci-dessus.
par exemple the-script HDMI1
affichera uniquement
HDMI1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 480mm x 270mm
1920x1080 60.00*+ 50.00 59.94
1920x1080i 60.00 50.00 59.94
1680x1050 59.88
1400x1050 59.95
1600x900 60.00
1280x1024 75.02 60.02
1440x900 59.90
1280x800 59.91
1152x864 75.00
1280x720 60.00 50.00 59.94
1024x768 75.03 60.00
800x600 75.00 60.32
720x576 50.00
720x480 60.00 59.94
640x480 75.00 60.00 59.94
720x400 70.08
J'ai essayé
xrandr | awk '/HDMI1.*?/,/.*connected [0-9].*/'
alors que le résultat est proche de ce que je veux, mais en utilisant
xrandr | awk '/VGA1.*?/,/.*connected [0-9].*/'
ne répertorie pas les résolutions sous la sortie VGA1.
Toute aide appréciée, merci.
Une version plus simple de la commande awk pour le script:
xrandr |
awk -v monitor="^$MONITOR connected" '/connected/ {p = 0}
$0 ~ monitor {p = 1}
p'
De bas en haut:
p
indique à awk d'exécuter l'action par défaut (impression), qu'elle soit vraie ou fausse.p
sur truep
sur falseEh bien, comprenez-le,
#!/bin/bash
#usage the-script XRANDR_OUTPUT_NAME
#e.g the-script HDMI1
MONITOR=$1;
xrandr | grep -v disconnected | \
awk '{
if(/^'$MONITOR' connected/) {
print $0;
m="t";
} else if(m == "t"){
if (/^[a-zA-Z]/){
exit
} else {
print $0
}
}
}'
J'espère que cela aidera quelqu'un.
Avec GNU awk:
#!/bin/sh
xrandr --query | gawk -v monitor="$1" '
$0 ~ monitor && $0 !~ /disconnected/ {
do {print}
while (getline > -1 && $0 ~ /^[[:blank:]]/)
}
'
Usage:
$ ./the_script LVDS-1
LVDS-1 connected primary 1440x900+0+0 (normal left inverted right x axis y axis) 303mm x 190mm
1440x900 60.00*+ 59.89 50.00
1360x768 59.80 59.96
1152x864 60.00
1024x768 60.04 60.00
960x720 60.00
928x696 60.05
896x672 60.01
960x600 60.00
960x540 59.99
800x600 60.00 60.32 56.25
840x525 60.01 59.88
800x512 60.17
700x525 59.98
640x512 60.02
720x450 59.89
640x480 60.00 59.94
680x384 59.80 59.96
576x432 60.06
512x384 60.00
400x300 60.32 56.34
320x240 60.05
Si vous n'avez pas GNU awk, vous devrez peut-être remplacer [[:blank:]]
par [ \t]