web-dev-qa-db-ja.com

Linux:Xの下でキーボードが画面をオンにしないようにする

キーをバインドして(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秒に設定し(何かがウェイクアップした場合に備えて)、画面をオフにします。オフの場合、以前の設定に戻り、画面がオンに戻ります。

残念ながら、これは実際にキーにバインドされている場合は機能しないようです。画面がオンになっていると常に信じています。これは、キーを押すと再びオンになり、スクリプトを実行して再びオフにするためだと思います。

キーボードを完全に無効にする以外に、キーを押すと画面が自動的にオンになるのを防ぐ方法が見つかりません(これにより、再びオンにするのが難しくなります)。

さらに良い解決策は、画面がオン/オフになるたびにスクリプトを実行できるようにすることです。その後、そのスクリプトにバインドされているキーだけでなく、任意のキーを押すことで、画面をオンに戻すことができます。

4
Rena

スクリプトは、バインドされたキーを押した直後に実行されますが、画面は離したときにのみオンに戻ります。

これをテストするには、次のように入力します

xset dpms force off

ターミナルで押し続ける Enter

キーを離すまで画面はオフのままになり、すぐにオンに戻ります。

簡単な回避策は、キーが離された後にxsetコマンドを実行するために小さな遅延を追加することです(たとえば、sleepコマンドを使用)。

2
holytrousers

私が行ったことは、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コードを調べて、独自のウォッチャーの作成方法に関する手がかりを探すことも有益な場合があります。

1
Toby Speight