Проанализируйте вывод xrandr для получения доступного разрешения

У меня есть вывод 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.

Любая ценившая справка, спасибо.

2
задан 15 May 2018 в 17:03

3 ответа

Более простая версия awk управляет для сценария:

xrandr |
  awk -v monitor="^$MONITOR connected" '/connected/ {p = 0}
    $0 ~ monitor {p = 1}
    p'

Нижняя часть к вершине:

  • p говорит awk выполнять действие по умолчанию (печать) в зависимости от того, является ли это TRUE или FALSE),
  • если строка соответствует монитору и соединена, мы устанавливаем p к истинному
  • для всех других строк монитора мы устанавливаем p ко лжи
3
ответ дан 2 December 2019 в 01:42

Ну, поймите это,

#!/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
                } 
        }
}'

Надежда это поможет кому-то.

2
ответ дан 2 December 2019 в 01:42

С 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]

1
ответ дан 2 December 2019 в 01:42

Другие вопросы по тегам:

Похожие вопросы: