Analisar a saída xrandr para obter a resolução disponível

1

Eu tenho saída xrandr como segue

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  

Como pode compor um script bash para obter as resoluções disponíveis do resultado xrandr acima.

por exemplo the-script HDMI1 produzirá apenas

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 

Eu tentei

xrandr | awk '/HDMI1.*?/,/.*connected [0-9].*/'

enquanto o resultado está perto do que eu quero, mas usando

xrandr | awk '/VGA1.*?/,/.*connected [0-9].*/'

não lista as resoluções na saída VGA1.

Qualquer ajuda apreciada, obrigado.

    
por Lee 15.05.2018 / 15:01

3 respostas

1

Uma versão mais simples do comando awk para o script:

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

De baixo para cima:

  • p diz ao awk para executar a ação padrão (impressão) dependendo se é verdadeiro ou falso)
  • se a linha corresponder ao monitor e estiver conectada, definimos p como true
  • para todas as outras linhas de monitor, definimos p como falso
por muru 16.05.2018 / 08:49
2

Bem, descubra,

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

Espero que isso ajude alguém.

    
por Lee 15.05.2018 / 15:44
1

Com o GNU awk:

#!/bin/sh

xrandr --query | gawk -v monitor="$1" '
  $0 ~ monitor && $0 !~ /disconnected/ {
    do {print}
    while (getline > -1 && $0 ~ /^[[:blank:]]/)
  }
'

Uso:

$ ./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  

Se você não tiver o GNU awk, talvez seja necessário substituir [[:blank:]] por [ \t]

    
por steeldriver 15.05.2018 / 16:02