D-Bus: Difference between revisions
Prabuanand (talk | contribs) (Reworded sentence and updated wikitags) |
Prabuanand (talk | contribs) (added back a tip to check the service and changed introduction paragraph) |
||
Line 1: | Line 1: | ||
[https://en.wikipedia.org/wiki/D-Bus D-Bus] is a message bus system that provides a mechanism for inter-process communication. | [https://en.wikipedia.org/wiki/D-Bus D-Bus] is a message bus system that provides a mechanism for inter-process communication. System D-Bus service needs to be [[#Installation|installed]] before launching a [[#D-Bus session|D-Bus session]] instance. | ||
Some services rely on a D-Bus session instance or expect it by default | Some services like [[PipeWire#D-Bus|Pipewire]] rely on a [[#D-Bus session|D-Bus session]] instance or expect it by default. Other processes will only be able to communicate with these services if D-Bus is running. | ||
== Installation == | == Installation == | ||
{{Tip|Check if system D-Bus service is already installed and running:{{ic|$ rc-service dbus status}}, before proceeding futher.}} | |||
Install the dbus package: {{cmd|# apk add {{pkg|dbus}}}} | Install the dbus package: {{cmd|# apk add {{pkg|dbus}}}} | ||
If you are using x11 you might also want to install the X11 add-ons which provide the <code>dbus-launch</code> command:{{cmd|# apk add {{pkg|dbus-x11}}}} | If you are using x11 you might also want to install the X11 add-ons which provide the <code>dbus-launch</code> command:{{cmd|# apk add {{pkg|dbus-x11}}}} | ||
If you want dbus to be started at system startup enable the [[OpenRC]] service: {{cmd|# rc-update add dbus}} | If you want dbus to be started at system startup enable the [[OpenRC]] service: {{cmd|# rc-update add dbus}} | ||
To | To start the service immediately, use service '''start|stop|restart''' commands as follows: {{cmd|# rc-service dbus start}} | ||
== D-Bus session == | |||
{{Tip| If D-Bus session bus is properly configured, the command:{{ic|$ echo $DBUS_SESSION_BUS_ADDRESS}} must provide a output.}} | |||
You can start a {{ic|dbus session}} using the command like this: {{ic|dbus-run-session -- sh}}, by replacing '''sh''' with your shell or a window manager. | You can start a {{ic|dbus session}} using the command like this: {{ic|dbus-run-session -- sh}}, by replacing '''sh''' with your shell or a window manager. |
Revision as of 10:17, 24 May 2025
D-Bus is a message bus system that provides a mechanism for inter-process communication. System D-Bus service needs to be installed before launching a D-Bus session instance.
Some services like Pipewire rely on a D-Bus session instance or expect it by default. Other processes will only be able to communicate with these services if D-Bus is running.
Installation
$ rc-service dbus status
, before proceeding futher.Install the dbus package:
# apk add dbus
If you are using x11 you might also want to install the X11 add-ons which provide the dbus-launch
command:
# apk add dbus-x11
If you want dbus to be started at system startup enable the OpenRC service:
# rc-update add dbus
To start the service immediately, use service start|stop|restart commands as follows:
# rc-service dbus start
D-Bus session
$ echo $DBUS_SESSION_BUS_ADDRESS
must provide a output.You can start a dbus session
using the command like this: dbus-run-session -- sh
, by replacing sh with your shell or a window manager.
If you are running a X11 based window manager using .xinitrc, use : exec dbus-launch --exit-with-session your_favourite_wm
so that D-Bus passes the environment variable $DBUS_SESSION_BUS_ADDRESS
to its children. Running dbus-launch
in a terminal means that other running process won't find this D-Bus's socket without a export $(dbus-launch)
.
If $DBUS_SESSION_BUS_ADDRESS
is undefined, many applications will attempt to use the standard path:$XDG_RUNTIME_DIR/bus
Running D-Bus like so should work for many applications:
dbus-daemon --nofork --address unix:path=$XDG_RUNTIME_DIR/bus --session
For applications that dont work without $DBUS_SESSION_BUS_ADDRESS
you can prepend your program with the follow workaround script which avoid launching multiple user dbus sessions:
#!/bin/sh if [ ! -e "/tmp/dbus-$USER-env" ]; then echo "Creating new dbus session on /tmp/dbus-$USER-env" export $(dbus-launch) echo "${DBUS_SESSION_BUS_ADDRESS}" > /tmp/dbus-$USER-env echo "Dbus session address is: ${DBUS_SESSION_BUS_ADDRESS}" else echo "Using dbus session address from /tmp/dbus-$USER-env" export DBUS_SESSION_BUS_ADDRESS="$(cat /tmp/dbus-$USER-env)" echo "Dbus session address is: ${DBUS_SESSION_BUS_ADDRESS}" fi if [ -n "$1" ]; then $@ fi