This page is part of the debugging series — pages with debugging details for a variety of Ubuntu packages.
As more and more applications and system services use D-Bus, it becomes more important to know how to see what happens on the bus.
There are two buses commonly used: the session bus and the system bus. Either may be used by any application, depending on what it is doing.
How to monitor the session bus
This one is easy. Just run dbus-monitor and watch the output. This usually gives you enough information about what is happening on the bus.
How to monitor the system bus
This is trickier, because D-Bus policy typically prevents anything but signals from being viewable by dbus-monitor. But we can change that.
- Create a file /etc/dbus-1/system-local.conf, with these contents:
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> <busconfig> <policy user="root"> <allow eavesdrop="true"/> <allow eavesdrop="true" send_destination="*"/> </policy> </busconfig>
Reboot your machine to pick up the configuration changes. Simply reloading the DBus server configuration is not sufficient. For further info see this bug.
- Now run dbus-monitor as root. You should be able to see all signals, method calls, and method replies.
sudo dbus-monitor --system
- When done debugging, it is wise to remove the policy snippet:
sudo rm /etc/dbus-1/system-local.conf
Filtering all the noise
If there is just too much information on the bus, pass a match rule like so:
Multiple rules can be specified. If a message matches any of the rules, the message will be printed. Like so:
dbus-monitor "type=error" "sender=org.freedesktop.SystemToolsBackends"
dbus-monitor "type=method_call" "type=method_return" "type=error"
See the D-Bus documentation for more information on match rule syntax.