我试图用Python实现一个dbus侦听器,它在会话被锁定时执行一个函数,当会话被解锁时执行另一个函数。基本上,我希望将以下命令转换为Python程序(显然,该命令没有回调):
gdbus monitor -y -d org.freedesktop.login1 | grep LockedHint
此命令返回以下命令:
^{pr2}$PythonMWE来了。但是,它没有收到任何消息(尝试用sudo启动它并以用户身份启动):
#!/usr/bin/env python
from datetime import datetime
import dbus
import gobject
from dbus.mainloop.glib import DBusGMainLoop
def locker_callback(*args):
print "%s Lock%s" % (datetime.now().ctime(), args)
DBusGMainLoop(set_as_default=True) # integrate into gobject main loop
bus = dbus.SystemBus() # connect to system wide dbus
bus.add_signal_receiver( # define the signal to listen to
locker_callback, # callback function
'LockedHint', # signal name
'org.freedesktop.DBus.Properties.PropertiesChanged', # interface
'org.freedesktop.login1' # bus name
)
loop = gobject.MainLoop()
loop.run()
仅供参考,我使用XScreenSaver在ubuntu18.04上运行xfce。在
“LockedHint”不是信号,而是属性。信号在接口
org.freedesktop.DBus.Properties
中为“PropertiesChanged”。通常使用d-feet(一种图形化的d-Bus“调试器”)查找这些代码是最容易的,但我相信API文档也会显示这一点。在以下是工作属性通知的相同代码:
当然,这将为每个属性更改打印一行,而不仅仅是“LockedHint”。另外,请注意,dbus模块现在是遗留的:您可能需要查看pydbus以获取新代码。在
如果您想在用户会话中运行处理程序,并且只对自己的会话被锁定感兴趣,那么您可能不想使用logindapi:看看
org.freedesktop.ScreenSaver
(在会话总线中)作为替代(它将简单得多,因为名称是众所周知的,并且有一个“ActiveChanged”信号可以使用)。我再次建议使用d-feet来浏览API。在相关问题 更多 >
编程相关推荐