web-dev-qa-db-ja.com

画面のスリープ/スリープ解除でスクリプトを実行する方法

画面がタイムアウトになったときとスリープが解除されたときにスクリプトを実行する方法を知りたいのですが。休止状態やサスペンドについてではなく、画面がオフになったときだけです。

理由は、LEDキーボードを使用していて、起動時に組み込みのLEDを切り替えたいからです。

4
John Petryk

xset -qを使用して、モニターのステータスを確認できます。これまでのところ、モニターのDPMS状態が「モニターがオン」、「モニターがオフ」、または「モニターがサスペンド中」になっています。 xorgの起動後に自動起動するスクリプトを作成できます。

#!/bin/bash
while true; do
    xset -q | grep "Monitor is On"
    if [ $? -eq 1 ]; then
        if [ "`cat /tmp/displaystate`" != "off" ]; then 
            echo "off" > /tmp/displaystate
            # do something when display is switched off
            /opt/myScreenOffAction.sh
        fi
        sleep 1
    else 
        if [ "`cat /tmp/displaystate`" != "on" ]; then 
            echo "on" > /tmp/displaystate
            #do something when display is switched on
            /opt/myScreenOffAction.sh
        fi
        sleep 10
    fi
done

スクリプトをテストするには、xset dpms force suspendを使用して画面をサスペンド状態にします。

上記のように、オフにはさまざまな状態があるように見えるため、「Monitor is On」のgrepをお勧めします。

5
Pascal Suter