DebuggingDBus

Differences between revisions 5 and 6
Revision 5 as of 2010-05-07 14:07:22
Size: 3081
Editor: pool-173-76-32-237
Comment: clarify how to filter a bit more
Revision 6 as of 2013-04-22 18:08:54
Size: 2502
Editor: grawity
Comment: Update for a stricter policy
Deletions are marked like this. Additions are marked like this.
Line 21: Line 21:
 1. Make a backup of /etc/dbus-1/system.conf:  1. Create a file /etc/dbus-1/system.d/99-eavesdrop.conf, with these contents:
Line 23: Line 23:
sudo cp /etc/dbus-1/system.conf /etc/dbus-1/system.conf~
 }}}
 1. Edit /etc/dbus-1/system.conf
 {{{
sudo editor /etc/dbus-1/system.conf
 }}}
 1. Find the <policy context="default"> section and replace it with the following block. This block opens up the system bus to viewing by anyone.

 '''This is not a safe policy! You should revert this change after you are done debugging.'''
 {{{
  <policy context="default">
    <!-- Allow everything to be sent -->
    <allow send_destination="*" eavesdrop="true"/>
    <!-- Allow everything to be received -->
    <allow eavesdrop="true"/>
    <!-- Allow anyone to own anything -->
    <allow own="*"/>
    <allow user="*"/>
  </policy>
 }}}
 1. Then comment out or delete the nearby <includedir> line. This line will include individual policies for specific services. But we don't want those individual policies to further restrict the bus. So we force our above lax policy by not including sub-policies.
 {{{
<!-- <includedir>system.d</includedir> -->
 }}}
 1. Reboot to get a fresh dbus daemon using this new policy.
 {{{
sudo reboot
<!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_type="method_call"
         send_destination="*"
         send_path="/org/freedesktop/DBus"
         send_interface="org.freedesktop.DBus"
         send_member="AddMatch"/>
 </policy>
</busconfig>
Line 55: Line 42:
 1. When done debugging, remember to go back to your previous, secure policy:  1. When done debugging, it is wise to remove the policy snippet:
Line 57: Line 44:
sudo cp /etc/dbus-1/system.conf~ /etc/dbus-1/system.conf
sudo reboot
sudo rm /etc/dbus-1/system.d/99-eavesdrop.conf
Line 65: Line 51:
dbus-monitor "type='signal',sender='org.gnome.TypingMonitor',interface='org.gnome.TypingMonitor'" dbus-monitor "type=signal,sender='org.gnome.TypingMonitor',interface='org.gnome.TypingMonitor'"
Line 68: Line 54:
Multiple rules can be specified. If a message matches any of the rules, the message will be printed. Like so: Multiple rules can be specified. If a message matches ''any'' of the rules, the message will be printed. Like so:
Line 70: Line 56:
dbus-monitor 'type=error' 'sender=org.freedesktop.SystemToolsBackends' dbus-monitor "type=error" "sender=org.freedesktop.SystemToolsBackends"
}}}
{{{
dbus-monitor "type=method_call" "type=method_return" "type=error"

Debugging Central

This page is part of the debugging series — pages with debugging details for a variety of Ubuntu packages.

Introduction

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.

dbus-monitor

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.

  1. Create a file /etc/dbus-1/system.d/99-eavesdrop.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_type="method_call"
                           send_destination="*"
                           send_path="/org/freedesktop/DBus"
                           send_interface="org.freedesktop.DBus"
                           send_member="AddMatch"/>
            </policy>
    </busconfig>
  2. Now run dbus-monitor as root. You should be able to see all signals, method calls, and method replies.
    sudo dbus-monitor --system
  3. When done debugging, it is wise to remove the policy snippet:
    sudo rm /etc/dbus-1/system.d/99-eavesdrop.conf

Filtering all the noise

If there is just too much information on the bus, pass a match rule like so:

dbus-monitor "type=signal,sender='org.gnome.TypingMonitor',interface='org.gnome.TypingMonitor'"

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.


CategoryBugSquad CategoryDebugging

DebuggingDBus (last edited 2014-06-19 07:56:53 by jpakkane)