web-dev-qa-db-ja.com

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の結果から利用可能な解像度を取得するために、bashスクリプトを作成する方法。

たとえば、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出力の下で解像度をリストしません。

どんな助けも感謝します、ありがとう。

1
Lee

スクリプト用のawkコマンドのより単純なバージョン:

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

下から上:

  • pは、真か偽かに応じてデフォルトのアクション(印刷)を実行するようにawkに指示します)
  • ラインがモニターと一致し、接続されている場合、pをtrueに設定します
  • 他のすべてのモニター行では、pをfalseに設定します
2
muru

さて、それを理解し、

#!/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
Lee

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
steeldriver