画面解像度を切り替えるための bash の if-then ステートメント

画面解像度を切り替えるための bash の if-then ステートメント

xrandr を使用して画面解像度をチェックし、現在の解像度に応じて解像度を変更するスクリプトをどのように記述すればよいでしょうか。つまり、解像度を切り替えるということです。

サンプル出力xrandr -q

   1920x1080     59.98 +  59.97    59.96    59.93  
   1680x1050     59.95    59.88  
   1600x1024     60.17  
   1400x1050     59.98  
   1600x900      59.99*   59.94    59.95    59.82

xrandr -s 0現在の解像度が 1600x900 かどうかを確認して を実行し、現在の解像度が 1920x1080 の場合は を実行するには、どのように記述する必要がありますかxrandr -s 4?

簡単に言えば、問題は、解像度を切り替えるためにスクリプトに xrandr -q の出力を認識させる方法です。例:

#!/bin/bash

if <current resolution is 1920x1080>
then
  xrandr -s 5
elif <current resolution is 1600x900>
then
  xrandr -s 0
else
 <do nothing>
fi

基本的に、スクリプトがアスタリスクがある行を認識し、他の行に切り替える手段が必要です。これはどのように実現できるでしょうか?

答え1

解決策の例

ソリューションはニーズに応じてカスタマイズできます。

#!/bin/bash
MYRES=$(xrandr -q | grep "\*" | awk '{ print $1; }')
echo -e "\nResolution is $MYRES\n"
case "$MYRES" in
  "1920x1080")
    echo "Size = 5"
    xrandr -s 5
    ;;
  "1680x1050")
    echo "Size = 4"
    xrandr -s 4
    ;;
  "1600x1024")
    echo "Size = 4"
    xrandr -s 4
    ;;
  "1400x1050")
    echo "Size = 3"
    xrandr -s 3
    ;;
  "1600x900")
    echo "Size = 0"
    xrandr -s 0
    ;;
  *)
    echo "Do nothing."
    ;;
esac

答え2

この質問に答えたここによる @ちょばらunix.stackexchange.com で

プロセス置換を使用する:

#!/bin/bash

read resolution _rest < <(xrandr | grep '\*')

if [[ $resolution = 1920x1080 ]] ; then
    xrandr -s 5
elif [[ $resolution = 1600x900 ]] ; then
    xrandr -s 0
else
    echo Unknown resolution >&2
fi

関連情報