web-dev-qa-db-ja.com

systemd-inhibitブロックを削除するにはどうすればよいですか?

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
3

抑制剤ロックの開発者向けドキュメントから:

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) が役立つ場合があります。

1
telcoM