2011-07-13 18:13:00 +0000 2011-07-13 18:13:00 +0000
117
117

Jak naprawić błąd "cannot open display" podczas otwierania programu X po ssh'ing z włączonym przekierowaniem X11?

Po uruchomieniu aplikacji X11 (XQuartz 2.3.6, xorg-server 1.4.2-apple56) na moim Macu (OS X 10.6.8), otwarciu terminalu w X11 i uruchomieniu xhost +, I następnie ssh -Y do mojego Ubuntu 10.04 VM (działającego na VMware Fusion). Kiedy uruchamiam gedit .bashrc (na przykład), otrzymuję:

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

set | grep DISPLAY nie zwraca nic.

Ale jeśli ssh -Y na mojej maszynie Ubuntu 11.04, gedit .bashrc działa. echo $DISPLAY zwraca “localhost:10.0”.

Próbowałem export DISPLAY=localhost:10.0, gdy wpychałem się w moją maszynę wirtualną, a następnie uruchomiłem gedit .bashrc, ale otrzymałem:

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

Co może być innego w konfiguracji dwóch różnych maszyn Ubuntu, co tłumaczyłoby dlaczego jedna z nich działa, a druga nie?

Update: Zgodnie z sugestią Zoredache w poniższym komentarzu, uruchomiłem sudo apt-get install xbase-clients, ale nadal mam ten sam problem.

Réponses (14)

62
62
62
2012-02-21 08:47:03 +0000

Od xhost+ : How to Fix “Cannot Open Display” Error While Launching GUI on Remote Server :

Answer : Możesz naprawić błąd “Cannot Open Display” wykonując procedurę xhost wspomnianą w tym artykule.

** Pozwól klientom łączyć się z dowolnego hosta używając xhost+**

Wykonaj poniższe polecenie, aby wyłączyć kontrolę dostępu, dzięki któremu klienci mogą łączyć się z dowolnego hosta.

$ xhost +

Wyłącz kontrolę dostępu, dzięki czemu klienci mogą łączyć się z dowolnego hosta

Włącz przekierowanie X11

Podczas wykonywania ssh użyj opcji -X aby włączyć przekierowanie X11.

$ ssh username@hostname -X

Włączyć przekierowanie X11, używając opcji -Y,

$ ssh username@hostname -Y

Otwórz aplikacje GUI na tym hoście

Po otwarciu połączenia ssh do zdalnego hosta, jak wyjaśniono powyżej, można otworzyć dowolną aplikację GUI, która otworzy ją bez problemu.

Jeśli nadal występuje błąd “cannot open display”, ustaw zmienną DISPLAY, jak pokazano poniżej.

$ export DISPLAY='IP:0.0'

Uwaga: IP jest adresem IP lokalnej stacji roboczej, w której ma być wyświetlana aplikacja GUI.

49
49
49
2011-07-13 18:54:50 +0000

Sprawdź sshd_config serwera (normalnie /etc/ssh/sshd_config), i upewnij się, że opcja X11Forwarding jest włączona z linią

X11Forwarding yes

Jeśli X11Forwarding nie jest określony, domyślnie nie ma go na maszynach Debiana, które mam do dyspozycji do sprawdzenia.

18
18
18
2012-06-29 20:44:03 +0000

Miałem ten problem również podczas logowania się do maszyny wirtualnej Ubuntu z Mac OS X - z jakiegoś powodu nie wydaje mi się, aby w zmiennej wyświetlania był to “localhost”. Więc ustaw IP ręcznie, jak sugeruje harrymc:

export DISPLAY="127.0.0.1:10.0"

Wtedy programy X11 powinny być w porządku. Nie wydaje się, aby konieczne było informowanie systemu operacyjnego, że localhost i 127.0.0.1 są równoważne, ale to przynajmniej działa.

14
14
14
2012-10-22 07:59:02 +0000

Miałem ten problem z moim serwerem KVM CentOS, brakowało mi programu “xauth”.

9
9
9
2014-10-17 08:06:53 +0000

Jeśli masz ten problem po jakimś czasie podczas uruchamiania z -X arg. lub po prostu ForwardX11 w /etc/ssh/ssh_config, następnie uruchom $ ssh username@hostname -Y, aby włączyć trusted X11 forwarding , nie znam dokładnej przyczyny, ale zgaduję, że z -X niektóre funkcje wygasają po jakimś czasie, prawdopodobnie w celu zwiększenia bezpieczeństwa.

Oto co znalazłem online :

Jeśli używasz ssh -X remotemachine zdalna maszyna jest traktowana jako niezaufany klient. Twój lokalny klient wysyła więc polecenie do zdalnej maszyny i otrzymuje wyjście graficzne. Jeśli twoja komenda naruszy jakieś ustawienia bezpieczeństwa, zamiast tego otrzymasz błąd.

Ale jeśli używasz ssh -Y remotachine, zdalna maszyna jest traktowana jako zaufany klient. Ta ostatnia opcja może otworzyć problemy z bezpieczeństwem. Ponieważ inni graficzni (X11) klienci mogą wąchać dane ze zdalnej maszyny (robić zrzuty ekranu, robić keylogging i inne paskudne rzeczy) i jest nawet możliwa zmiana tych danych.

Jeśli chcesz dowiedzieć się więcej o tych rzeczach proponuję przeczytać Xsecurity manpage lub X Security extension spec. Ponadto możesz sprawdzić opcje ForwardX11 i ForwardX11Trusted w twoim /etc/ssh/ssh_config.

źródła:

6
6
6
2017-08-30 11:36:06 +0000

Teraz testowany na moim Macu, inne systemy mogą być OK :

  1. Pozwól klientom połączyć się z dowolnego hosta używając xhost+

$ xhost +

  1. Powinieneś mieć środowisko obsługujące X11 display

[Mac System] Install X11 for mac https://www.xquartz.org/

  1. You should let your ssh-server forward x11 display

update /etc/ssh/sshd_config and set X11Forwarding yes, then restart your ssh server

  1. You should let your ssh session forward x11 display with -X parameter

$ ssh -X user@ip

  1. Jak otworzyć aplikację X11 w PyCharm?
  • otwórz sesję ssh obsługującą wyświetlanie X11 (pamiętaj, aby zachować tę sesję)
  • uruchom echo $DISPLAY w tej sesji ssh
  • ustaw zmienną środowiskową DISPLAY dla swojego PyCharm.
4
4
4
2017-09-01 01:17:28 +0000

Musiałem włożyć do /etc/ssh/sshd_config:

X11UseLocalhost no

Raczej ustawić to na “tak”. Dziwne jeśli domyślnie jest “NIE” Użytkownicy używający kitu z XMingiem pod Windows. Używam prostego ssh nad Fedorą. Od czasu do czasu zaczynałby dawać nam

error can't open display localhost

Reboot serwera zwykle by to naprawił, ale to jest głupie. Czy powyższe, zrestartowałeś usługę sshd na serwerze i zanim nowe połączenia znów działały poprawnie.

4
4
4
2012-07-10 21:26:59 +0000

Podczas uruchamiania UXTERM lub XTERM wystarczy wydać

export $DISPLAY

Zmienna będzie tam. Następnie wystarczy ją ustawić i wyeksportować.

3
3
3
2019-07-08 17:25:35 +0000

Ta konfiguracja działa dla mnie:

Local (64-bitowy Cygwin w Windows 10) DISPLAY=:0

Serwer (Amazon EC2 RHEL 7.6) DISPLAY=:10.0

Te ustawienia zostały znalezione po kliknięciu “X applications menu on :0” na pasku zadań i wybraniu System Tools > Terminal

2
2
2
2015-03-18 22:52:32 +0000

Miałem też ten problem z Solarisem 10 i stwierdziłem, że słuchacz nie był ustawiony.

svccfg –s /application/x11/x11-server listprop options/tcp_listen
svccfg –s /application/x11/x11-server setprop options/tcp_listen = true
1
1
1
2017-05-01 04:13:35 +0000

Jeśli używasz Konsoli, po prostu przełącz się na inny emulator terminala, taki jak Xfce Terminal i spróbuj ponownie użyć root'a.

1
1
1
2014-07-15 15:13:51 +0000

Na CentOS 6.5, nagle straciłem zdalny dostęp do programów X po tym, jak zadzierałem z /etc/hosts. Ten sam objaw pustej zmiennej $DISPLAY (bez pomocy ustawiającej/eksportującej ją ręcznie).

Wpis 127.0.0.1 wskazujący na rzeczywistą nazwę hosta jest konieczny; w rzeczywistości kolejność wydaje się być również istotna (włóż ostatnią i nie będzie działać…)

[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

Po naprawieniu tego, xeyes, xclock i inne testowe zabawki X znów działają, dlatego mój potrzebny virt-manager jest również z powrotem w sieci.

1
1
1
2016-06-10 11:56:04 +0000

Znalazłem po prostu niezłą czkawkę w mojej konfiguracji, która uniemożliwiała przekierowanie x: Mój firewall blokował wszystkie połączenia z lokalnym gospodarzem, uniemożliwiając w ten sposób dotarcie do tunelu.

1
1
1
2018-05-30 13:40:40 +0000

open terminal $ ssh username@hostname -X

$ ssh username@hostname -Y

$ export DISPLAY='IP:0.0'

export DISPLAY=“127.0.0.1:10.0” wszystko powinno działać.