Tentukan DBUS_SESSION_BUS_ADDRESS dari luar sesi X.

8

Saya telah menginstal mate-screensaver pada mesin yang menjalankan Linux Mint 16. Pada mesin itu, saya dapat membuka terminal dan menanyakan status screensaver:

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

Ini semua berfungsi dengan baik dan masuk akal. Namun, ketika saya SSH ke mesin yang sama, saya tidak mendapatkan hasil yang saya harapkan:

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!

Metode yang sama ini berfungsi pada semua komputer saya yang lain, semua menjalankan berbagai versi Mint. Tidak ada yang aneh untuk masuk ke blog saya ~/.xsession-errors.

Setelah membaca jawaban ini , saya menemukan bahwa pengaturan DBUS_SESSION_BUS_ADDRESSto unix:abstract=/tmp/dbus-ToCuEUyLn0,guid=9296df6ba791b044d4236e45545fbe55(nilainya di terminal lokal) membuat semuanya berfungsi seperti yang saya harapkan di atas SSH. Namun, ~/.dbus/session-bus/*-0berisi nilai yang berbeda, yang tidak berfungsi, dan saya tidak dapat menemukan file yang berisi nilai yang benar untuk variabel itu.

Mengapa salah satu mesin saya mengharuskan nilai itu diubah, sedangkan sisanya tidak? Jika perilaku itu masuk akal atau rumit untuk diperbaiki, di mana lagi saya akan mencari nilai yang benar untuk variabel itu?

Dan
sumber
Baik sebagai peretasan, Anda bisa mencarinya di daftar proses Anda, seperti ini: DBUS_SESSION_BUS_ADDRESS=$(ps -fwu $(whoami) | sed -n 's/.*[d]bus.*--address=\(.*\)/\1/p') Tidak sempurna, tidak dapat diandalkan, tetapi harus bekerja sebagian besar waktu.
zeppelin

Jawaban:

2

Saya menggunakan ini untuk mendapatkannya, tetapi ini bergantung pada sesi berlari:

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

Ubah 'gnome bukan ke sesi lain apa pun yang Anda miliki (ini harus berjalan).

gagah
sumber