Определите DBUS_SESSION_BUS_ADDRESS вне X-сессии

8

У меня установлена ​​mate-screensaver на компьютере под управлением Linux Mint 16. На этом компьютере я могу открыть терминал и запросить состояние экранной заставки:

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

Все это прекрасно работает и имеет смысл. Однако, когда я подключаюсь по SSH к той же машине, я не получаю ожидаемых результатов:

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!

Этот же метод работает на всех моих компьютерах, на которых запущены различные версии Mint. Ничего странного в том, чтобы войти в мой ~/.xsession-errors.

Прочитав этот ответ , я обнаружил, что установка my DBUS_SESSION_BUS_ADDRESSв unix:abstract=/tmp/dbus-ToCuEUyLn0,guid=9296df6ba791b044d4236e45545fbe55(его значение в локальном терминале) заставляет все работать так, как я ожидаю по SSH. Однако ~/.dbus/session-bus/*-0содержит другое значение, которое не работает, и я не могу найти файл, содержащий правильное значение для этой переменной.

Почему одна из моих машин требует, чтобы это значение было изменено, а остальные нет? Если такое поведение имеет смысл или его сложно исправить, где еще я могу найти правильное значение для этой переменной?

Дэн
источник
В качестве хака вы можете просто посмотреть его в списке процессов, например: DBUS_SESSION_BUS_ADDRESS=$(ps -fwu $(whoami) | sed -n 's/.*[d]bus.*--address=\(.*\)/\1/p') не идеально, не надежно, но должно работать большую часть времени.
Цеппелин

Ответы:

2

Я использую это, чтобы получить это, но это зависит от запущенной сессии:

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

Измените 'gnome' на любой другой сеанс, который у вас есть (он должен быть запущен).

dashesy
источник