web-dev-qa-db-ja.com

systemdで電源ボタンを押すとスクリプトを実行できますか?

私は周りを見回しても何も見つかりませんでした。私が見たものでは、人々は常にlogind.confが提供するものに満足しています。ここに興味深い部分がありますman logind.conf

HandlePowerKey=, HandleSuspendKey=, HandleHibernateKey=, HandleLidSwitch=, HandleLidSwitchDocked=
       Controls how logind shall handle the system power and sleep keys and the lid switch to trigger actions such as system power-off or suspend. Can be one of "ignore", "poweroff", "reboot", "halt", "kexec", "suspend", "hibernate", "hybrid-sleep", and "lock". If "ignore", logind will never handle these keys. If
       "lock", all running sessions will be screen-locked; otherwise, the specified action will be taken in the respective event. Only input devices with the
       "power-switch" udev tag will be watched for key/lid switch events.  HandlePowerKey= defaults to "poweroff".  HandleSuspendKey= and HandleLidSwitch= default to
       "suspend".  HandleLidSwitchDocked= defaults to "ignore".  HandleHibernateKey= defaults to "hibernate". If the system is inserted in a docking station, or if
       more than one display is connected, the action specified by HandleLidSwitchDocked= occurs; otherwise the HandleLidSwitch= action occurs.

       A different application may disable logind's handling of system power and sleep keys and the lid switch by taking a low-level inhibitor lock
       ("handle-power-key", "handle-suspend-key", "handle-hibernate-key", "handle-lid-switch"). This is most commonly used by graphical desktop environments to take
        over suspend and hibernation handling, and to use their own configuration mechanisms. If a low-level inhibitor lock is taken, logind will not take any action
       when that key or switch is triggered and the Handle*= settings are irrelevant.

次に、ここで興味深い部分を繰り返します。

システムの電源オフや一時停止などのアクションをトリガーするために、logindがシステムの電源キーとスリープキー、およびふたのスイッチを処理する方法を制御します。 「ignore」、「poweroff」、「reboot」、「halt」、「kexec」、「suspend」、「hibernate」、「hybrid-sleep」、「lock」のいずれかになります。

または、私は間違った方法で、これはキーボードのキー用であり、電源ボタンではありませんか?

いずれにせよ、以前はacpiで簡単でした。/usr/lib/acpid/power_buttonスクリプトを置き換えるだけでした。systemdに相当するものはありませんか?

NB(重要)systemdでキーボードの電源キーを押したときにスクリプトを実行するにはどうすればよいですか? は重複していないため systemdの下でスクリプトを実行するために電源ボタンのシャットダウンアクションを変更する方法 と誤ってマークされましたこれは電源ボタンではなくキーボードから電源キーを管理するため、私の質問に答えません:

Power button

そして、@ TooTeaによって示唆されているように、ケースに統合されたボタンがキーボードのボタンを押したと見なされるのは本当かもしれません。押されたキーを監視するためのevent-kbdファイル、それは間違いなく私の質問に答えません。

4
gluttony

最後に解決策を見つけましたが、私はopenboxを使用しているので幸運です:

そして、私の場合、LXDEの下で、次に~/.config/openbox/lxde-rc.xmlおよび<keyboard> ... </keyboard>セクション追加:

  <keybind key="XF86PowerOff">
      <action name="Execute">
        <command>command or script to run</command>
      </action>
  </keybind>

たとえば、私のテストでは、「電源オフが押されました」というポップアップを開くだけです。

  <keybind key="XF86PowerOff">
      <action name="Execute">
        <command>zenity --info --text="Power off pressed"</command>
      </action>
  </keybind>

次に、端末タイプopenbox-lxde --reconfigureそれが考慮されるように、タワーケースの電源ボタンを押すと、次のメッセージが表示されます。

enter image description here

編集:私は言及するのを忘れていました(ただし、これが必須かどうかはわかりません)、システムシャットダウンボタンを何も設定していません。これを確認するには、[スタートメニュー]-> [システム]-> [設定]-> [パワーマネージャ]に移動します。 、「電源ボタンが押されたとき」が「何もしない」に設定されていることを確認します。

enter image description here

1
gluttony