キーをバインドして(xbindkeys
を使用)、Xでモニターのオン/オフを切り替えようとしています。これまでのところ、このスクリプトにキーをバインドしています。
#!/bin/bash
MOUSE="Logitech USB-PS/2 Optical Mouse"
if [[ ! -z $(xset q | grep "Monitor is On") ]]; then
logger "Turning off display"
xinput disable "$MOUSE"
xset s 2 2
xset dpms force off
else
logger "Turning on display"
xinput enable "$MOUSE"
xset s 3600 3600
xset dpms force on
fi
これはほぼ完全に機能します。画面がオンの場合、マウスを無効にし(偶発的なウェイクアップを防ぐため)、ブランキング時間を2秒に設定し(何かがウェイクアップした場合に備えて)、画面をオフにします。オフの場合、以前の設定に戻り、画面がオンに戻ります。
残念ながら、これは実際にキーにバインドされている場合は機能しないようです。画面がオンになっていると常に信じています。これは、キーを押すと再びオンになり、スクリプトを実行して再びオフにするためだと思います。
キーボードを完全に無効にする以外に、キーを押すと画面が自動的にオンになるのを防ぐ方法が見つかりません(これにより、再びオンにするのが難しくなります)。
さらに良い解決策は、画面がオン/オフになるたびにスクリプトを実行できるようにすることです。その後、そのスクリプトにバインドされているキーだけでなく、任意のキーを押すことで、画面をオンに戻すことができます。
スクリプトは、バインドされたキーを押した直後に実行されますが、画面は離したときにのみオンに戻ります。
これをテストするには、次のように入力します
xset dpms force off
ターミナルで押し続ける Enter。
キーを離すまで画面はオフのままになり、すぐにオンに戻ります。
簡単な回避策は、キーが離された後にxset
コマンドを実行するために小さな遅延を追加することです(たとえば、sleep
コマンドを使用)。
私が行ったことは、xscreensaver
(画面のみを空白にし、グラフィックスハックを実行しないように設定)を使用してから、xscreensaver-command -watch
を使用してそれを監視することです。
-watch Prints a line each time the screensaver changes state: when the
screen blanks, locks, unblanks, or when the running hack is
changed. This option never returns; it is intended for use by
Shell scripts that want to react to the screensaver in some
way. An example of its output would be:
BLANK Fri Nov 5 01:57:22 1999
RUN 34
RUN 79
RUN 16
LOCK Fri Nov 5 01:57:22 1999
RUN 76
RUN 12
UNBLANK Fri Nov 5 02:05:59 1999
Manページには、一見の価値のある例が含まれています。
残念ながら、stock xscreensaver
は、DPMS設定を独自の値に設定することを要求します。私は それをやめるためのパッチ を提出しましたが、jwzはそれを拒否しました。パッチが役立つ場合があります。または、xscreensaverを--without-dpms-ext
でコンパイルするだけです。
または、xscreensaver
コードを調べて、独自のウォッチャーの作成方法に関する手がかりを探すことも有益な場合があります。