Làm cách nào để khắc phục lỗi không thể mở màn hình hiển thị lỗi khi mở chương trình X sau khi bật tính năng chuyển tiếp X11?


111

Sau khi khởi chạy ứng dụng X11 (XQuartz 2.3.6, xorg-server 1.4.2-apple56) trên máy Mac của tôi (OS X 10.6.8), mở một thiết bị đầu cuối trong X11 và chạy xhost +, sau đó ssh -Ytôi đến Ubuntu 10.04 VM (chạy trên VMware Dung hợp). Khi tôi chạy gedit .bashrc(ví dụ), tôi nhận được:

(gedit:9510): Gtk-WARNING **: cannot open display: 

set | grep DISPLAY trả lại không có gì.

Nhưng nếu tôi ssh -Yvào máy Ubuntu 11.04 của tôi, sẽ gedit .bashrchoạt động. echo $DISPLAYtrả về "localhost: 10.0".

Tôi đã thử export DISPLAY=localhost:10.0trong khi sshed vào VM của mình và sau đó chạy gedit .bashrc, nhưng tôi nhận được:

(gedit:9625): Gtk-WARNING **: cannot open display: localhost:10.0

Điều gì có thể khác nhau trong cấu hình của hai máy Ubuntu khác nhau sẽ giải thích tại sao một máy hoạt động còn máy kia thì không?

Cập nhật: Theo đề xuất của Zoredache trong bình luận bên dưới, tôi đã chạy sudo apt-get install xbase-clients, nhưng tôi tiếp tục gặp vấn đề tương tự.


2
Hộp Ubuntu 10.04 có các công cụ thích hợp cho X11 được cài đặt không? Cài đặt xbase-client, nếu nó chưa được cài đặt.
Zoredache

Tôi đã cài đặt nó nhưng vẫn có cùng một vấn đề. (Xem ở trên.)
Daryl Spitzer

3
Có thể thử chuyển tùy chọn -vv sang ssh khi bạn kết nối, điều này in các thông báo gỡ lỗi dài dòng, bạn sẽ thấy một số nhận xét về chuyển tiếp X11 trong khi kết nối.
Zoredache

1
@jcrawfordor Bạn đã kiểm tra X11Forwardingtrên Ubuntu, và bạn đã xbase-clientscài đặt và bạn có thể khởi động Xapps trên mac trên thiết bị đầu cuối mà bạn đang thực hiện kết nối ssh. (Kiểm tra xem đã $DISPLAYđược đặt trên thiết bị đầu cuối bạn chạy ssh từ .
Manwe

1
Trong trường hợp của tôi, đó chỉ là vấn đề nâng cấp phiên bản XQuartz của MacOS
Waruna Ranasinghe

Câu trả lời:


47

Kiểm tra sshd_config của máy chủ (thông thường /etc/ssh/sshd_config) và đảm bảo tùy chọn X11Forwarding được bật với dòng

X11Forwarding yes

Nếu X11Forwarding không được chỉ định, mặc định là không có trên các máy Debian mà tôi có sẵn để kiểm tra.


4
Tôi đã phát hiện ra sau khi thiết lập một máy ảo Ubuntu khác, rằng tôi cần cài đặt cả máy khách xbase và bật X11Forwarding. Cập nhật câu trả lời của bạn để bao gồm cả hai và tôi sẽ chấp nhận nó.
Daryl Spitzer

1
Hấp dẫn. Ít nhất là trên bản cài đặt mới 10.04 mà tôi đã làm sáng nay X11Forwarding được bật theo mặc định. Các anh chàng Ubuntu phải loay hoay với mặc định một lần nữa.
Zoredache

28
@DerfK, trong hệ thống của tôi "X11Forwarding yes" được đã có vẫn Tôi nhận được lỗi như, (gedit: 8381): Gtk-CẢNH BÁO **: không thể mở màn hình: trong trường hợp này
AJ

1
Trên Debian bạn có thể phải cài đặt gói xauth, sau đó đăng nhập lại.
comte

$ ssh tên người dùng @ tên máy chủ -Y cái này hiệu quả với tôi
MarcoZen

60

Từ xhost +: Cách khắc phục lỗi không thể mở Hiển thị lỗi trong khi khởi chạy GUI trên máy chủ từ xa :

Trả lời : Bạn có thể sửa lỗi không thể mở màn hình hiển thị lỗi bằng cách làm theo quy trình xhost được đề cập trong bài viết này.

Cho phép khách hàng kết nối từ bất kỳ máy chủ nào bằng xhost +

Thực hiện lệnh sau để vô hiệu hóa điều khiển truy cập, qua đó bạn có thể cho phép khách hàng kết nối từ bất kỳ máy chủ nào.

$ xhost +

kiểm soát truy cập bị vô hiệu hóa, khách hàng có thể kết nối từ bất kỳ máy chủ lưu trữ

Cho phép chuyển tiếp X11

Trong khi thực hiện ssh, sử dụng tùy chọn -X để bật chuyển tiếp X11.

$ ssh username@hostname -X

Cho phép chuyển tiếp X11 đáng tin cậy, bằng cách sử dụng tùy chọn -Y,

$ ssh username@hostname -Y

Mở các ứng dụng GUI trong máy chủ đó

Sau khi mở kết nối ssh với máy chủ từ xa như đã giải thích ở trên, bạn có thể mở bất kỳ ứng dụng GUI nào sẽ mở nó mà không gặp vấn đề gì.

Nếu bạn vẫn nhận được lỗi không thể mở hiển thị lỗi, hãy đặt biến HIỂN THỊ như hình bên dưới.

$ export DISPLAY='IP:0.0'

Lưu ý: IP là IP của máy trạm cục bộ nơi bạn muốn ứng dụng GUI được hiển thị.


11
+1 cho Lưu ý rằng IP = là IP của máy trạm cục bộ nơi bạn muốn lấy GUI
PCoder

3
Đối với những người có vấn đề tương tự trên OS X, hãy đảm bảo rằng bạn đã cài đặt XQuartz, nếu không thì không có cách khắc phục nào trong số này giúp được. (Câu hỏi của OP cho thấy anh ta có XQuartz, vì vậy đây là một lưu ý phụ cho những người có vấn đề tương tự như tôi)
Dolan Antenucci

3
Lưu ý rằng chạy xhost +rất không an toàn và không nên được sử dụng! Như Stefan Rogin đã đề cập, kẻ tấn công sau đó có thể từ máy chủ kết nối với XSession của bạn, đọc tất cả những gì bạn nhập hoặc thậm chí thay đổi màn hình bạn nhìn thấy.
jirislav

người cuối cùng export Display=IP:0.0đã làm điều đó cho tôi
javadba

18

Tôi cũng gặp vấn đề này khi đăng nhập vào máy ảo Ubuntu từ Mac OS X - có vẻ như nó không thích 'localhost' trong biến hiển thị vì một số lý do. Vì vậy, hãy đặt IP thủ công, như harrymc gợi ý:

export DISPLAY="127.0.0.1:10.0"

Sau đó, các chương trình X11 sẽ ổn. Có vẻ như không cần thiết phải nói với HĐH rằng localhost và 127.0.0.1 là tương đương, nhưng ít nhất nó cũng hoạt động.


Điều này làm việc cho tôi. Bất cứ ý tưởng tại sao localhost không hoạt động?
Alex

2
CHƠI LÔ TÔ! Tôi đã bị vấn đề đó một thời gian ... Tôi đã kết nối bằng SSH và không thể khởi chạy các chương trình Gtk (đơn giản là X11, như "xeyes", tuy nhiên đã hoạt động). HIỂN THỊ đã đúng. Trên thực tế, độ phân giải của "localhost" là không! Nếu tôi đặt thủ công HIỂN THỊ = 127.0.0.1: 10.0 hoặc HIỂN THỊ = :: 1: 10.0 thì nó hoạt động. Chỉnh sửa / etc / hosts dường như không có hiệu lực; và DNS được định cấu hình chính xác (báo cáo sửa lỗi "dig localhost" cả 127.0.0.1 và :: 1) Vì vậy, dường như đó là một lỗi trong bất cứ điều gì làm phân giải DNS cho các kết nối X11 trong Gtk (gtk? gdk? glib? khác?).
Pablo Saratxaga

1
Trên bản cài đặt Debian cho Beagle Bone Black, / etc / host không được đặt thành có thể đọc được bởi bất kỳ ai trừ root. Điều này gây ra các triệu chứng được báo cáo ở đây. Được tạo / etc / hosts có thể đọc được bởi tất cả, và nó hoạt động tốt.
Daniel

13

Tôi gặp vấn đề này với máy chủ CentOS KVM của tôi, tôi đã bỏ lỡ chương trình "xauth".


1
Điều này đã giúp tôi ra khỏi cài đặt debian tối thiểu của tôi, cảm ơn bạn rất nhiều!
binOr

9

Nếu bạn gặp vấn đề này sau một thời gian khi chạy với -Xarg. hoặc chỉ ForwardX11trong / etc / ssh / ssh_config, sau đó chạy $ ssh username@hostname -Y, để bật chuyển tiếp X11 đáng tin cậy , không biết nguyên nhân chính xác nhưng tôi đoán với -Xmột số tính năng sẽ hết hạn sau một thời gian, có thể để tăng tính bảo mật.

Đây là những gì tôi tìm thấy trực tuyến:

Nếu bạn sử dụng ssh -X remotemachine, máy từ xa được coi là máy khách không đáng tin cậy. Vì vậy, máy khách cục bộ của bạn gửi một lệnh đến máy từ xa và nhận đầu ra đồ họa. Nếu lệnh của bạn vi phạm một số cài đặt bảo mật, bạn sẽ nhận được một lỗi thay thế.

Nhưng nếu bạn sử dụng ssh -Y remotemachine thì máy từ xa được coi là máy khách đáng tin cậy. Tùy chọn cuối cùng này có thể mở các vấn đề bảo mật. Bởi vì máy khách đồ họa (X11) khác có thể đánh hơi dữ liệu từ máy từ xa (tạo ảnh chụp màn hình, làm keylogging và những thứ khó chịu khác) và thậm chí có thể thay đổi những dữ liệu đó.

Nếu bạn muốn biết thêm về những điều đó, tôi khuyên bạn nên đọc trang chủ Xsecurity hoặc thông số mở rộng X Security. Hơn nữa, bạn có thể kiểm tra các tùy chọn ForwardX11 và ForwardX11Trust trong / etc / ssh / ssh_config.

nguồn:


6

Chỉ cần thử nghiệm trên máy Mac của tôi, các hệ thống khác có thể ổn :

  1. Cho phép khách hàng kết nối từ bất kỳ máy chủ nào bằng xhost +

    $ xhost +

  2. Bạn nên có một môi trường hỗ trợ hiển thị X11

    [Hệ thống Mac] Cài đặt X11 cho mac https://www.xquartz.org/

  3. Bạn nên để ssh-server chuyển tiếp x11 hiển thị

    cập nhật /etc/ssh/sshd_configvà thiết lập X11Forwarding yes, sau đó khởi động lại máy chủ ssh của bạn

  4. Bạn nên để phiên ssh của bạn chuyển tiếp hiển thị x11 với -Xtham số

    $ ssh -X người dùng @ ip

  5. Làm cách nào để mở ứng dụng X11 trong PyCharm?
    • mở phiên ssh hỗ trợ hiển thị X11 (nhớ giữ phiên này)
    • chạy echo $DISPLAYtrong phiên ssh đó
    • đặt DISPLAYbiến môi trường cho PyCharm của bạn

1
Tại sao điều này khác nhau hoặc tại sao nó nên được ưu tiên hơn bất kỳ câu trả lời nào khác? Hãy giải thích nếu bạn có thể với một chỉnh sửa đơn giản . Bạn có thể làm được!!
Pimp Juice IT

@ McDonald Cảm ơn, cập nhật với nhiều chi tiết hơn.
Màu

4

Khi chạy UXTERM hoặc XTERM chỉ cần phát hành

export $DISPLAY 

Các biến sẽ ở đó. Sau đó, chỉ cần đặt nó và xuất nó.


4

Tôi đã phải đưa vào /etc/ssh/sshd_confignhư sau:

X11UseLocalhost no

Thay vào đó sau đó đặt nó "có". Lạ nếu mặc định là "KHÔNG" Người dùng sử dụng putty với XMing trong Windows. Tôi sử dụng ssh thẳng trên Fedora. Thỉnh thoảng nó sẽ bắt đầu cho chúng tôi

error can't open display localhost

Khởi động lại máy chủ thường sẽ sửa nó nhưng điều này thật ngu ngốc. Đã làm như trên, khởi động lại dịch vụ sshdtrên máy chủ và kết nối lại hoạt động tốt.


2

Tôi cũng gặp vấn đề này với Solaris 10 và thấy rằng người nghe chưa được thiết lập.

svccfg –s /application/x11/x11-server listprop options/tcp_listen
svccfg –s /application/x11/x11-server setprop  options/tcp_listen = true

1

Trên CentOS 6.5, tôi đột nhiên mất quyền truy cập các chương trình X từ xa sau khi gặp rắc rối với / etc / hosts. Cùng một triệu chứng của biến $ HIỂN THỊ trống (không có trợ giúp cài đặt / xuất nó theo cách thủ công).

Mục 127.0.0.1 trỏ đến tên máy chủ thực tế là cần thiết; trong thực tế, đơn đặt hàng dường như cũng có liên quan (đặt cuối cùng và nó sẽ không hoạt động ...)

[root@poseidon /etc]$ cat hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1       localhost.localdomain localhost
::1     localhost6.localdomain6 localhost6
127.0.0.1 poseidon.mycampus.edu poseidon
1XX.XXX.XXX.208 poseidon.mycampus.edu poseidon

Sau khi sửa lỗi này, xeyes, xclock và các đồ chơi thử nghiệm X khác đang hoạt động trở lại, do đó, người quản lý tài năng cần thiết của tôi cũng trở lại hoạt động.


1

Tôi vừa tìm thấy một trục trặc tốt trong thiết lập của mình đã ngăn chặn chuyển tiếp x: Tường lửa của tôi đã chặn tất cả các kết nối từ localhost, do đó ngăn chặn đường hầm được tiếp cận


1

Nếu bạn tình cờ sử dụng Konsole, chỉ cần chuyển sang trình giả lập thiết bị đầu cuối khác như Xfce Terminal và thử lại bằng root.


1

mở thiết bị đầu cuối $ ssh tên người dùng @ tên máy chủ -X

$ ssh username@hostname -Y

$ export DISPLAY='IP:0.0'

xuất khẩu HIỂN THỊ = "127.0.0.1:10.0" tất cả sẽ hoạt động.


Cảm ơn. Hoạt động cho trường hợp đặc biệt của tôi khi DISPLAY='localhost:10.0'không làm việc.
xpt

1

Thiết lập này hoạt động với tôi:

Cục bộ (Cygwin 64 bit trên Windows 10) DISPLAY=:0

Máy chủ (Amazon EC2 RHEL 7.6) DISPLAY=:10.0

Các cài đặt này đã được tìm thấy bằng cách nhấp vào "menu ứng dụng X trên: 0" trên thanh tác vụ và chọn Công cụ hệ thống> Thiết bị đầu cuối


0

Sau rất nhiều thất vọng tôi phát hiện ra rằng mục nhập tên máy chủ của máy chủ trong tệp / etc / host của mình là không chính xác.

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.