logind.confの「HandlePowerKey」オプションを使用して、電源ボタンの動作を制御できます。 「一時停止」に設定されています。電源ボタンをタップすると、期待どおりに動作し、オペレーティングシステムが一時停止します。しかし、ボタンを押し続けるとそれを無視してコンピュータがシャットダウンするようです。どうやってこれが起こったのですか?
私が尋ねる理由は、/lib/systemd/system-sleepにあるスクリプトが長時間電源を入れたままにしておくと正しく実行されないためです。
答え1
電源ボタンはシステムファームウェアによって処理されます。一般的な構成は次のとおりです。
ボタンを押したときその後、リリース、ファームウェアはオペレーティングシステムに電力を供給し、順次シャットダウンまたは一時停止をトリガします。
ボタンを押して数秒以内に離すと、ファームウェアはオペレーティングシステムに通知せずにシステムの電源を切ります。
2つのシーケンスは2つのうちの1つです。システムを一時停止してからシャットダウンする必要はありません。これが電源ボタンを長押ししてもスクリプトが実行されない理由です。オペレーティングシステムはこれを認識しません。
答え2
これには2つのことがあります。
まず、Stephenが提案したように、マザーボードのファームウェアはボタンの信号を処理します。ボタンを押すタイミングによって、ファームウェアが何をするかを決定します。
その後、ファームウェアはACPI信号をオペレーティングシステムに送信します。電源ボタンをすばやく押すと、電源ボタン信号が送信されます。リセットボタンを押すとリセット信号が送信されます。ボタンを押し続けると、ファームウェアはオペレーティングシステムにシグナルを送信せずにシステムの電源を遮断するため、オペレーティングシステムが順番にシャットダウンする時間は提供されません。つまり、ファームウェアはオペレーティングシステムにシグナルを送信しないため、通常シャットダウン時に実行されるすべてのスクリプトとトリガーは実行されません。これは、電源ボタンを長押しするとスクリプトが機能しない理由を説明します。
動作を制御するには、オペレーティングシステムがACPI終了信号を処理する方法を設定する必要があります。したがって、コンピュータを停止させるには、電源ボタンを押したときにオペレーティングシステムを停止するように設定します。
ただし、電源ボタンを長押しすると、オペレーティングシステムがファームウェアから信号を受信しないため、何も制御できません。
メッセージログに従うと
sudo tail -f /var/log/messages
電源ボタンを押したときに記録されたログを表示します。私のラップトップ(lenovo t14)とデスクトップ(asusマザーボード)では、電源ボタンを離すと両方が信号を受信します。
Aug 16 11:47:43 tp-01 systemd-logind[1508]: Power key pressed.
これは、マザーボードのファームウェアがプレスが長いか短いかを判断するのを待っているので意味があります。これは、長押しするとシステムの電源がすぐに遮断されるため、ボタンを放す前に電源が遮断され、信号が送信されないことを意味します。