Я играю с 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?
Если у вас есть терпение, чтобы научить, как это работает, милости просим.