解像度をリセットするさまざまなプログラムやモニターをスタンバイ状態にするゲームに関連するさまざまな問題のため、xrandrを使用してモニターを構成するセッションスクリプトがあります。
現在、このスクリプトは各モニターを1280×1024から1600×1280まで拡張できますが、このように低解像度を高解像度に拡張すると全体の表示品質が低下するため、実際のモードに設定したいと思います。
しかし、問題は、このスクリプトが何度も呼び出されることです(フルスクリーンゲームまたはxorgを停止するよりもよく知っていると思うプログラム)。各モニターのモードのみをテストできます。
これは、最悪の場合、xrandr --newmode
各モニタが実行されるたびに繰り返し呼び出されることを意味します。
xrandrにパターンが定義されていることを確認して、各モニタにパターンが適用されていることを確認する方法はありますか?
modeline = <modeline>
outputmode = ${modeline[0]}
if [[ <!mode_exists> ]]; then
xrandr --newmode $modeline
fi
while IFS= read -r line; do
...
# this part just for context and is already doable
if [[ <!outputmode_exists> ]]; then
xrandr --addmode $output $outputmode
fi
done <<< $(xrandr -d $DISPLAY | tail -n +2)
xrandr -fb <screensize> \
--output <output1> --mode $outputmode ... --primary --preferred \
--output <output2> --mode $outputmode ... \
...
--newmode
スキーマがすでに定義されている場合は、呼び出す必要がないようにスキーマが存在するかどうかを確認します。
答え1
さて、しばらく考えた後、最終的に/tmp
ログアウト時にダミーファイルを削除するWMベースの簡単なソリューションを決定しました。
modeline = <modeline>
outputmode = ${modeline[0]}
if [ ! -f "/tmp/.xrandr$DISPLAY" ]; then
touch "/tmp/.xrandr$DISPLAY"
xrandr --newmode $modeline
xrandr --addmode $outputmode
fi
xrandr -fb <screensize> \
--output <output1> --mode $outputmode ... --primary --preferred \
--output <output2> --mode $outputmode ... \
...
これで、スクリプトを実行するたびにファイルが存在する限り、新しいスキーマは追加されません。
(特定のXサーバーがシャットダウンしたらすぐに削除する必要があります。)
これは絶対に最善の解決策ではないかもしれませんが、十分に優れており、期待どおりに機能します。