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つはその値を変更する必要がありますが、残りは変更しないのですか?その動作が理にかなっている場合や修正が複雑な場合、その変数の正しい値を見つけるために他にどこを見ればよいでしょうか?
これを取得するためにこれを使用しますが、実行中のセッションに依存しています。
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'を他のセッションに変更します(実行中でなければなりません)。