当系统从挂起状态恢复时,我想通过dbus获取通知。 遵循这些现有的问题:
但是,当我暂停或恢复时,上述链接中find的示例都不会触发。 dbus-monitor也没有看到任何东西:
dbus-monitor --system "type='signal',interface='org.freedesktop.UPower'"
我也尝试使用这个代码手动发射信号(更容易):
#taken from /usr/lib/systemd/system/upower.service dbus-send --system --type=signal --dest=org.freedesktop.UPower \ /org/freedesktop/UPower org.freedesktop.UPower.Resuming
同样的结果。 我必须错过一些非常明显的东西。 Fedora 20 x86_64。 (dbus安装好了,运行正常,AFAICT工作正常)Fedora 20使用logind ,但是在那里我看不到任何“恢复”信号。 挂起和恢复很难用VirtualBox进行testing,所以我无法真正与其他操作系统进行比较。
有趣的是,QDBUS看到很多服务(org.gnome.SessionManager等),但没有任何电力相关的,但是,然后再次,它不会看到login1 ..
qdbus | grep -i power | wc -l 0
根据对upower使用的devkit邮件列表的同一问题的回答 ,新版本不再发出那个信号,因为systemd处理了这个信号 。
systemd-land中的replace是logind ,它有一个名为PrepareForSleep的信号: “PrepareForShutdown()和PrepareForSleep()信号是在(使用参数True)之前和使用参数False之后发送的,系统closures重启/关机,挂起/hibernate“。
这里是一个简单的Python脚本来观看暂停/恢复事件:
#!/usr/bin/env python from datetime import datetime import dbus import gobject from dbus.mainloop.glib import DBusGMainLoop def handle_sleep(*args): print "%s PrepareForSleep%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 handle_sleep, # callback function 'PrepareForSleep', # signal name 'org.freedesktop.login1.Manager', # interface 'org.freedesktop.login1' # bus name ) loop = gobject.MainLoop() loop.run()
上面的答案帮了我很多! 但是,如果有人需要一个Qt版本…
#!/usr/bin/env python3 from datetime import datetime import sys, dbus from PyQt4.QtGui import QApplication from dbus.mainloop.qt import DBusQtMainLoop class DBusListener(): def handle_sleep(self, suspended): print(datetime.now().ctime()," Suspended? ", str(suspended)) def __init__(self): DBusQtMainLoop(set_as_default=True) # integrate into Qt main loop bus = dbus.SystemBus() # connect to system wide dbus bus.add_signal_receiver( # define the signal to listen to self.handle_sleep, # callback function 'PrepareForSleep', # signal name 'org.freedesktop.login1.Manager', # interface 'org.freedesktop.login1' # bus name ) app = QApplication(sys.argv) DBusListener() app.exec_()