Bestimmen Sie DBUS_SESSION_BUS_ADDRESS von außerhalb der X-Sitzung

8

Ich habe Mate-Bildschirmschoner auf einem Computer installiert, auf dem Linux Mint 16 ausgeführt wird. Auf diesem Computer kann ich ein Terminal öffnen und den Status des Bildschirmschoners abfragen:

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

Das alles funktioniert gut und macht Sinn. Wenn ich jedoch SSH auf demselben Computer verwende, erhalte ich nicht die erwarteten Ergebnisse:

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!

Dieselbe Methode funktioniert auf allen meinen anderen Computern, auf denen verschiedene Versionen von Mint ausgeführt werden. Nichts Seltsames wird bei mir angemeldet ~/.xsession-errors.

Nach dem Lesen dieser Antwort , entdeckte ich , dass meine Einstellung DBUS_SESSION_BUS_ADDRESSzu unix:abstract=/tmp/dbus-ToCuEUyLn0,guid=9296df6ba791b044d4236e45545fbe55(seinen Wert in einem lokalen Terminal) Dinge Arbeit macht , wie ich über SSH erwarten. Allerdings ~/.dbus/session-bus/*-0enthält einen anderen Wert, der nicht funktioniert, und ich kann nicht eine Datei mit dem korrekten Wert für diese Variable finden.

Warum sollte bei einer meiner Maschinen dieser Wert geändert werden, bei den anderen nicht? Wenn dieses Verhalten sinnvoll oder kompliziert zu korrigieren ist, wo würde ich sonst nach dem richtigen Wert für diese Variable suchen?

Dan
quelle
Als Hack können Sie es einfach in Ihrer Prozessliste nachschlagen: DBUS_SESSION_BUS_ADDRESS=$(ps -fwu $(whoami) | sed -n 's/.*[d]bus.*--address=\(.*\)/\1/p') Nicht perfekt, nicht zuverlässig, sollte aber die meiste Zeit funktionieren.
Zeppelin

Antworten:

2

Ich benutze dies, um es zu bekommen, aber es hängt von einer laufenden Sitzung ab:

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

Ändern Sie 'gnome'to in eine andere Sitzung, die Sie haben (sie muss ausgeführt werden).

schneidig
quelle