web-dev-qa-db-ja.com

Xセッションの外部からDBUS_SESSION_BUS_ADDRESSを判別する

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

これはすべて正常に機能し、理にかなっています。ただし、同じマシンに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!

これと同じ方法が、他のすべてのコンピューターで機能し、すべてがさまざまなバージョンのMintを実行しています。 ~/.xsession-errorsに何も奇妙なログが記録されていません。

この答え を読んだ後、DBUS_SESSION_BUS_ADDRESSunix:abstract=/tmp/dbus-ToCuEUyLn0,guid=9296df6ba791b044d4236e45545fbe55(ローカル端末での値)に設定すると、SSHで期待どおりに機能することがわかりました。ただし、~/.dbus/session-bus/*-0には別の値が含まれているため、機能せず、その変数の正しい値を含むファイルが見つかりません。

なぜ私のマシンの1つはその値を変更する必要がありますが、残りは変更しないのですか?その動作が理にかなっている場合や修正が複雑な場合、その変数の正しい値を見つけるために他にどこを見ればよいでしょうか?

8
Dan

これを取得するためにこれを使用しますが、実行中のセッションに依存しています。

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

'gnome'を他のセッションに変更します(実行中でなければなりません)。

2
dashesy