私のラップトップのディスプレイをオフにする次の行があります。
sleep 1 && xset dpms force standby
sleep 1
:スレッドを1秒間スリープ状態にします。
xset dpms force standby
: man から、dpmsフラグを強制的にスタンバイにします。
sleep 1
コマンドを省略すると、xset
コマンドはpcを1秒間スタンバイモードにし、その後自動的に通常の動作を再開します。ただし、sleep 1
コマンドと組み合わせると、ユーザー入力が検出されるまで、PCは無期限にスタンバイモードになります。
これら2つのコマンドの関係と、このように機能する理由を説明できますか?
コマンドを実行すると、「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
を使用して、コマンドが実行される前に両方のイベントが発生するようにします。
これはおそらく、システムが「ユーザーアクティビティ」と見なしていることと関係があると思います。
システムがキーボードアクティビティを検出すると、スリープから復帰します。 enterを押して強制スタンバイコマンドを送信するという事実は、「現在の」アクティビティとしてカウントされるため、すぐにスリープ解除されます。
sleep 1は、sleepコマンドが送信される前にキーボードが1秒間アクティビティを記録しないことを保証します。そのため、スタンバイが進みます。