Tại sao tôi không thể chạy ứng dụng Gnome qua phiên SSH từ xa?


9

Đăng nhập vào một máy chủ từ xa bằng cách sử dụng ssh -X me@host, tôi chạy thành công gnome-terminal -e "tail -F /var/log/file" &. Khi tôi đăng xuất và sau đó thử điều tương tự vào ngày hôm sau, tôi nhận được điều này:

Không thể tải bus phiên: Không thể kết nối với socket / tmp / dbus-K99gT9yDjS: Kết nối bị từ chối Rơi về chế độ không xuất xưởng. Không thể triệu tập quỷ GConf; thoát ra Không thể liên lạc với máy chủ cấu hình; Một số nguyên nhân có thể là bạn cần kích hoạt mạng TCP / IP cho ORBit hoặc bạn có các khóa NFS cũ do sự cố hệ thống. Xem http://projects.gnome.org/gconf/ để biết thông tin. (Chi tiết - 1: Không thể kết nối với phiên: Không thể kết nối với socket / tmp / dbus-K99gT9yDjS: Từ chối kết nối)

Làm thế nào để tôi chạy gnome-terminal trong tình huống này?


Tôi không thấy một câu hỏi đang được hỏi ở đây. Bạn nên làm một cái gì đó về điều đó trước khi bài viết của bạn được đóng lại.
Agi Hammerthief

Bạn có thể muốn cắt phần 'giải pháp' ra khỏi câu hỏi của mình và gửi nó dưới dạng câu trả lời. Đó là hành vi chấp nhận được.
Agi Hammerthief

Nếu bạn đang đăng nhập vào một máy khác bằng SSH, bạn sẽ có quyền truy cập shell / terminal. Bạn không cần phải mở một cửa sổ đầu cuối trên máy đó. Bạn có thể thực thi các lệnh trực tiếp trên máy đó bằng cách nhập chúng vào thiết bị đầu cuối trên máy của bạn.
Agi Hammerthief

2
Như Nigel Nquande nói, vui lòng nhấn nút trả lời câu hỏi của riêng bạn, sao chép và dán phần Giải pháp của bạn vào câu trả lời. Không chỉ được chấp nhận, nó được khuyến khích.
derobert

2
Trong khi đó tôi đã loại bỏ giải pháp khỏi câu hỏi của bạn vì nó không phải là một câu hỏi. Loại câu hỏi tự trả lời này được chào đón nhiều hơn nhưng xin vui lòng gửi câu trả lời dưới dạng câu trả lời . Hãy xem trung tâm trợ giúp của chúng tôi hoặc thực hiện chuyến tham quan 10 giây để biết thêm thông tin. Bạn có thể thấy văn bản gốc (vì vậy bạn không cần phải viết lại) trong lịch sử chỉnh sửa mà bạn có thể nhận được bằng cách nhấp vào liên kết "Đã chỉnh sửa X phút trước".
terdon

Câu trả lời:


7

Thật vậy, khi một phiên SSH được mở, nó không khởi chạy một phiên dbus. Một số chương trình có thể khởi chạy nó, nhưng sau đó phiên không biết về nó (do đó không thể đóng nó).

Không biết về phiên dbus cũng có nghĩa là các chương trình sử dụng dbus nhưng không tự khởi chạy nó sẽ gặp vấn đề.

các phần dbus là trên mỗi máy và mỗi màn hình X11. Thông tin của họ được lưu trữ trong $ HOME / .dbus / session-bus / - tuy nhiên, quy trình được tham chiếu ở đó có thể bị đóng, do đó cần phải kiểm tra thêm để xác định xem có cần khởi chạy dbus hay không. Sau đó, các biến ở đó sẽ được xuất sang phiên.

Sau đó, nó hoạt động như một nét duyên dáng :)

Tôi đặt phần sau vào tệp .bash_profile của mình:

# set dbus for remote SSH connections
if [ -n "$SSH_CLIENT" -a -n "$DISPLAY" ]; then
    machine_id=$(LANGUAGE=C hostnamectl|grep 'Machine ID:'| sed 's/^.*: //')
    x_display=$(echo $DISPLAY|sed 's/^.*:\([0-9]\+\)\(\.[0-9]\+\)*$/\1/')
    dbus_session_file="$HOME/.dbus/session-bus/${machine_id}-${x_display}"
    if [ -r "$dbus_session_file" ]; then
            export $(grep '^DBUS.*=' "$dbus_session_file")
            # check if PID still running, if not launch dbus
            ps $DBUS_SESSION_BUS_PID | tail -1 | grep dbus-daemon >& /dev/null
            [ "$?" != "0" ] && export $(dbus-launch) >& /dev/null
    else
            export $(dbus-launch) >& /dev/null
    fi
fi

lưu ý: hostnamectl là một phần của systemd và cho phép truy xuất id máy, dbus-launch hiển thị các biến chúng ta muốn; bằng cách sử dụng, export $(dbus-launch)chúng tôi lấy ra đầu ra của dbus-launch và xuất các biến


5

Không có câu trả lời nào trước đây hoạt động trong trường hợp của tôi nhưng việc khởi chạy ứng dụng thông qua dbus-launch đã thực hiện công việc:

ssh myhost "dbus-launch gnome-terminal --display localhost:10.0 &"

3

Tôi đã tìm thấy cái này:

https://bugs.debian.org/cgi-bin/orpreport.cgi?orms=639261

Điều này dẫn tôi đến thử điều này:

$ sudo rm /var/lib/dbus/machine-id
$ sudo service messagebus restart

Bây giờ tôi có thể chạy gnome-terminal!


2
Thật đáng kinh ngạc, nó cũng hoạt động vào 16.04. Tôi chỉ phải thay đổi lệnh khởi động lại sudo service dbus restart. Cảm ơn!
Avio

Cảnh báo: khởi động lại dbus có thể sẽ khởi động lại toàn bộ phiên X của bạn
Adam Katz

1

Chỉ cần chạy:

> dbus-launch gnome-terminal

1
Tại sao điều này sẽ giúp?
DarkHeart

1
Điều này cũng làm việc cho tôi. Tôi không biết tại sao.
Robert Lugg

0

Thật thú vị ... chỉ cần khởi động lại dbus không hiệu quả với tôi, tôi cũng phải xóa tệp id máy cũng như khởi động lại.

$ rcdbus stop
$ rm /var/lib/dbus/machine-id
$ rcdbus start

Đây là trên máy chủ SLES 11.4 mà tôi đã nhân bản gần đây trong VMWare. Vấn đề của tôi là tôi không thể bắt đầu yast2 hoặc gedit ...

Đây là những lỗi tôi đã thấy trên dòng lệnh:

yast2

** (y2controlcenter-gnome:9981): WARNING **: error accessing /desktop/gnome/lockdown/disable_command_line [Failed to contact configuration server; some possible causes are that you need to enable TCP/IP networking for ORBit, or you have stale NFS locks due to a system crash. See http://projects.gnome.org/gconf/ for information. (Details -  1: Failed to get connection to session: Failed to connect to socket /tmp/dbus-W7H31tbhVY: Connection refused)]


** (y2controlcenter-gnome:9981): WARNING **:
GError raised: [Failed to contact configuration server; some possible causes are that you need to enable TCP/IP networking for ORBit, or you have stale NFS locks due to a system crash. See http://projects.gnome.org/gconf/ for information. (Details -  1: Failed to get connection to session: Failed to connect to socket /tmp/dbus-W7H31tbhVY: Connection refused)]

user_message: [libslab_get_gconf_value: error getting /desktop/gnome/applications/main-menu/lock-down/user_modifiable_apps] 

Cảm ơn vì tiền hỗ trợ!


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.