Я играю с dbus-monitor, чтобы попытаться понять, как dbus работает в среде Ubuntu. У меня есть несколько вопросов по этому поводу:
Не могли бы вы дать мне знать, как правильно читать следующее? Я понимаю большую идею, но не детали.
signal sender=:1.1948 -> dest=(null destination) serial=1829990 path=/org/ayatana/menu/DA00003; interface=org.ayatana.dbusmenu; member=ItemPropertyUpdated int32 23 string "enabled" variant boolean true method call sender=:1.6 -> dest=org.freedesktop.Notifications serial=1399 path=/org/freedesktop/Notifications; interface=org.freedesktop.Notifications; member=GetCapabilities
Я понимаю, что первый - это сигнал, а второй - метод. Означает ли пункт назначения, что может быть определенный приемник / слот для сигнала? Какой член ? И соответствуют ли пункты списка сигналу аргументы, передаваемые в сигнале? Что такое отправитель и сериалы ?
Я заметил кое-что о связи между регулировкой громкости и уведомлениями. Из того, что я прочитал с выхода dbus-monitor
method call sender=:1.6 -> dest=org.freedesktop.Notifications serial=1400 path=/org/freedesktop/Notifications; interface=org.freedesktop.Notifications; member=Notify string "gnome-settings-daemon" uint32 0 string "notification-audio-volume-medium" string " " string "" array [ ] array [ dict entry( string "value" variant int32 38 ) dict entry( string "x-canonical-private-synchronous" variant string "volume" ) ] int32 -1
Кажется, что уведомление вызывается его методом. Я просто не очень понимаю, почему это так работает. На мой взгляд, было бы более разумно, если бы существовал сигнал "Notification-Audio-Volume-Medium", в то время как уведомление будет прослушивать этот сигнал и реагировать соответствующим образом. Если бы отправка / получение было бы общедоступным, а не частным, разве это не позволило бы повысить гибкость и эффективность? Например, если был публичный сигнал для «уведомления-аудио-объем-носитель» тогда несколько приложений могли бы прослушивать этот сигнал (что позволило бы появиться конкурирующим приложениям для уведомлений), и разработчики просто должны были бы заботиться об отправке сигналов, тогда как сбор и обработка сигнала были бы делом уведомляющего приложения (или любого другого программа, которая нуждается в этих сигналах).
Я просто новичок в Dbus и хочу узнать больше, поскольку я работаю с Dbus на Python, главным образом над разработкой некоторых апплетов. Я видел учебник по dbus-python, и он учит, как прослушивать все сигналы (не указывая ни интерфейс, ни путь и т. Д.). Но как отслеживать методы при их вызове, как это делает dbus-monitor?
Если у вас есть терпение, чтобы научить, как это работает, милости просим.
org.freedesktop.Notifications
услугу. Таким образом, все вызовы методов для этого сервиса будут обрабатываться вашим кодом.Я также искал решение для сбора уведомлений на рабочем столе через dbus с помощью скрипта Python. Этот вопрос был ближе всего к поиску, но написание замены для notify-osd казалось излишним :)
Просматривая источники апплета недавних уведомлений, я получил несколько советов, как отслеживать сообщения dbus, и вот реализация Python, с которой я столкнулся:
Надеюсь, это кому-нибудь поможет, так как кажется, что не так много простых примеров на python, связанных с мониторингом сообщений dbus.
источник
NameAquired
сообщения)