Xセッションの外部からDBUS_SESSION_BUS_ADDRESSを特定する


8

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_ADDRESSするとunix:abstract=/tmp/dbus-ToCuEUyLn0,guid=9296df6ba791b044d4236e45545fbe55(ローカルターミナルではその値)、SSH経由で期待どおりに機能することがわかりました。ただし、~/.dbus/session-bus/*-0動作しない別の値が含まれているため、その変数の正しい値を含むファイルが見つかりません。

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


ハックとしては、次のようにプロセスリストで調べるだけです。 DBUS_SESSION_BUS_ADDRESS=$(ps -fwu $(whoami) | sed -n 's/.*[d]bus.*--address=\(.*\)/\1/p') 完璧ではない、信頼性が低いが、ほとんどの場合は機能するはずです。
zeppelin

回答:


2

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

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'を他のセッションに変更します(実行している必要があります)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.