如何删除系统禁止块?

如何删除系统禁止块?

有关的文档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)可能会有帮助。

相关内容