Мне нужно определить, когда машина переходит в спящий режим в Ubuntu 9.10 и Fedora 13. Обе используют UPower, поэтому я искал такие сигналы на шине DBus "org.freedesktop.UPower".
Я прослушивал "спящий" сигнал на шине UPower с помощью следующей команды:
dbus-monitor --system "type='signal',interface='org.freedesktop.UPower',member='Sleeping'"
Когда я сплю машину (закрыв крышку, выбрав «выключение -> приостановить» или отправив сообщение DBus), я не вижу события «спящий».
Я заметил, что событие «Sleeping» отправляется, когда вызывается метод org.freedesktop.UPower.AboutToSleep. Я могу сделать это вручную, позвонив:
dbus-send --print-reply --system --dest=org.freedesktop.UPower /org/freedesktop/UPower org.freedesktop.UPower.AboutToSleep
И я замечаю, что срабатывает "спящий" сигнал. Я понимаю, что все, что спит, ПК должно заранее послать сигнал «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 он снова был перезапущен. Здесь работает безупречно. Я пытался добавить ,member='Sleeping'
как в вашем сообщении, и это тоже сработало (мне дали только события Sleeping).
Кстати, мне очень нравится аннотировать-вывод
В Fedora14 я использую ту же команду dbus-monitor --system "type = 'signal', interface = 'org.freedesktop.UPower'", чтобы отслеживать сигнал с приостановленным сигналом. Проверьте свой UPower Config.