有关的文档Systemd 的抑制器锁并且man systemd 抑制详细解释如何以某种方式启动一个进程,因为它会阻止某些内容(例如事件handle-lid-switch
)。
我无法找到一种方法来允许我删除这样的“锁定”/“禁止”/“阻止”。
问题:有没有办法解除systemd-inhibit
锁定,例如通过dbus
消息?
背景:我需要什么才能移除抑制器锁**
我的笔记本电脑有一个笔记本电脑盖关闭开关,用于systemd-logind
监视并在盖关闭时暂停笔记本电脑 - 功能“ close-lid -> suspend
”。
一旦笔记本电脑被放置在其扩展坞中,为了使用户能够使用更大的屏幕,Gnome 的 gsd-power 可以任意(和 错误地并且 Gnome 中没有任何可用的设置来更改它)决定创建一个抑制锁,以防止“ ”功能close-lid -> suspend
发挥作用。
知道如何删除抑制锁,将使我能够纠正 Gnome 的 gnome-setting-deamon power 所做的错误设置gsd-power
。 Gnome的设置是错误的,因为手动调用挂起systemctl suspend
确实没有问题。
我想删除的抑制剂锁,如下所列systemd-inhibit --list
:
Who: alex (UID 1000/alex, PID 4248/gsd-power)
What: handle-lid-switch
Why: Multiple displays attached
Mode: block
答案1
Inhibit() 返回一个值,即封装锁的文件描述符。一旦文件描述符(及其所有副本)关闭,锁就会自动释放。如果客户端在获取锁时死亡,内核会自动关闭文件描述符,以便自动释放锁。以这种方式采取的延迟锁应该在接收到PrepareForShutdown(true)(见下文)时尽快释放,但当然只有在执行应用程序首先想要延迟操作的操作之后。
您可能不想杀死gsd-power
,因此您需要关闭封装锁的文件描述符。它很可能由 持有gsd-power
。强制另一个进程关闭其文件描述符之一不是一件正常的事情,并且可能会在gsd-power
.但如果你想做的话在 Stack Overflow 中阅读这个问题。
相反,您可以尝试删除gsd-power
执行 DBus 操作的权限org.freedesktop.login1.inhibit-handle-lid-switch
。这手册页dbus-daemon(1)
可能会有帮助。