D-Bus Explained, and Why Distributions Are Switching to dbus-broker

D-Bus Explained, and Why Distributions Are Switching to dbus-broker

You rarely see it, but almost everything on a modern Linux desktop talks over D-Bus. When you plug in a USB drive and a notification pops up, when the volume keys work, when systemctl talks to systemd, D-Bus carries the messages. Ubuntu 26.10 just replaced the program at its centre, dbus-daemon, with dbus-broker. Here is what D-Bus does and why that change happened.

What D-Bus is

D-Bus is a message bus. Instead of every program knowing how to contact every other program, they all connect to a bus daemon and address each other by well-known names:

ConceptExampleMeaning
Bus nameorg.freedesktop.NetworkManagerWhich service
Object path/org/freedesktop/NetworkManagerWhich object inside it
Interfaceorg.freedesktop.NetworkManagerA group of methods and properties
MethodGetDevicesA call that returns a result
SignalStateChangedA broadcast that others can listen for
PropertyVersionA value you can read or watch

The bus daemon routes messages, starts services on demand when someone calls them (activation), and enforces policy: which users may call which methods.

Two buses

  • The system bus is shared by the machine. systemd, NetworkManager, UDisks, logind, Bluetooth, and polkit live here. Policy decides which users can do what
  • Each user gets a session bus for their desktop: notifications, media players (MPRIS), the screenshot portal, settings daemons

Looking at the bus

systemd’s busctl is the best tool for exploring:

busctl list                                   # services on the system bus
busctl --user list                            # session bus
busctl tree org.freedesktop.login1            # objects in a service
busctl introspect org.freedesktop.login1 /org/freedesktop/login1

Read a property and call a method:

busctl get-property org.freedesktop.hostname1 /org/freedesktop/hostname1 \
  org.freedesktop.hostname1 Hostname

busctl --user call org.freedesktop.Notifications /org/freedesktop/Notifications \
  org.freedesktop.Notifications Notify susssasa{sv}i \
  "test" 0 "" "Hello" "From busctl" 0 0 5000

To watch traffic live, which is excellent for debugging why something does not react:

sudo busctl monitor org.freedesktop.NetworkManager

Many familiar commands are D-Bus clients underneath: hostnamectl, timedatectl, loginctl, nmcli, and systemctl itself.

dbus-daemon vs dbus-broker

dbus-daemon is the reference implementation, written around 2003 and designed to work on many systems. dbus-broker, started in 2017, is a reimplementation with different priorities:

dbus-daemondbus-broker
OriginReference implementation, 2003Rewrite by systemd and BUS1 developers, 2017
DesignPortable, many featuresLinux-only, built around systemd
Service activationStarts services itselfDelegates to systemd
PerformanceGoodFaster, more predictable under load
Resource accountingLimitedPer-user quotas prevent one client flooding the bus
ProtocolD-BusD-Bus (fully compatible for clients)

The key design choice is delegation to systemd: dbus-broker does not launch services, it asks systemd to, so every bus-activated service is a proper systemd unit with logging, limits, and sandboxing. It also enforces fair resource accounting, so a misbehaving program cannot exhaust the bus for everyone.

Who uses it

  • Fedora: default since Fedora 30 (2019)
  • Arch Linux: default since 2024
  • Ubuntu: default from 26.10, for both system and session buses
  • Debian and many others: still dbus-daemon by default, with dbus-broker available

Check yours

systemctl status dbus.service | head -5
systemctl --user status dbus.service | head -5

The process line names either dbus-daemon or dbus-broker-launch.

Switching

On distributions that package both, switching usually means installing dbus-broker and enabling it in place of dbus-daemon, then rebooting:

sudo systemctl disable dbus-daemon.service
sudo systemctl enable dbus-broker.service
sudo systemctl --global enable dbus-broker.service

Check your distribution’s documentation first, as unit names vary. Problems are rare, but they come from custom bus configuration relying on dbus-daemon behaviour, or from software that spawns its own private dbus-daemon.

For how D-Bus fits into the wider system, see what systemd is and our explainer on desktop portals, which are D-Bus services themselves.

Frequently Asked Questions

What is D-Bus?

D-Bus is an inter-process communication system. Programs connect to a message bus and call methods, send signals, and read properties on other programs, without needing to know how to reach them directly. Desktops, systemd, NetworkManager, and many other components rely on it.

What is the difference between the system bus and the session bus?

The system bus is shared by the whole machine and connects system services such as systemd, NetworkManager, and UDisks. Each logged-in user also gets a session bus connecting their desktop applications, notifications, and media players.

What is dbus-broker?

A reimplementation of the D-Bus message bus daemon, designed for performance and reliability and built to integrate with systemd. It is compatible with the D-Bus protocol, so applications do not notice the switch; it replaces only the bus daemon, dbus-daemon.

Which distributions use dbus-broker?

Fedora has used it by default since Fedora 30 in 2019, Arch Linux switched in 2024, and Ubuntu 26.10 adopted it for both the system and session buses. Debian and others still default to the reference dbus-daemon but package dbus-broker.

How can I check which bus daemon I am running?

Run systemctl status dbus.service and look at the process name, or check whether dbus-broker.service is active with systemctl is-active dbus-broker. For the session bus, add —user to either command.

Do I need to change anything when switching?

Usually not. Applications speak the same protocol. Rare issues come from custom bus configuration that relied on dbus-daemon specific behaviour, or from software that launched its own private dbus-daemon. Policy files in /usr/share/dbus-1 continue to work.