Xác định DBUS_SESSION_BUS_ADDRESS từ bên ngoài phiên X


8

Tôi đã cài đặt trình bảo vệ màn hình trên máy chạy Linux Mint 16. Trên máy đó, tôi có thể mở một thiết bị đầu cuối và truy vấn trạng thái của trình bảo vệ màn hình:

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

Tất cả điều này hoạt động tốt và có ý nghĩa. Tuy nhiên, khi tôi SSH vào cùng một máy đó, tôi không nhận được kết quả như mong đợi:

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!

Phương pháp tương tự này hoạt động trên tất cả các máy tính khác của tôi, tất cả đều chạy các phiên bản khác nhau của Mint. Không có gì lạ là đăng nhập vào của tôi ~/.xsession-errors.

Sau khi đọc câu trả lời này , tôi phát hiện ra rằng việc thiết của tôi DBUS_SESSION_BUS_ADDRESSđến unix:abstract=/tmp/dbus-ToCuEUyLn0,guid=9296df6ba791b044d4236e45545fbe55(giá trị của nó tại một nhà ga địa phương) làm cho mọi thứ công việc như tôi mong đợi thông qua SSH. Tuy nhiên, ~/.dbus/session-bus/*-0chứa một giá trị khác, không hoạt động và tôi không thể tìm thấy tệp chứa giá trị chính xác cho biến đó.

Tại sao một trong những máy của tôi yêu cầu thay đổi giá trị đó, trong khi phần còn lại thì không? Nếu hành vi đó có ý nghĩa hoặc phức tạp để sửa, tôi sẽ tìm giá trị chính xác cho biến đó ở đâu?


Cũng như một bản hack, bạn chỉ có thể tra cứu nó trong danh sách quy trình của mình, như thế này: DBUS_SESSION_BUS_ADDRESS=$(ps -fwu $(whoami) | sed -n 's/.*[d]bus.*--address=\(.*\)/\1/p') Không hoàn hảo, không đáng tin cậy, nhưng nên hoạt động hầu hết thời gian.
zeppelin

Câu trả lời:


2

Tôi sử dụng cái này để lấy nó, nhưng nó dựa vào một phiên chạy:

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

Thay đổi 'gnome'to bất kỳ phiên nào khác mà bạn có (nó phải được chạy).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.