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?


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).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.