Determinar DBUS_SESSION_BUS_ADDRESS de fora da sessão X

8

Eu tenho o mate-screensaver instalado em uma máquina executando o Linux Mint 16. Nessa máquina, posso abrir um terminal e consultar o estado do protetor de tela:

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

Tudo isso funciona bem e faz sentido. No entanto, quando eu SSH nessa mesma máquina, não recebo os resultados esperados:

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!

Esse mesmo método funciona em todos os meus outros computadores, todos executando várias versões do Mint. Nada de estranho está sendo registrado no meu ~/.xsession-errors.

Depois de ler esta resposta , descobri que definir meu DBUS_SESSION_BUS_ADDRESSpara unix:abstract=/tmp/dbus-ToCuEUyLn0,guid=9296df6ba791b044d4236e45545fbe55(seu valor em um terminal local) faz as coisas funcionarem como eu esperava no SSH. No entanto, ~/.dbus/session-bus/*-0contém um valor diferente, que não funciona, e não consigo encontrar um arquivo que contenha o valor correto para essa variável.

Por que uma das minhas máquinas exige que esse valor seja alterado, enquanto o restante não? Se esse comportamento faz sentido ou é complicado de corrigir, onde mais eu procuraria encontrar o valor correto para essa variável?

Dan
fonte
Bem como um hack, você pode simplesmente procurar na sua lista de processos, assim: DBUS_SESSION_BUS_ADDRESS=$(ps -fwu $(whoami) | sed -n 's/.*[d]bus.*--address=\(.*\)/\1/p') Não é perfeito, não é confiável, mas deve funcionar a maior parte do tempo.
Zeppelin #

Respostas:

2

Eu uso isso para obtê-lo, mas depende de uma sessão em execução:

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

Mude o 'gnome' para qualquer outra sessão que você tenha (ele deve estar em execução).

traçado
fonte