Determine DBUS_SESSION_BUS_ADDRESS desde fuera de la sesión X

8

Tengo mate-screensaver instalado en una máquina con Linux Mint 16. En esa máquina, puedo abrir una terminal y consultar el estado del protector de pantalla:

dan@box1 ~ $ echo $DISPLAY
:0.0
dan@box1 ~ $ mate-screensaver-command -q
The screensaver is inactive
The screensaver is not inhibited

Todo esto funciona bien y tiene sentido. Sin embargo, cuando hago SSH en esa misma máquina, no obtengo los resultados que espero:

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!

Este mismo método funciona en todas mis otras computadoras, todas ejecutan varias versiones de Mint. Nada extraño se registra en mi ~/.xsession-errors.

Después de leer esta respuesta , descubrí que configurar mi DBUS_SESSION_BUS_ADDRESSa unix:abstract=/tmp/dbus-ToCuEUyLn0,guid=9296df6ba791b044d4236e45545fbe55(su valor en una terminal local) hace que las cosas funcionen como espero en SSH. Sin embargo, ~/.dbus/session-bus/*-0contiene un valor diferente, que no funciona, y no puedo encontrar un archivo que contenga el valor correcto para esa variable.

¿Por qué una de mis máquinas requeriría que se cambie ese valor, mientras que el resto no? Si ese comportamiento tiene sentido o es complicado de corregir, ¿dónde más buscaría encontrar el valor correcto para esa variable?

Dan
fuente
Bueno, como truco, puedes buscarlo en tu lista de procesos, así: DBUS_SESSION_BUS_ADDRESS=$(ps -fwu $(whoami) | sed -n 's/.*[d]bus.*--address=\(.*\)/\1/p') No es perfecto, no es confiable, pero debería funcionar la mayor parte del tiempo.
zeppelin el

Respuestas:

2

Lo uso para obtenerlo, pero depende de una sesión en ejecución:

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

Cambie 'gnome' a cualquier otra sesión que tenga (tiene que estar ejecutándose).

con guiones
fuente