web-dev-qa-db-ja.com

モニターをスタンバイ状態にするスクリプトをどこに置くべきですか?

信号が落ちたときにスタンバイ状態にならない優れたSamsung HDMI TV /モニターを取得しました。 Pulse Eight CECコマンドインジェクターを入手し、コマンドラインからモニターの電源をオン/オフにする方法を理解しました。

問題は、これらのコマンドを実行させる最も信頼性の高い/将来の証拠/ Ubuntu/Gnomeの方法がどこにあるのかがわからないことです-私がこれまで調べてきたこと:

systemd

ユーザーがログインしたとき、およびグラフィカルシステムが起動したときのターゲットを持っているようですが、ログイン前ではありません。

鋭い

ここで画面のスリープ/スリープ解除メカニズムをキャッチすることは完璧に聞こえますが、それを行う方法を見つけることができないようです。

gdm3

キーボード操作以外のほとんどすべての場合でスクリプトの追加をサポートしているようです。

xss-lock

これをスクリプトと一緒に使用して、実行時にモニターをスリープ状態にし、SIGHUPをキャッチしてスリープ解除コマンドを発行しようとしましたが、確実に機能していないようです。


私は2015年からこれを見つけました: 画面のスリープ/スリープ解除でスクリプトを実行する方法

...しかし、上記のほぼすべてのオプションは、バックグラウンドタスクをループしてログトラフィックを絶えずこすり落としたり、キーが押されてから@ wait/2秒かかるまでよりも良い解決策のように感じます。それは利用可能な最良のソリューションですか?

1
Unstuck

以下のスクリプトを使用して、アイドル状態が1分間続くと画面をオフにします。コードは自分のものではなく、自分のニーズに合わせて変更しました

xprintidleをインストールする必要があります

Sudo apt install xprintidle
cd ~
mkdir myscripts
cd myscripts

以下のコードをコピーしてターミナルに貼り付け、bashスクリプトを作成します

cat>turnoffscreen.sh<<'EOF'
#!/bin/sh
# Wanted trigger timeout in milliseconds.
IDLE_TIME=$((1*60*1000))
IDLE_WARN=$((((1*60*1000))-((10000))))
# Sequence to execute when timeout triggers.
trigger_cmd() {

   # put your code here, the below command just an example
   xset s blank ; sleep 1 ; xset s activate 

}

sleep_time=$IDLE_TIME
triggered=false

# ceil() instead of floor()
while sleep $(((sleep_time+999)/1000)); do
    idle=$(xprintidle)

if [ $idle -ge $IDLE_WARN ]; then
    notify-send --icon=info "Turning off the screen ..."
    sleep 10
    idle_check=$(xprintidle)
       if [ $idle_check -ge $idle  ]; then
        if ! $triggered; then
                 trigger_cmd
                 triggered=true
                 sleep_time=$IDLE_TIME
        fi
     fi


    else

        triggered=false

        # Give 100 ms buffer to avoid frantic loops shortly before triggers.
        sleep_time=$((IDLE_TIME-idle+100))
    fi
done
EOF

それを実行可能にします

chmod +x turnoffscreen.sh

スタートアップアプリケーションリストに追加する

gnome-session-properties
1
kenn