我需要检测一台机器何时在Ubuntu 9.10和Fedora 13中睡觉.两者都使用UPower,所以我一直在寻找“org.freedesktop.UPower”DBus总线来获取这些信号.
我一直在使用以下命令监听UPower总线上的“休眠”信号:
dbus-monitor --system "type='signal',interface='org.freedesktop.UPower',member='Sleeping'"
当我睡觉机器时(通过关闭盖子,选择“关闭 – >暂停”或发送DBus消息)我没有看到“睡眠”事件.
我注意到,当调用“org.freedesktop.UPower.AboutToSleep”方法时,会发送“Sleeping”事件.我可以通过调用手动执行此操作:
dbus-send --print-reply --system --dest=org.freedesktop.UPower /org/freedesktop/UPower org.freedesktop.UPower.AboutToSleep
而且我注意到“睡眠”信号被触发了.我的理解是任何睡在PC上的东西都必须事先发出“AboutToSleep”信号.这似乎不会发生这种情况.我已经在Fedora 13和Ubuntu 9.10上尝试了这些步骤,我看到了相同的结果.
任何人都可以解释发生了什么,或者为我提供另一个DBus信号来监听吗?
非常感谢,
保罗
你的问题引导我在这里工作:
> annotate-output dbus-monitor --system "type='signal',interface='org.freedesktop.UPower'" 08:07:00 I: Started dbus-monitor --system type='signal',interface='org.freedesktop.UPower' 08:07:00 O: signal sender=org.freedesktop.DBus -> dest=:1.145 serial=2 path=/org/freedesktop/DBus; interface=org.freedesktop.DBus; member=NameAcquired 08:07:00 O: string ":1.145" 08:07:22 O: signal sender=:1.20 -> dest=(null destination) serial=189 path=/org/freedesktop/UPower; interface=org.freedesktop.UPower; member=Sleeping 08:07:41 O: signal sender=:1.20 -> dest=(null destination) serial=190 path=/org/freedesktop/UPower; interface=org.freedesktop.UPower; member=Resuming 08:08:10 O: signal sender=:1.20 -> dest=(null destination) serial=192 path=/org/freedesktop/UPower; interface=org.freedesktop.UPower; member=Sleeping 08:10:08 O: signal sender=:1.20 -> dest=(null destination) serial=193 path=/org/freedesktop/UPower; interface=org.freedesktop.UPower; member=Resuming
所以你可以看到我确实得到了你似乎失踪的信号. @ 08:07:22我停了机器,@ 08:07:41我又开始了. @ 08:08:10我休眠了,@ 08:10:08又重新开始了.在这里完美无瑕地工作.我确实尝试添加,成员=’睡觉’就像在你的帖子中,这也有效(只给了我睡觉事件).
顺便说一下,我真的很喜欢annotate-output