当该地址改变时,如何在 tmux 中更新 DBUS_SESSION_BUS_ADDRESS?

当该地址改变时,如何在 tmux 中更新 DBUS_SESSION_BUS_ADDRESS?

我注意到,我无法在 tmux 窗格中运行 steam:它给了我错误

Error: Unable to open a connection to X.  Check your DISPLAY environment
variable and make sure that you have enabled X.  If you are running
remotely, make sure that you have a remote connection which will allow
an X connection.

而同时在通常的终端中没有这样的问题。这让我得出结论,程序环境中存在一些差异,在从两个终端导出环境后,我是对的

$ env > /tmp/t1
$ env > /tmp/t2

并对其进行区分

$ diff -u /tmp/t{1,2}

我注意到 DBUS_SESSION_BUS_ADDRESS 有所不同

-DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-CX81GDMBcL,guid=712e96f4ecdc3b9bf1eca21254ed44e3
+DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-axu0HojvNi,guid=a28fcde62f6d40aa587c708a54b83924

这一定是因为我可以重新启动 X,而会话中的环境tmux不会受到dbus-launch在 ~/.xinitrc 中的 WM 启动命令中发生的影响:

eval exec ck-launch-session dbus-launch --sh-syntax --exit-with-session i3 &>/dev/null

那么,当地址改变时我该如何更新该变量?

答案1

/我真笨。当我检查它是否已在运行或是否应该启动时,我只需要在我的 tmux 窗口中的自动启动脚本中重新导出 DBUS_SESSION_BUS_ADDRESS。

因此我的 autorun.sh 中与 tmux 相关的部分现在如下所示:

tmux="tmux -u -f $HOME/.tmux/config -S $HOME/.tmux/socket"
if pgrep -u $UID -f '^tmux.*$' &>/dev/null; then
    for pane in `$tmux list-windows -t0 | sed -r 's/^([0-9]+):.*/\1/g'`; do
        $tmux send -t 0:$pane C-c 
        $tmux send -t 0:$pane export DBUS_SESSION_BUS_ADDRESS="$DBUS_SESSION_BUS_ADDRESS" ENTER
        $tmux send -t 0:$pane export DISPLAY="$DISPLAY" ENTER
        $tmux send -t 0:$pane C-c
    done
else $tmux \
    new -d su \; \
    set remain-on-exit on \; \
    neww su \; \
    set remain-on-exit on \; \
    select-window -t 0:1
fi

第一个C-c是在运行导出命令之前清除行中可能残留的内容。第二个是在之后清除行(tmux 或 bash 会将命令复制到命令行,我不知道为什么)

相关内容