Determinare DBUS_SESSION_BUS_ADDRESS dall'esterno della sessione X.


8

Ho mate-screensaver installato su una macchina che esegue Linux Mint 16. Su quella macchina, posso aprire un terminale e interrogare lo stato dello screensaver:

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

Tutto funziona bene e ha senso. Tuttavia, quando SSH nella stessa macchina, non ottengo i risultati che mi aspetto:

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!

Questo stesso metodo funziona su tutti i miei altri computer, tutti con varie versioni di Mint. Niente di strano viene registrato nel mio ~/.xsession-errors.

Dopo aver letto questa risposta , ho scoperto che la mia impostazione DBUS_SESSION_BUS_ADDRESSa unix:abstract=/tmp/dbus-ToCuEUyLn0,guid=9296df6ba791b044d4236e45545fbe55(il suo valore in un terminale locale) fa funzionare le cose come mi aspetto su SSH. Tuttavia, ~/.dbus/session-bus/*-0contiene un valore diverso, che non funziona e non riesco a trovare un file contenente il valore corretto per quella variabile.

Perché una delle mie macchine dovrebbe cambiare quel valore, mentre il resto no? Se quel comportamento ha un senso o è complicato da correggere, dove altro potrei cercare il valore corretto per quella variabile?


Bene come un hack, puoi semplicemente cercarlo nella tua lista dei processi, in questo modo: DBUS_SESSION_BUS_ADDRESS=$(ps -fwu $(whoami) | sed -n 's/.*[d]bus.*--address=\(.*\)/\1/p') non perfetto, non affidabile, ma dovrebbe funzionare la maggior parte del tempo.
Zeppelin,

Risposte:


2

Lo uso per ottenerlo, ma si basa su una sessione in esecuzione:

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

Cambia 'gnome' in qualsiasi altra sessione che hai (deve essere in esecuzione).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.