デフォルトでは、Systemdは電源ボタンを押すとコンピュータをシャットダウンするように設定されています。私のユーザーがログインしていない限り、この動作を維持したいと思います。ログインしたらすぐに閉じるのではなく、閉じるダイアログボックスを開きたいです。
ログイン時に起動し、ログアウト時に停止するユーザーサービス無効化systemd
処理を実装しました。この方法は、呼び出しのために常に開いているアイドルsystemd-inhibit
スレッドがあることを除いて、うまく機能します。sleep 1000d
htop
クリーンアップするには、スレッドを眠らせずにこれを行う方法を探しています。
これは私のユーザーサービスです。
[Unit]
Description=User daemon to disable systemd's handling of the power button
[Service]
ExecStart=nohup systemd-inhibit \
--what="handle-power-key" \
--who="disable-shutdown-button script" \
--why="allows i3 to open shutdown-dialog instead" \
sleep 1000d
[Install]
WantedBy=default.target
編集する:ログインはlightdm
ディスプレイマネージャを介して行われます。
答え1
systemd-inhibit
別のユーザーサービスとして設定する代わりに、起動コマンドまたはGUIログインセッションに重要なコマンドの前に追加できます。i3
systemd-inhibit
重要なシステム更新タスクを実行するパッケージマネージャ、またはそのようなディスク書き込みなどの特定のタスク中に一時停止/休止状態/終了などのタスクを抑制する方法を提供することが目的であるため、実行するにはコマンドが必要になるように設計されています。抑制が必要なジョブが終了したり、何らかの理由で中断されたりすると、抑制が自動的に終了する可能性があります。
systemd-inhibit
この方法でセッションの開始に追加することは、systemd
/がlogind
制御グループを介してセッションに属するプロセスを追跡するために重複しているように見えるかもしれませんが、これはsleep
ダミーコマンドや同様のコマンドなしで使用パターンを適切にする唯一の方法です。
言及されたコメントは通常スクリプトとして実行されlightdm
ます。このスクリプトを変更するか、次のオーバーレイファイルをに配置できます。名前は直接選択できますが、名前にはサフィックスが必要です。lightdm-session
session-wrapper
/etc/lightdm/lightdm.conf.d/
.conf
[Seat:*]
session-wrapper=/usr/local/bin/shutdown-button-inhibit
スクリプトは/usr/local/bin/shutdown-button-inhibit
次のとおりです。
#!/bin/sh
if [ $(whoami) = "Julien" ] # edit this to match your username
then
exec systemd-inhibit \
--what="handle-power-key" \
--who="shutdown-button-inhibit script" \
--why="allows i3 to open shutdown-dialog instead" \
lightdm-session "$@"
else
exec lightdm-session "$@"
fi
このスクリプトを拡張子chmod 755 /usr/local/bin/shutdown-button-inhibit
。
使用すると、exec
スクリプトソルバーがlightdm-session
別のプロセスで待機するのではなく、独自に置き換えられます。
lightdm
設定が呼び出し以外のものとしてカスタマイズされている場合は、一致するようにlightdm-session
このスクリプトを編集する必要があります。