Lista dostępnych usług DBus

65

Czy istnieje coś takiego jak lista dostępnych usług DBus?
Natknąłem się na kilka (takich jak NetworkManager, Rhythmbox, Skype, HAL).
Zastanawiam się, czy mogę znaleźć raczej pełną listę świadczonych usług / interfejsów.

szalony
źródło

Odpowiedzi:

85

Sesja:

dbus-send --session           \
  --dest=org.freedesktop.DBus \
  --type=method_call          \
  --print-reply               \
  /org/freedesktop/DBus       \
  org.freedesktop.DBus.ListNames

System:

dbus-send --system            \
  --dest=org.freedesktop.DBus \
  --type=method_call          \
  --print-reply               \
  /org/freedesktop/DBus       \
  org.freedesktop.DBus.ListNames

Możesz także użyć DFeet, jeśli wolisz narzędzie GUI.

don_crissti
źródło
1
@ don-crissti jak wyświetlić wszystkie ścieżki obiektu w ramach usługi za pomocą dbus-sendlub gdbus?
Khurshid Alam
1
@KhurshidAlam - dodałem odpowiedź tutaj .
don_crissti
30

qdbusviewerjest twoim najlepszym przyjacielem; pozwala również wysyłać wiadomości D-bus:

qdbusviewer pokazuje kartę Session Bus z trzema podpanelami

stokrotka
źródło
Wygląda na zepsuty od 2014 r. Wymienia usługi, ale nie może wysyłać wiadomości.
Pithikos,
5
Nie mogę nawet uruchomić go na Ubuntu 14.04. Nie działa z:qdbusviewer: could not exec '/usr/lib/i386-linux-gnu/qt4/bin/qdbusviewer': No such file or directory
kasperd
3
@Pithikos d-feetdziała od dzisiaj.
sherrellbc
@sherrellbc Proszę rozważyć dodanie d-feetjako odpowiedzi, aby było bardziej widoczne
mivk
27

Sposób python jest piękny sposób.

Usługi systemowe:

import dbus
for service in dbus.SystemBus().list_names():
    print(service)

Usługi sesji:

import dbus
for service in dbus.SessionBus().list_names():
    print(service)
Pithikos
źródło
Pozytywne. Zadałem dodatkowe pytanie do twojej odpowiedzi. unix.stackexchange.com/questions/203410/…
user768421
Mam pytanie, w środowisku graficznym Plasma 5, usługa org.kde.Spectacle służy do robienia zrzutów ekranu (i działa), ale nie jest wymieniona ani w szynie systemowej, ani w szynie sesji, dlaczego?
Miau
Aby pomóc tym, którzy mogą szukać: przynajmniej dla Pythona w wersji 2.7.13 i 3.6, potrzebnym pakietem jest dbus-python , z którym można zainstalować pip install dbus-python. Dostępny jest również pakiet python-dbus (nie byłem w stanie pracować w ciągu 2 minut, które próbowałem).
bschlueter
6

gdbusjest częścią glib2 i obsługuje uzupełnienia Bash. Oto jak z niego korzystać (w Fedorze):

bash-4.4$ source /usr/share/bash-completion/completions/gdbus
bash-4.4$ gdbus call --system --dest <TAB><TAB>

Spowoduje to wyświetlenie wszystkich możliwych miejsc docelowych. Aby uzyskać listę dostępnych interfejsów DBus eksportuje org.freedesktop.DBus.ListNamesmetodę. Możesz to nazwać, uruchamiając:

gdbus call --system --dest org.freedesktop.DBus \
           --object-path /org/freedesktop/DBus  \
           --method org.freedesktop.DBus.ListNames

Niestety prowadzi to do nieczytelnego wyniku. Na szczęście dane wyjściowe są poprawnymi pythonami, więc jest to możliwe:

gdbus call --system --dest org.freedesktop.DBus      \
           --object-path /org/freedesktop/DBus       \
           --method org.freedesktop.DBus.ListNames | \
    python -c 'import sys, pprint; pprint.pprint(eval(sys.stdin.read()))'

Zwykle tego nie robię, ale jest fajną sztuczką, aby mieć na sobie rękaw. Używam gdbusdo introspekcji i sprawdzania koncepcji przed przejściem do kodu. Ukończenie bashu oszczędza dużo pisania i pozwala uniknąć literówek. Byłoby miło gdbuswyświetlać ładniejszy wynik.

gekony
źródło