如何导出 DBUS_SESSION_BUS_ADDRESS

How to export DBUS_SESSION_BUS_ADDRESS

我正在尝试 运行 嵌入式系统 (Yocto Linux) 上的 D-Bus 并从我的应用程序代码连接到它。

调用 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

我意识到我需要先启动 dbus-daemon,所以我从命令行得到 运行 dbus-launch

这会打印出 DBUS_SESSION_BUS_ADDRESS 的值,但我如何以编程方式导出它?

我终于找到了答案,运行以下命令导出 dbus-launch 的输出:

export $(dbus-launch)

在终端中输入:

export $DBUS_SESSION_BUS_ADDRESS
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}

请确保用户设置了 DISPLAY 变量。

另一种选择是:

export $(dbus-launch)

在终端中输入以下命令:

eval `dbus-launch --auto-syntax`

听起来您正在尝试获取 DBUS_SESSION_BUS_ADDRESS 的值以使您的应用程序正确地 运行。尝试 运行 使用 dbus-run-session 代替 dbus-launch。根据 https://dbus.freedesktop.org/doc/dbus-launch.1.html dbus-launch 不应该是来自命令行的 运行,而是在 shell 脚本中 (另见 https://dbus.freedesktop.org/doc/dbus-run-session.1.html)。