xrandrに表示モードがあるかどうかを確認するには?

xrandrに表示モードがあるかどうかを確認するには?

解像度をリセットするさまざまなプログラムやモニターをスタンバイ状態にするゲームに関連するさまざまな問題のため、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サーバーがシャットダウンしたらすぐに削除する必要があります。)

これは絶対に最善の解決策ではないかもしれませんが、十分に優れており、期待どおりに機能します。

おすすめ記事