xrandr --queryを使ってモニタの幅を取得するには?

xrandr --queryを使ってモニタの幅を取得するには?

変数の内部に割り当てられた接続モニターを見つけるためにxrandrを繰り返すシェルスクリプトがあります。そのループ内で接続されているモニターの幅を決定する別のループが必要です。

どうすればいいですか?

答え1

目的のツール(grep、awkなど)を使用してxrandrの結果を後処理できます。

$ xrandr --query
Screen 0: minimum 320 x 200, current 1366 x 768, maximum 8192 x 8192
LVDS-1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 193mm
   1366x768      60.04*+
   1360x768      59.80    59.96  
VGA-1 disconnected (normal left inverted right x axis y axis)
SVIDEO-1 disconnected (normal left inverted right x axis y axis)

次の「接続済み」画面が表示されることがあります。

$ xrandr --query |grep -w 'connected'
LVDS-1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 193mm
#With grep , the use -w means grep for a word.

またはawkを使用してください:

$ xrandr --query |awk '/\<connected\>/{print}'
LVDS-1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 193mm

awkを使用すると、上記の出力のさまざまなフィールドを印刷することもできます(awkデフォルトのフィールド区切り文字は空白です)。

$ xrandr --query |awk '/\<connected\>/{print $1}'
LVDS-1
$ xrandr --query |awk '/\<connected\>/{print $3}'
1366x768+0+0

あるいは、空白、x、+などのカスタムフィールド区切り文字を使用するようにawkに要求することもできます。

$ xrandr --query |awk -F '[ x+]' '/\<connected\>/{print $1,$3,$4}'
LVDS-1 1366 768

これで、接続されているすべての画面を処理する最も簡単な方法は、配列を使用することです。

$ IFS=$'\n' screens=( $(xrandr --query |awk -F '[ x+]' '/\<connected\>/{print $1,$3,$4}') )
$ for screen in "${screens[@]}";do
> echo "$screen" # or do whatever action you want to do with each screen
> done
LVDS-1 1366 768

関連情報