我需要检测机器在 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 信号吗?
非常感谢,
保罗
答案1
您的问题让我想到了一些可以起作用的东西:
> 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 它又重新启动了。这里运行完美。我确实尝试,member='Sleeping'
在你的帖子中添加类似的东西,那也有效(只给了我睡眠事件)。
顺便说一句,我真的很喜欢注释输出
答案2
在 Fedora14 下我使用同样的命令 dbus-monitor --system "type='signal',interface='org.freedesktop.UPower'" 可以监控带有挂起信号的信号。检查你的 UPower 配置。