web-dev-qa-db-ja.com

電源ボタンのシャットダウンアクションを変更して、systemdでスクリプトを実行する方法

システムをシャットダウンする代わりにカスタムスクリプトを実行するように、debian 10 systemdの下で電源ボタンのシャットダウンアクションをどのように変更しますか?

これがacpiによって処理されたときは、/ etc/acpi内のスクリプトを編集できました。これまでに見つけた唯一の提案は、さまざまな電源関連のバイナリをスクリプトに置き換えることです。

バイナリを置き換えずにこれを行う方法はありますか?

2
user3718260

何をしたいかによります。

  • 何らかの操作の実行中に電源を一時的にブロックする必要がある場合は、systemd-inhibitを参照してください。このように、スリープ、サスペンドなどをブロックすることもできます。また、一時的に(プログラムが実行されている限り)systemdに電源ボタンを無視するように指示することもできます。これは、他のプログラムに代わりに動作させることを目的としています。

  • シャットダウンする前に追加のコードを実行するだけの場合は、poweroff.targetでサービスを開始できます。 shutdown.targetreboot.targetを検討することもできます。 (電源ボタンの機能を完全に変更したい場合は、poweroff.targetを変更してsystemd-poweroff.serviceを取得しないようにすることもできます。ただし、systemctl poweroffpoweroffなどに注意してください。それも通過します)。

  • Systemdによる電源ボタンの処理を完全に無効にしたい場合は、最初に、通常ログインする実際にログインしていることを知る必要があります。 /etc/systemd/logind.confHandlePowerKeyオプションを使用すると、(ignoreに設定することで)無効にできます。その後、他のプログラムにキーをリッスンさせることができます。

2
derobert

私が本当に望んでいた解決策ではありませんが、これが私がやったことです:

設定

HandlePowerKey=ignore

/etc/systemd/logind.confでsystemdから電源キーの処理を削除します。

その後、他のキーと同じように電源ボタンを操作できます。

私の場合、keypressイベントを

/dev/input/by-path/platform-r_gpio_keys-event

この質問で説明されているように Linux入力デバイスからのキーへのアクセス

リンクされた質問のサンプルプログラムの変更バージョンを作成して、電源コード(キーコード116)を待ち、スクリプトを実行しました。

2
user3718260