从 X 会话外部确定 DBUS_SESSION_BUS_ADDRESS

Dan*_*Dan 9 ssh d-bus linux-mint

我在一台运行 Linux Mint 16 的机器上安装了 mate-screensaver。在这台机器上,我可以打开一个终端并查询屏幕保护程序的状态:

dan@box1 ~ $ echo $DISPLAY
:0.0
dan@box1 ~ $ mate-screensaver-command -q
The screensaver is inactive
The screensaver is not inhibited
Run Code Online (Sandbox Code Playgroud)

这一切都很好,而且很有意义。但是,当我通过 SSH 连接到同一台机器时,我没有得到我期望的结果:

dan@box2 ~ $ ssh box1
dan@box1 ~ $ export DISPLAY=:0.0
dan@box1 ~ $ echo $DISPLAY
:0.0
dan@box1 ~ $ mate-screensaver-command -q
** Message: Screensaver is not running!
Run Code Online (Sandbox Code Playgroud)

同样的方法适用于我所有其他运行不同版本 Mint 的计算机。没有什么奇怪的被记录到我的~/.xsession-errors.

在阅读了这个答案之后,我发现将 my 设置DBUS_SESSION_BUS_ADDRESSunix:abstract=/tmp/dbus-ToCuEUyLn0,guid=9296df6ba791b044d4236e45545fbe55(它在本地终端中的值)可以让事情像我期望的那样通过 SSH 进行。但是,~/.dbus/session-bus/*-0包含一个不同的值,它不起作用,我找不到包含该变量正确值的文件。

为什么我的一台机器需要更改该值,而其余的则不需要?如果该行为有意义或难以纠正,我还能在哪里寻找该变量的正确值?

das*_*esy 3

我用它来获取它,但它依赖于正在运行的会话:

if [[ -z $DBUS_SESSION_BUS_ADDRESS ]]; then
    pgrep "gnome-session" -u "$USER" | while read -r line; do
        exp=$(cat /proc/$line/environ | grep -z "^DBUS_SESSION_BUS_ADDRESS=")
        echo export "$exp" > ~/.exports.sh
        break
    done
    if [[ -f ~/.exports.sh ]]; then
        source ~/.exports.sh
    fi
fi
Run Code Online (Sandbox Code Playgroud)

将“gnome”更改为您拥有的任何其他会话(它必须正在运行)。