Próbuję filtrować każde powiadomienie przez espeak. Jednak nie mogę znaleźć sposobu na uzyskanie treści powiadomienia ze skryptu Pythona, a nawet jakiej nazwy sygnału należy słuchać.
bus.add_signal_receiver(espeak,
dbus_interface="org.freedesktop.Notifications",
signal_name="??")
Próba znalezienia go w Google wydaje się przynosić wyniki obejmujące tworzenie nowych powiadomień, więc teraz jestem całkowicie zagubiony.
Czy ktoś może mi w tym pomóc?
Krótko mówiąc, chcę nasłuchiwać przychodzących powiadomień za pomocą Pythona i uzyskiwać atrybut „body” powiadomienia.
dbus-monitor "type='signal',interface='org.freedesktop.Notifications'"
Pokazuje tylkodbus-monitor "interface='org.freedesktop.Notifications'"
powiadomienia (typ to „method_call”, a nie „signal”).Odpowiedzi:
Aby zachować to na bieżąco: od dbus 1.5. Wymagany jest dodatkowy parametr podczas dodawania ciągu dopasowania,
bus.add_match_string_non_blocking
aby upewnić się, że otrzymamy wszystko.Wynikowy kod wyglądałby następująco:
źródło
unable to connect to session bus: Operation was cancelled
. Przechodzimybus
do filtra.from gi.repository import GLib as glib
to zrobić.Przez powiadomienia rozumiesz „bąbelki OSD”, które wysyła niektóre oprogramowanie, takie jak zmiana głośności, czat itp.? Chcesz stworzyć program pythonowy do przechwytywania ich?
Cóż, Ask Ubuntu nie jest programistą, a programowanie jest nieco poza zakresem, ale oto mały kod, który przechwyciłem bańki powiadomień:
Pozostaw to uruchomione w terminalu, a następnie otwórz inne okno terminala i przetestuj:
A program wyświetli to:
Jak można się domyślać,
message.get_args_list()[0]
jest to nadawca, [2] dla ikony, [3] dla streszczenia i [4] dla tekstu podstawowego.Znaczenie innych pól można znaleźć w oficjalnej dokumentacji specyfikacji
źródło
Miałem problem z uruchomieniem któregokolwiek z innych przykładów, ale w końcu dotarłem. Oto działający przykład:
Jeśli chcesz zobaczyć bardziej szczegółowy przykład działania, polecam przejrzenie Notifications.py w najnowszym projekcie powiadomień .
źródło