Is there such a thing as list of available D-Bus services? I've stumbled upon a few, like those provided by NetworkManager, Rhythmbox, Skype, HAL.
I wonder if I can find a rather complete list of provided services/interfaces.
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It only takes a minute to sign up.
Sign up to join this communityOn QT
setups (short commands and clean, human readable output) you can run:
qdbus
will list list the services available on the session bus and
qdbus --system
will list list the services available on the system bus.
On any setup you can use dbus-send
dbus-send --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListNames
Just like qdbus
, if --session
or no message bus is specified, dbus
will send to the login session message bus. So the above will list the services available on the session bus.
Use --system
if you want instead to use the system wide message bus:
dbus-send --system --print-reply --dest=org.freedesktop.DBus /org/freedesktop/DBus org.freedesktop.DBus.ListNames
You could also use DFeet if you prefer a graphical tool (see the other answers for more GUI options).
dbus-send
or gdbus
?
– Khurshid Alam
Jan 8 '15 at 9:06
The python way is the beautiful way.
System services:
import dbus
for service in dbus.SystemBus().list_names():
print(service)
Session services:
import dbus
for service in dbus.SessionBus().list_names():
print(service)
pip install dbus-python
. The python-dbus package is also available (I was unable to get in working in the 2 minutes I tried).
– bschlueter
Aug 30 '17 at 5:09
qdbusviewer
is your best friend; it allows you to send D-bus messages as well:
qdbusviewer: could not exec '/usr/lib/i386-linux-gnu/qt4/bin/qdbusviewer': No such file or directory
– kasperd
Dec 28 '14 at 23:54
d-feet
as an answer to make it more visible
– mivk
Feb 12 '17 at 14:18
gdbus
is part of glib2 and supports Bash completions. Here is how to use it (on Fedora):
bash-4.4$ source /usr/share/bash-completion/completions/gdbus
bash-4.4$ gdbus call --system --dest <TAB><TAB>
This will show all possible destinations. To get a list of the available interfaces DBus exports the org.freedesktop.DBus.ListNames
method. You can call it by running:
gdbus call --system --dest org.freedesktop.DBus \
--object-path /org/freedesktop/DBus \
--method org.freedesktop.DBus.ListNames
Unfortunately this leads to unreadable output. Fortunately the output is valid python, so this is possible:
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()))'
I don't usually do this, but is a nice trick to keep on sleeve. I use gdbus
for introspecting and proving concepts before moving to code. The bash completion saves a lot of typing and avoid typos. Would be nice to have gdbus
displaying a nicer output.