Daftar layanan DBus yang tersedia

65

Apakah ada daftar layanan DBus yang tersedia?
Saya menemukan beberapa (seperti yang disediakan oleh NetworkManager, Rhythmbox, Skype, HAL).
Saya ingin tahu apakah saya dapat menemukan daftar layanan / antarmuka yang disediakan agak lengkap.

teman gila
sumber

Jawaban:

85

Sidang:

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

Sistem:

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

Anda juga dapat menggunakan DFeet jika Anda lebih suka alat GUI.

don_crissti
sumber
1
@ don-crissti bagaimana cara mendaftar semua jalur objek di bawah layanan dengan dbus-sendatau gdbus?
Khurshid Alam
1
@KhurshidAlam - Saya telah menambahkan jawaban di sini .
don_crissti
30

qdbusvieweradalah teman baikmu; memungkinkan Anda untuk mengirim pesan D-bus juga:

qdbusviewer menunjukkan tab Session Bus dengan tiga subpanel

bunga aster
sumber
Tampaknya rusak pada 2014. Ini daftar layanan tetapi tidak dapat mengirim pesan ..
Pithikos
5
Saya bahkan tidak bisa memulainya di Ubuntu 14.04. Gagal dengan:qdbusviewer: could not exec '/usr/lib/i386-linux-gnu/qt4/bin/qdbusviewer': No such file or directory
kasperd
3
@Pithikos d-feetbekerja mulai hari ini.
sherrellbc
@sherrellbc Silakan pertimbangkan untuk menambahkan d-feetsebagai jawaban agar lebih terlihat
mivk
27

Cara python adalah cara yang indah.

Layanan sistem:

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

Layanan sesi:

import dbus
for service in dbus.SessionBus().list_names():
    print(service)
Pithikos
sumber
Terpilih. Saya mengajukan pertanyaan lanjutan untuk jawaban Anda. unix.stackexchange.com/questions/203410/…
user768421
Saya punya pertanyaan, di lingkungan desktop Plasma 5, layanan org.kde.Spectacle digunakan untuk mengambil tangkapan layar (dan berfungsi), tetapi tidak tercantum dalam bus sistem atau bus sesi, mengapa begitu?
Meow
Untuk membantu mereka yang mungkin mencari: untuk setidaknya python 2.7.13 dan 3.6, paket yang diperlukan untuk ini adalah dbus-python , dapat diinstal dengan pip install dbus-python. Paket python-dbus juga tersedia (saya tidak dapat bekerja dalam 2 menit saya mencoba).
bschlueter
6

gdbusadalah bagian dari glib2 dan mendukung penyelesaian Bash. Berikut cara menggunakannya (di Fedora):

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

Ini akan menampilkan semua tujuan yang memungkinkan. Untuk mendapatkan daftar antarmuka yang tersedia, DBus mengekspor org.freedesktop.DBus.ListNamesmetode ini. Anda dapat memanggilnya dengan menjalankan:

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

Sayangnya ini menyebabkan output yang tidak dapat dibaca. Untungnya outputnya adalah python yang valid, jadi ini mungkin:

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()))'

Saya biasanya tidak melakukan ini, tetapi merupakan trik yang bagus untuk tetap bertahan. Saya gunakan gdbusuntuk mengintrospeksi dan membuktikan konsep sebelum pindah ke kode. Penyelesaian bash menghemat banyak pengetikan dan menghindari kesalahan ketik. Akan menyenangkan untuk gdbusmenampilkan output yang lebih bagus.

tokek
sumber