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.

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.


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


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)

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.