How to export DBUS_SESSION_BUS_ADDRESS
Asked Answered
S

6

19

I'm trying to run D-Bus on an embedded system (Yocto Linux) and connect to it from my application code.

I get the following error when I call dbus_bus_get(DBUS_BUS_SESSION, &err);

Using X11 for dbus-daemon autolaunch was disabled 
at compile time, set your DBUS_SESSION_BUS_ADDRESS 
instead

I realize that I need to start the dbus-daemon first so I have run dbus-launch from the command line.

This prints out a value of DBUS_SESSION_BUS_ADDRESS but how could I export it programmatically?

Starnes answered 20/12, 2016 at 12:32 Comment(0)
S
40

I've finally found the answer, running the following command exports the output of dbus-launch:

export $(dbus-launch)
Starnes answered 20/12, 2016 at 14:9 Comment(5)
This starts a new dbus-daemon process. Is that desirable?Elkeelkhound
I probably is in a "embedded" system, where you have to explicitly start everything in order to preserve resources.Yoke
This seems to be X11 specific, does not work on Wayland.Patisserie
@DavidL. You can try export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$UID/bus. It works for me. (I tried in cron, it seems to not know $XDG_RUNTIME_DIR).Slowwitted
IMHO, it is better to use the currently running dbus's DBUS_SESSION_BUS_ADDRESS. See this QA answer for how to find that.Slowwitted
S
10
pid_gnome=$(pgrep gnome-session)
DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/${pid_gnome}/environ|cut -d= -f2-)
export DBUS_SESSION_BUS_ADDRESS=${DBUS_SESSION_BUS_ADDRESS}

Please make sure that the user has the DISPLAY variable set.

Another alternative is:

export $(dbus-launch)
Sedberry answered 12/2, 2019 at 23:54 Comment(2)
pgrep gnome-session may output multiple PIDs (e.g. three processes on Ubuntu 20.04), so it should be pgrep gnome-session | head -1. DBUS_SESSION_BUS_ADDRESS=$(grep ... | cut -d= -f2-) ends with 000a (\0\n), which causes warning bash: warning: command substitution: ignored null byte in input when export. So it should be DBUS_SESSION_BUS_ADDRESS=$(grep ... | cut -d= -f2- | tr -d '\0\n').Greenlet
WIth grep -P, | cut is not needed. export DBUS_SESSION_BUS_ADDRESS=$(grep -P -o -a "(?<=DBUS_SESSION_BUS_ADDRESS=).+?(?=\x00)" /proc/"$(pgrep gnome-session | head -1)"/environ)Greenlet
K
8

Type the following command into a terminal:

eval `dbus-launch --auto-syntax`
Kielty answered 26/3, 2019 at 8:22 Comment(3)
Thank you for this code snippet, which might provide some limited, immediate help. A proper explanation would greatly improve its long-term value by showing why this is a good solution to the problem and would make it more useful to future readers with other, similar questions. Please edit your answer to add some explanation, including the assumptions you’ve made.Saree
Please fix your backslash. I cannot because it would not be enough characters to allow a change.Evslin
This is not good ans. After doing this, I cant use RDP.Aerator
L
2

When you launch your user session, do it like this:

dbus-daemon --session --fork --print-address 1 > /tmp/dbus-session-addr.txt

This will cause the session address to be written to /tmp/dbus-session-addr.txt. (The filename's not that important, it's just somewhere you've decided to store it.)

Then, when you need the variable set:

export DBUS_SESSION_BUS_ADDRESS=$(cat /tmp/dbus-session-addr.txt)

If your shell's sniffy about export-during-definition - some can be - do it in two stages:

DBUS_SESSION_BUS_ADDRESS=$(cat /tmp/dbus-session-addr.txt)
export DBUS_SESSION_BUS_ADDRESS
Leventis answered 1/9, 2022 at 12:11 Comment(0)
G
1

It sounds like you are trying to get the value of DBUS_SESSION_BUS_ADDRESS in order for your application to run correctly. Try running it with dbus-run-session instead of dbus-launch. According to https://dbus.freedesktop.org/doc/dbus-launch.1.html dbus-launch should not be run from the command line, but in a shell script (see also https://dbus.freedesktop.org/doc/dbus-run-session.1.html).

Gipon answered 19/5, 2022 at 15:37 Comment(0)
C
-7

Type in terminal:

export $DBUS_SESSION_BUS_ADDRESS
Creed answered 1/12, 2017 at 22:13 Comment(2)
If the variable is not set, exporting it will not solve anything, thus $(dbus-launch) solves this issue.Hognut
This is worse than wrong as it will try to export a variable named after the contents of DBUS_SESSION_BUS_ADDRESS which makes no sense.Techno

© 2022 - 2024 — McMap. All rights reserved.