Mam zabawy z dbus-monitora , aby spróbować zrozumieć, jak dbus pracuje w środowisku Ubuntu. Mam kilka pytań w tym zakresie:
Czy możesz dać mi znać, jak prawidłowo przeczytać poniższe informacje? Rozumiem wielki pomysł, ale nie szczegóły.
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
Rozumiem, że pierwszy to sygnał, a drugi to metoda. Czy przeznaczenie oznacza, że może istnieć określony odbiornik / gniazdo dla sygnału? Co jest członkiem ? I czy pozycje na liście po sygnale przekazywane są w argumencie? Kim są nadawcy i seriale ?
Zauważyłem coś o związku między regulacją głośności a powiadomieniami. Z tego, co przeczytałem z wyjścia monitora dbus
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
Wygląda na to, że powiadomienie jest uruchamiane za pomocą tej metody. Po prostu tak naprawdę nie rozumiem, dlaczego to działa w ten sposób. Moim zdaniem bardziej sensowne byłoby, gdyby emitowany był sygnał „powiadomienie-audio-objętość-nośnik”, podczas gdy powiadomienie nasłuchiwałoby tego sygnału i odpowiednio zareagowałoby. Jeśli wysyłanie / odbieranie byłoby publiczne, a nie prywatne, czy nie pozwoliłoby to na większą elastyczność i wydajność? Na przykład, jeśli istniał publiczny sygnał dla „powiadomienia-audio-głośności-medium” następnie kilka aplikacji mogłoby nasłuchiwać tego sygnału (co pozwoliłoby na powstanie konkurencyjnych aplikacji powiadamiających), a programiści musieliby się martwić wysyłaniem sygnałów, podczas gdy odbiór i obsługa sygnału byłaby działalnością aplikacji powiadamiającej (lub jakiejkolwiek innej) program, który potrzebuje tych sygnałów).
Jestem dopiero nowym użytkownikiem Dbus i chcę dowiedzieć się więcej, pracując z Dbus nad Pythonem, głównie w celu opracowania niektórych apletów. Widziałem samouczek dbus-python, który uczy, jak słuchać wszystkich sygnałów (nie określając ani interfejsu, ani ścieżki itp.) Ale jak śledzić metody, gdy są one wywoływane, tak jak robi to dbus-monitor?
Jeśli masz cierpliwość, aby nauczyć, jak to działa, nie ma za co.
org.freedesktop.Notifications
serwisu. W ten sposób wszystkie wywołania metod do tej usługi będą obsługiwane przez Twój kod.Szukałem również rozwiązania do zbierania powiadomień na pulpicie przez dbus ze skryptem python. To pytanie było najbliższe google, ale napisanie zamiennika dla not-osd wydawało się przesadą :)
Patrząc na źródła apletów z ostatnimi powiadomieniami dostałem kilka wskazówek, jak monitorować komunikaty dbus, a oto implementacja Pythona, którą wymyśliłem:
Mam nadzieję, że to komuś pomoże, ponieważ wydaje się, że nie ma wielu prostych przykładów Pythona związanych z monitorowaniem komunikatów dbus.
źródło
NameAquired
wiadomości)