Lỗi `Không có giao thức được chỉ định` khi chạy từ máy từ xa qua ssh


10

Tôi có một tập lệnh, chỉ đơn giản là để chạy Ứng dụng đồ họa (GUI) của tôi, như dưới đây.

#cat gui.sh
#!/bin/bash 
./gui -display 127.0.0.1:0.0    

Khi tôi chạy nó từ máy cục bộ ( ./gui.sh) nó chạy hoàn toàn tốt. Nhưng khi tôi đang cố chạy nó từ máy từ xa qua ssh, tôi đã gặp lỗi sau.

[root@localhost]# ssh -f 192.168.3.77 "cd /root/Desktop/GUI/ && "./gui.sh""   
No protocol specified  
gdm: cannot connect to X server 192.168.3.77:0.0   
[root@localhost]#    

Tôi không biết, nó đang hỏi giao thức nào hay tôi thiếu thứ gì? Tôi đã thử trực tiếp bằng cách khởi động ứng dụng, không có tập lệnh [ ssh -f 192.168.3.77 "cd /root/Desktop/GUI/ && "./gui""], nhưng kết quả vẫn như vậy. Tôi đã thử các kết hợp khác nhau như ssh -Y, ssh -fYvà nhiều hơn nữa nhưng kết quả là như nhau!
Thứ hai cho ứng dụng của tôi, có một điều kiện bắt buộc là, trước tiên chúng ta phải vào thư mục chứa chương trình.
Giải pháp nào?

Câu trả lời:


5

Ý nghĩa của tùy chọn -display 127.0.0.1:0.0phụ thuộc vào guichương trình đó , nhưng rất có khả năng nó có nghĩa là màn hình hiển thị trên màn hình X 127.0.0.1 0.0. Đây là màn hình X cục bộ đầu tiên, được truy cập qua TCP. Điều này gần như chắc chắn sai vì hai lý do. Thứ nhất, màn hình hiển thị X địa phương nên có :0, không 127.0.0.1:0, bởi vì trong đó có một địa chỉ IP làm cho giao thông đi qua TCP thay vì truy cập địa phương. Đi qua TCP có thể không hoạt động tùy thuộc vào việc máy chủ X có chấp nhận kết nối TCP hay không. Ngay cả nếu có, bạn sẽ mất các tối ưu hóa mà màn hình cục bộ có.

Hiển thị để sử dụng thường được biểu thị bằng DISPLAYbiến môi trường và biến đó có xu hướng được đặt chính xác tự động. (Thông thường, nếu DISPLAYcó giá trị sai, đó là do bạn đã nhầm lẫn với nó. Ngoại lệ chính là việc sử dụng screenhoặc tmux.)

Chương trình của bạn có thể tìm kiếm giá trị của DISPLAYbiến môi trường, bởi vì điều đó có xu hướng tự động xảy ra với các cuộc gọi xlib. Vì vậy, bạn chỉ nên gọi ./gui, kịch bản của bạn không làm gì hữu ích. Nếu chương trình của bạn nhấn mạnh vào -displayđối số, hãy làm cho nó sử dụng biến môi trường:

./gui -display "$DISPLAY"

4

ssh -Yssh -Xcó nên là một khởi đầu tốt nhưng bạn cũng đã chuyển tiếp máy chủ X của mình chưa?

$ grep X /etc/ssh/sshd_config
X11Forwarding yes

nếu không nó sẽ không hoạt động.

Một thứ khác để kiểm tra là biến HIỂN THỊ nó sẽ hiển thị một cái gì đó như thế này:

$ echo $DISPLAY
$ localhost:10.0

Điều này đã được chạy sau ssh -Y. Biến tương tự là trống nếu tôi ssh không có -Yhoặc -X.

Đối với sự khác biệt giữa -X-Yđọc trang người đàn ông của ssh.


3

Video này giải thích cách giải quyết lỗi từng bước. Nếu bạn không muốn xem thì hãy làm theo văn bản dưới đây:

Lỗi Không có giao thức được chỉ định cho biết "người dùng không biết cách khởi chạy ứng dụng GUI" và "người dùng không có quyền khởi chạy ứng dụng GUI". Trong video, ứng dụng GUI là dbca.

Phần quan trọng của video này là chạy lệnh xhost +cho phép người dùng hiển thị từ xa GUI từ hệ thống từ xa, đến hệ thống cục bộ.


6
xhost +sẽ cấp quyền truy cập cho bất kỳ ai để kết nối với màn hình của bạn. Tôi muốn giới thiệuxhost +local:[hostname or ip]
vimdude

Đây và đây là những gì đã sửa lỗi cho tôi. +1
Yug Singh

1

Debian Jessie, cũng thêm:

export XAUTHORITY=/.Xauthority

xhost +đã khắc phục sự cố của tôi (về phía khách hàng)
nguy hiểm89

Điều đó đã giúp, cảm ơn bạn! XAUTHORITY của tôi là /tmp/xauth-1000-_0nhưng sau khi bắt đầu hai phiên X bổ sung, tập tin đó đã biến mất - chỉ còn lại phiên thứ ba. Để khắc phục sự cố cho tất cả các cửa sổ, tôi đã khôi phục nó bằng:ln -s ~/.Xauthority /tmp/xauth-1000-_0
joeytwiddle

0

Tôi đã gặp phải vấn đề tương tự Tôi đã giải quyết nó bằng cách thay đổi biến môi trường HIỂN THỊ từ:

export DISPLAY=:0.0

đến

export DISPLAY=:10
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.