SystemdのInhibitor Locks および man systemd-inhibit に関するドキュメントは、何かをブロックする方法でプロセスを開始する方法を説明するために非常に詳細に説明されています(例:handle-lid-switch
イベント)。
そのような「ロック」/「禁止」/「ブロック」を削除する方法を見つけることができませんでした。
質問:dbus
メッセージなどを介してsystemd-inhibit
ロックを削除する方法はありますか?
背景:抑制ロックを削除するには何が必要ですか**
私のラップトップには、ラップトップのふたを閉じるスイッチがあります。これはsystemd-logind
が監視し、ふたが閉じている場合はラップトップを一時停止します-機能 "close-lid -> suspend
"。
ラップトップがドッキングステーションに配置されると、ユーザーに大きな画面を表示するために、Gnomeのgsd-powerが勝手に(そして誤って、Gnomeで使用可能な設定を変更せずに)決定します禁止ロックを作成し、機能「close-lid -> suspend
」が機能しないようにします。
抑制ロックを削除する方法を知っていれば、Gnomeのgnome-setting-deamon power gsd-power
によって行われた誤った設定を修正できます。手動でサスペンドsystemctl suspend
を呼び出すと、実際には問題がなかったため、Gnomeの設定は間違っています。
systemd-inhibit --list
にリストされているように、削除したい抑制ロックは次のとおりです。
Who: alex (UID 1000/alex, PID 4248/gsd-power)
What: handle-lid-switch
Why: Multiple displays attached
Mode: block
Inhibit()は、単一の値、つまりロックをカプセル化するファイル記述子を返します。ファイル記述子が閉じられると(およびそのすべての複製)、ロックは自動的に解放されます。ロックが取得されている間にクライアントが停止すると、カーネルはファイル記述子を自動的に閉じて、ロックが自動的に解放されるようにします。この方法で取得された遅延ロックは、PrepareForShutdown(true)(以下を参照)の受信時にできるだけ早く解放する必要がありますが、もちろん、アプリケーションが最初に操作を遅延させたいアクションの実行後にのみ解放されます。
おそらく_gsd-power
_を強制終了したくないので、ロックをカプセル化するファイル記述子を閉じる必要があります。ほとんどの場合、_gsd-power
_によって保持されています。別のプロセスにそのファイル記述子の1つを強制的に閉じることは通常のことではなく、_gsd-power
_内にいくつかの副作用を引き起こす可能性があります。しかし、それをやりたいのであれば、 Stack Overflowでこの質問を読んでください。
代わりに、DBusアクション_gsd-power
_を実行するための_org.freedesktop.login1.inhibit-handle-lid-switch
_の権限を削除してみてください。 manページdbus-daemon(1)
が役立つ場合があります。