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
、myを(ローカル端末の値)に設定すると、unix:abstract=/tmp/dbus-ToCuEUyLn0,guid=9296df6ba791b044d4236e45545fbe55
SSHを介して期待どおりに機能することがわかりました。ただし、~/.dbus/session-bus/*-0
他の値を含めると機能しなくなり、変数の正しい値を含むファイルが見つかりません。
私のコンピュータの1つはこの値を変更する必要がありますが、他のコンピュータは変更しないのですか?この動作が妥当であるか修正するのが複雑な場合は、この変数の正しい値を他の場所で見つけることができますか?
答え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」を別のセッションに変更します(実行している必要があります)。
答え2
デフォルトでは@dasheyの答えですが、warning: command substitution: ignored null byte in input
警告を防ぎ、ファイルを環境変数として使用しないように更新されました。
if [[ -z $DBUS_SESSION_BUS_ADDRESS ]]; then
while read -r sessionId; do
# so for each session id, grep the environment from /proc/id/environ for the dbus address
grepVarMatch=$(grep -z "^DBUS_SESSION_BUS_ADDRESS=" /proc/$sessionId/environ | tr -d '\0')
if [[ "$grepVarMatch" != "" ]]; then
# set the address as an envvar in the sudo env
export DBUS_SESSION_BUS_ADDRESS="${grepVarMatch#*=}"
break # if we found it, we don't need to look further
fi
done <<< "$(pgrep "gnome-session" -u "$USER")"
fi