![添加 Dbus 抑制剂但立即删除](https://linux22.com/image/95058/%E6%B7%BB%E5%8A%A0%20Dbus%20%E6%8A%91%E5%88%B6%E5%89%82%E4%BD%86%E7%AB%8B%E5%8D%B3%E5%88%A0%E9%99%A4.png)
我了解到可以通过以下方式为 GUI 会话创建抑制剂总线。然而,当我尝试添加抑制剂时,它会立即被删除。这是一个例子。
我通过此命令调用添加抑制剂(这应该防止发生注销):
qdbus org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.Inhibit "x-terminal-emulator" $(xdotool getactivewindow) "TEST REASON" 1
的输出dbus-monitor
表明它已被添加,但随后立即被删除。
$ dbus-monitor --profile | grep -i inhibitor
sig 1474613346.596581 156 :1.23 <none> /org/gnome/SessionManager org.gnome.SessionManager InhibitorAdded
sig 1474613346.603137 159 :1.23 <none> /org/gnome/SessionManager org.gnome.SessionManager InhibitorRemoved
我该如何解决这个问题?
使用系统:Ubuntu 16.04、Unity
答案1
抑制剂会立即被删除,因为它会在 dbus 客户端断开连接时自动删除。
因此,只要抑制有效,您就必须让客户端保持运行。
例子:
python3 -c 'import pydbus; pydbus.SessionBus().get(
"org.gnome.SessionManager").Inhibit("what", 0, "why", 1);
import time; time.sleep(2**32-1)'
与测试相关的是D-Bus 接口的IsInhibited
和方法,例如:GetInhibitors
org.gnome.SessionManager
qdbus org.gnome.SessionManager /org/gnome/SessionManager \
org.gnome.SessionManager.IsInhibited 8
有关如何列出抑制剂的信息,请参见。列表_抑制剂()在我的一个实用程序中。