web-dev-qa-db-fra.com

Analyser la sortie xrandr pour obtenir la résolution disponible

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.

1
Lee

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.
  • si la ligne correspond au moniteur et est connectée, nous définissons p sur true
  • pour toutes les autres lignes de contrôle, définissez p sur false
2
muru

Eh 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.

2
Lee

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]

1
steeldriver