Déterminer DBUS_SESSION_BUS_ADDRESS depuis l'extérieur de la session X

8

J'ai installé mate-screensaver sur une machine exécutant Linux Mint 16. Sur cette machine, je peux ouvrir un terminal et interroger l'état de l'économiseur d'écran:

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

Tout cela fonctionne bien et a du sens. Cependant, lorsque je SSH sur cette même machine, je n'obtiens pas les résultats attendus:

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!

Cette même méthode fonctionne sur tous mes autres ordinateurs, exécutant tous différentes versions de Mint. Rien d'étrange ne me connecte ~/.xsession-errors.

Après avoir lu cette réponse , j'ai découvert que définir mon DBUS_SESSION_BUS_ADDRESSsur unix:abstract=/tmp/dbus-ToCuEUyLn0,guid=9296df6ba791b044d4236e45545fbe55(sa valeur dans un terminal local) fait fonctionner les choses comme je m'y attendais via SSH. Cependant, ~/.dbus/session-bus/*-0contient une valeur différente, qui ne fonctionne pas, et je ne trouve pas de fichier contenant la valeur correcte pour cette variable.

Pourquoi une de mes machines exigerait-elle que cette valeur soit modifiée, alors que les autres ne le font pas? Si ce comportement a du sens ou est compliqué à corriger, où pourrais-je chercher la valeur correcte pour cette variable?

Dan
la source
Eh bien, comme un hack, vous pouvez simplement le rechercher dans votre liste de processus, comme ceci: DBUS_SESSION_BUS_ADDRESS=$(ps -fwu $(whoami) | sed -n 's/.*[d]bus.*--address=\(.*\)/\1/p') Pas parfait, pas fiable, mais devrait fonctionner la plupart du temps.
zeppelin

Réponses:

2

Je l'utilise pour l'obtenir, mais cela repose sur une session en cours d'exécution:

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

Remplacez «gnome» par toute autre session que vous avez (elle doit être en cours d'exécution).

dashesy
la source