У меня есть вывод xrandr следующим образом
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
Как может составить сценарий удара для получения доступных разрешений от результата xrandr выше.
например, the-script HDMI1
произведет только
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
Я попробовал
xrandr | awk '/HDMI1.*?/,/.*connected [0-9].*/'
в то время как результат близко к тому, что я хочу, но использование
xrandr | awk '/VGA1.*?/,/.*connected [0-9].*/'
не перечисляет разрешения под выводом VGA1.
Любая ценившая справка, спасибо.
Более простая версия awk управляет для сценария:
xrandr |
awk -v monitor="^$MONITOR connected" '/connected/ {p = 0}
$0 ~ monitor {p = 1}
p'
Нижняя часть к вершине:
p
говорит awk выполнять действие по умолчанию (печать) в зависимости от того, является ли это TRUE или FALSE),p
к истинномуp
ко лжиНу, поймите это,
#!/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
}
}
}'
Надежда это поможет кому-то.
С GNU awk:
#!/bin/sh
xrandr --query | gawk -v monitor="$1" '
$0 ~ monitor && $0 !~ /disconnected/ {
do {print}
while (getline > -1 && $0 ~ /^[[:blank:]]/)
}
'
Использование:
$ ./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
Если у Вас нет GNU awk, Вы, возможно, должны заменить [[:blank:]]
с [ \t]