在登录会话之间重用D-Bus会话


20

我通过多个登录会话访问计算机。会话的生命周期可以重叠也可以不重叠。就我而言,这些登录会话当前始终通过SSH进行,但我也希望处理本地会话。

有时在这些会话中需要D-Bus,并且为了使用GVFS,我想在这些登录会话中共享相同的D-Bus会话。

推荐的方法是什么?我不想中断我可能不知道的D总线的使用。我考虑过使用

export $(dbus-launch --autolaunch $(cat /var/lib/dbus/machine-id))

但是(从Ubuntu 12.04开始)这似乎不正确:

  • 这需要一个X会话,但是我的SSH会话可能转发或可能不转发X显示,甚至那些不相同的X会话$DISPLAY
  • 如果没有可用的X显示,则dbus-launch抱怨“自动启动错误:X11初始化失败。”并且没有启动守护程序;
  • dbus-launch那个“男人页面状态--autolaunch的选项被认为是一个内部实现细节(...)。无论如何,没有真正的理由在libdbus实现之外使用它。”

dbus-launchD-Bus套件中的或其他工具是否支持自动检测运行dbus-daemon并连接到它?~/.dbus/session-bus/$(cat /var/lib/dbus/machine-id)-${DISPLAY#*:}D-Bus是通过X连接启动的,但是如果没有X连接可用,该信息似乎不会存储在任何地方。

我应该拼凑自己的D-Bus会话文件吗?如果可以,我应该在~/.dbus/session-bus目录中使用文件吗?路径/var/lib/dbus/machine-id可靠且可移植吗?


1
:这个答案可能是你的解决方案的一部分 serverfault.com/questions/405518/...
sdive

1
2年前,我对DBus摆弄了很多东西,从书中读到的所有东西都留在了我的记忆中,包括资料来源:DBus可能很酷,但是经过专门设计,可以作为系统实例运行一次,并且可以再次运行对于每个本地用户会话来说,这只是愚蠢的,而不是很酷的。我的猜测是您必须自己做所有事情。我做到了,但是我总是进行X次会话,因此对我来说稍微容易一些。祝好运。
Bananguin

我在BLFS本书(Beyond Linux From Scratch)中已经看到了有关dbus配置的一些不错的信息。
Fiisch

Answers:


6

DBus使共享dbus守护程序的设置有些棘手。

对于我的设置,的设置dbus-launch --sh-syntax保存在的源文件中.bash_rc。缺点是,每次重新启动后,该过程都是手动执行的。

但是,检查现有的DBus守护程序应该非常简单。假设设置文件位于$ HOME / .dbus_settings:

need_start=1

if [ -r "$HOME/.dbus_settings" ]
then
    . "$HOME/.dbus_settings"
fi

if [ -n "$DBUS_SESSION_BUS_PID" ]
then
    if kill -0 "$DBUS_SESSION_BUS_PID" 2>/dev/null
    then
        need_start=0  # Found one
    fi
fi

if [ "$need_start" -ne 0 ]
then
    dbus-launch --sh-syntax >"$HOME/.dbus_settings"
    . "$HOME/.dbus_settings"
fi

没有该--autolaunch选项,我不认为需要X Windows连接。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.