D-Bus-1.16.2

Introduction to D-Bus

D-Bus was already compiled before, but not a useful program, dbus-launch. This pass will cover it, and some setup required.

Note

Please remove the previous extracted source code you built from and extract from the tarball again to have a clean source tree.

D-Bus Dependencies

Recommended
The Bash Shell Startup Files, OpenRC-0.63, and Xorg Libraries (for dbus-launch program)

Installation of D-Bus

Install D-Bus by running the following commands (you may wish to review the meson_options.txt file first and add any desired parameters to the meson command shown below):

mkdir  build &&
cd     build &&

meson setup --prefix=/usr          \
            --buildtype=release    \
            --wrap-mode=nofallback \
            -D systemd=disabled    \
            .. &&

ninja

Now, as the root user:

ninja install

If you are using a DESTDIR install, dbus-daemon-launch-helper needs to be fixed afterwards. Issue the following as the root user:

chown -v root:messagebus /usr/libexec/dbus-daemon-launch-helper &&
chmod -v      4750       /usr/libexec/dbus-daemon-launch-helper

Command Explanations

Note

Inspect meson_options.txt or meson.options for a full list of options.

--wrap-mode=nofallback: This switch prevents meson from using subproject fallbacks for any dependency declarations in the build files, stopping it downloading any optional dependency which is not installed on the system.

-D systemd=disabled: Don't install systemd support files even if libsystemd exists (i.e. the elogind-255.22 package is installed).

Configuring D-Bus

Config Files

/etc/dbus-1/session.conf, /etc/dbus-1/system.conf and /etc/dbus-1/system.d/*

Configuration Information

The configuration files listed above should probably not be modified. If changes are required, you should create /etc/dbus-1/session-local.conf and/or /etc/dbus-1/system-local.conf and make any desired changes to these files.

If any packages install a D-Bus .service file outside of the standard /usr/share/dbus-1/services directory, that directory should be added to the local session configuration. For instance, /usr/local/share/dbus-1/services can be added by performing the following commands as the root user:

cat > /etc/dbus-1/session-local.conf << "EOF"
<!DOCTYPE busconfig PUBLIC
 "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>

  <!-- Search for .service files in /usr/local -->
  <servicedir>/usr/local/share/dbus-1/services</servicedir>

</busconfig>
EOF

D-Bus Session Daemon

To automatically start dbus-daemon when the system is rebooted, create and enable the OpenRC service:

install -vDm755 /usr/share/openrc/support/init.d.examples/dbus \
  -t /etc/init.d/ &&
rc-update add dbus boot

Note that this service only starts the system-wide D-Bus daemon. Each user requiring access to D-Bus services will also need to run a session daemon as well.

You can install a user service for D-Bus as the root user:

Note

The following instructions require OpenRC-0.63.

install -vDm755 /dev/stdin /etc/user/init.d/dbus << "EOF"
#!/sbin/openrc-run
# Starts a D-Bus user session
# Authors: Zeckma - zeckma@linuxfromscratch.com
# Version: LFS #80a88

description="starts a dbus user session"

supervisor=supervise-daemon
dbus_socket="${XDG_RUNTIME_DIR}/bus"
export DBUS_SESSION_BUS_ADDRESS="unix:path=$dbus_socket"
command="/usr/bin/dbus-daemon"
command_args="--session --syslog --nofork --address ${DBUS_SESSION_BUS_ADDRESS}"

start_post() {
  echo "export DBUS_SESSION_BUS_ADDRESS=${DBUS_SESSION_BUS_ADDRESS}" > ~/.config/rc/env/dbus.env
}
EOF

As a regular user, enable the service:

mkdir -pv ~/.config/rc/{init,conf}.d &&
mkdir -pv ~/.config/rc/env &&
mkdir -pv ~/.config/rc/runlevels/{sysinit,boot,default,shutdown} &&
rc-update --user add dbus default

Now would be a good idea to reboot and test to see if D-Bus, elogind, etc. works, and you can login. Run the command loginctl after ensuring D-Bus is running. The result should indicate that a SESSION and a SEAT have been created.

Contents

Installed Programs: dbus-cleanup-sockets, dbus-daemon, dbus-launch, dbus-monitor, dbus-run-session, dbus-send, dbus-test-tool, dbus-update-activation-environment, and dbus-uuidgen
Installed Library: libdbus-1
Installed Directories: /etc/dbus-1, /usr/{include,lib}/dbus-1.0, /usr/lib/cmake/DBus1, /usr/share/dbus-1, /usr/share/xml/dbus-1, /usr/share/doc/dbus-1.16.2, and /var/{lib,run}/dbus

Short Descriptions

dbus-cleanup-sockets

is used to clean up leftover sockets in a directory

dbus-daemon

is the D-Bus message bus daemon

dbus-launch

is used to start dbus-daemon from a shell script. It would normally be called from a user's login scripts

dbus-monitor

is used to monitor messages going through a D-Bus message bus

dbus-run-session

starts a process as a new D-Bus session

dbus-send

is used to send a message to a D-Bus message bus

dbus-test-tool

is a D-Bus traffic generator and test tool; it is a multi-purpose tool for debugging and profiling D-Bus

dbus-update-activation-environment

is used to update the environment used for D-Bus session services; it updates the list of environment variables used by dbus-daemon --session when it activates session services without using systemd

dbus-uuidgen

is used to generate a universally unique ID

libdbus-1

contains the API functions used by the D-Bus message daemon. D-Bus is first a library that provides one-to-one communication between any two applications; dbus-daemon is an application that uses this library to implement a message bus daemon