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
나는 이것을 얻기 위해 이것을 사용하지만 실행중인 세션에 따라 다릅니다.
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