web-dev-qa-db-ja.com

xset dpmsの前にsleepコマンドを使用する理由

私のラップトップのディスプレイをオフにする次の行があります。

sleep 1 && xset dpms force standby

sleep 1:スレッドを1秒間スリープ状態にします。

xset dpms force standbyman から、dpmsフラグを強制的にスタンバイにします。

sleep 1コマンドを省略すると、xsetコマンドはpcを1秒間スタンバイモードにし、その後自動的に通常の動作を再開します。ただし、sleep 1コマンドと組み合わせると、ユーザー入力が検出されるまで、PCは無期限にスタンバイモードになります。

これら2つのコマンドの関係と、このように機能する理由を説明できますか?

1
zindarod

コマンドを実行すると、「KeyPress」と「KeyRelease」の2つのイベントが発生します。

を押してこのコマンドを実行すると Enter ボタン。

xset dpms force standby

最初に「KeyPress」が発生すると、コマンドをすぐに実行し、ボタンを放したときにモニターをスリープ状態にします。 Enter キーを押すと、「KeyRelease」が発生します。これはユーザーアクティビティであるため、monitorは機能します。

あなたが本当に速く仕事をするなら(打つ Enter コマンドを実行する前にそれを認識します)モニターは「スリープ」状態のままです。


これをテストするには、x11-xserver-utilsパッケージをインストールします。

Sudo apt install x11-xserver-utils

次にxevを実行します。

今ヒット Enter 何が起こるかを見るために;次のようなものが表示されるはずです。

KeyPress event, serial 48, synthetic NO, window 0x2600001,
...

KeyRelease event, serial 48, synthetic NO, window 0x2600001,
...

したがって、sleepを使用して、コマンドが実行される前に両方のイベントが発生するようにします。

3
Ravexina

これはおそらく、システムが「ユーザーアクティビティ」と見なしていることと関係があると思います。

システムがキーボードアクティビティを検出すると、スリープから復帰します。 enterを押して強制スタンバイコマンドを送信するという事実は、「現在の」アクティビティとしてカウントされるため、すぐにスリープ解除されます。

sleep 1は、sleepコマンドが送信される前にキーボードが1秒間アクティビティを記録しないことを保証します。そのため、スタンバイが進みます。

0
teknopaul