Я пытаюсь реализовать слушатель dbus в Python, который выполняет функцию, когда сеанс заблокирован, и другую функцию, когда сеанс разблокирован. По сути, я хочу превратить следующую команду в программу Python (очевидно, эта команда не имеет обратного вызова):
gdbus monitor -y -d org.freedesktop.login1 | grep LockedHint
Эта команда возвращает следующее:
/org/freedesktop/login1/session/_32: org.freedesktop.DBus.Properties.PropertiesChanged ('org.freedesktop.login1.Session', {'LockedHint': <true>}, @as [])
/org/freedesktop/login1/session/_32: org.freedesktop.DBus.Properties.PropertiesChanged ('org.freedesktop.login1.Session', {'LockedHint': <false>}, @as [])
Питон MWE здесь. Однако он не получает никаких сообщений (попытался запустить его с помощью 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()
Просто для справки, я запускаю xfce на Ubuntu 18.04 с XScreenSaver.