Você está certo. Então, só para ter uma resposta adequada aqui eu modifiquei o seu código para um trabalho (pelo menos no Ubuntu 15.10, Unify):
#!/usr/bin/env python
import gobject
import dbus
from dbus.mainloop.glib import DBusGMainLoop
def filter_cb(bus, message):
if message.get_member() != "EventEmitted":
return
args = message.get_args_list()
if args[0] == "desktop-lock":
print("Lock Screen")
elif args[0] == "desktop-unlock":
print("Unlock Screen")
DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
bus.add_match_string("type='signal',interface='com.ubuntu.Upstart0_6'")
bus.add_message_filter(filter_cb)
mainloop = gobject.MainLoop()
mainloop.run()