Какой сигнал DBus отправляется в системный режим ожидания?
Мне нужно определить, когда машина собирается спать в Ubuntu 9.10 и Fedora 13. Оба используют UPower, поэтому я искал шину DBus org.freedesktop.UPower для таких сигналов.
Я слушал "спящий" сигнал на шине UPower с помощью следующей команды:
dbus-monitor --system "type='signal',interface='org.freedesktop.UPower',member='Sleeping'"
Когда я сплю с машиной (закрыв крышку, выбрав "shutdown -> suspend" или отправив сообщение DBus), я не вижу события "sleep".
Я заметил, что событие "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 для прослушивания?
Большое спасибо,
Павел
2 ответа
Ваш вопрос привел меня к тому, что работает здесь:
> 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'
как в вашем посте, и это тоже сработало (только дало мне Спящие события).
Кстати, мне очень нравится аннотирование
В Fedora14 я использую ту же команду: dbus-monitor --system "type='signal',interface='org.freedesktop.UPower'" может отслеживать сигнал с помощью сигнала приостановки. Проверьте свою конфигурацию UPower.