dlaczego wyświetlanie x11 nie działa po zalogowaniu ssh?


22

Zalogowałem się na zdalnym serwerze i próbuję wyświetlić aplikację X (np. Firefox). ale pojawia się komunikat o błędzie. poniżej są moje próby otwarcia firefoxa

Black@Black-PC ~
$ ssh -X kwagjj@$labserver -p 122
[kwagjj@James5 ~]$ firefox
Error: no display specified
[kwagjj@James5 ~]$ exit
logout
Connection to 143.248.146.204 closed.

Black@Black-PC ~
$ ssh -Y kwagjj@$labserver -p 122
[kwagjj@James5 ~]$ firefox
Error: no display specified
[kwagjj@James5 ~]$ 

Użyłem -X, -Y, ponieważ gdzieś przeczytałem, że te dwie opcje są powiązane z poświadczeniami dotyczącymi X11 i te przełączniki wykonają za mnie zadanie. Nawet bez przełączników -X, -Y moja próba się nie powiodła.

Co oznacza błąd „brak wskazania wyświetlacza”?

PS Dziwną rzeczą jest to, że jeśli połączę się ze zdalnym serwerem za pośrednictwem PUTTY i powtórzę polecenie „firefox”, to zadziała?!?! (Firefox jest wyświetlany na komputerze lokalnym)

PS moim lokalnym komputerem jest Windows 7, więc mam Xming działający w tle, aby umożliwić wyświetlanie X11. Jeśli chodzi o próbę napisaną w górnej części, polecenia zostały wpisane w terminalu Cygwin.


Czy próbowałeś wyświetlić coś lokalnie z terminala Cygwin? Na przykład możesz znaleźć lokalne narzędzie X, takie jak xclock i uruchomić je, aby zobaczyć, co się stanie. Jeśli nie możesz wyświetlić lokalnie, wyświetlacz zdalny nie będzie działał. Możesz także potrzebować serwera X dla Cygwin.
unxnut

1
@unxnut, jak wskazałeś, moja DISPLAYzmienna nie została ustawiona. więc ustawiłem go z export DISPLAY=:0.0' and executed xclock` i pojawiła się xclock. Ale kiedy zalogowałem się do zdalnego serwera za pośrednictwem ssh i spróbowałem xclockponownie, mówiError: Can't open display:
kwagjj

Odpowiedzi:


16

Upewnij się, że masz zmienną DISPLAY w swoim środowisku cygwin:

export DISPLAY=:0.0

po połączeniu z SSH sprawdź, czy powłoka zna również poprawną zmienną DISPLAY za pomocą:

echo $DISPLAY

4
Ustawiłem zmienną DISPLAY w cygwinowym terminalu komputera lokalnego, a następnie ssh'ed na zdalny serwer i wpisałem echo $DISPLAY. Ale wciąż zmienna DISPLAY na zdalnym serwerze jest ustawiona na nic.
kwagjj

2
Error: Can't open display: :0.0
Ahmed

2
Zrób to:export DISPLAY=localhost:0
trogne

18

Właśnie natrafiłem na ten problem podczas łączenia się z bezgłowym serwerem RHEL7.

Potrzebujesz pakietu xorg-x11-xauth zainstalowanego na twoim hoście, aby zmienna DISPLAY mogła zostać ustawiona i być odpowiednio autoryzowana.

Mam nadzieję, że zaoszczędziłem komuś czas.


3
dokładnie to, czego szukałem. Bardzo mile widziane!
josh-cain

1
Świetna odpowiedź! Inne rozwiązania (ręczne ustawienie WYŚWIETLANIA poprzez eksport) spowoduje nieszyfrowaną transmisję między klientem a serwerem! W Debian Squeeze był to pakiet „xauth”, który musiał zostać zainstalowany, aby wszystko działało. Po ponowne logowanie za zwrócił URL + port i wezwanie otworzył terminal w lokalnym oknie. ssh -Xecho $DISPLAYxterm &
Jpsy

7

Dzięki @jensd, @unxnut za pomoc. na podstawie twoich komentarzy udało mi się rozwiązać problem.

Rozwiązanie wymagało dwóch kroków:

  1. zmienna DISPLAY powinna być odpowiednio ustawiona.
  2. gdy ssh'ing do zdalnego serwera, przełącznik -X musi być włączony

w moich poprzednich próbach brakuje jednego lub obu tych dwóch warunków.

W każdym razie dla późniejszych użytkowników, którzy to zobaczą, są przykłady pokazujące, co próbuję powiedzieć.

przypadek 1

moja lokalna maszyna nie będzie miała ustawionej zmiennej DISPLAY. A potem ssh na zdalny serwer z przełącznikiem -X, a następnie spróbuj wykonać xclock.

Black@Black-PC ~
$ echo $DISPLAY

## the blank means that DISPLAY variable has not been specified##
Black@Black-PC ~
$ ssh -X kwagjj@$labserver -p 122
Last login: Tue Jun 24 22:23:13 2014 from 
[kwagjj@James5 ~]$ xclock
Error: Can't open display:
[kwagjj@James5 ~]$ setenv | grep $DISPLAY
DISPLAY: Undefined variable.

jak widać błąd Error: Can't open display:pojawia się na terminalu zdalnego serwera.

skrzynka 2

tym razem na komputerze lokalnym określę zmienną DISPLAY. Ale kiedy ssh'ing, nie włączę przełącznika -X. Rezultatem będzie awaria:

Black@Black-PC ~
$ export DISPLAY=:0.0

Black@Black-PC ~
$ echo $DISPLAY
:0.0

Black@Black-PC ~
$ ssh kwagjj@$labserver -p 122
Last login: Tue Jun 24 22:33:32 2014 from 
[kwagjj@James5 ~]$ xclock
Error: Can't open display:
[kwagjj@James5 ~]$ setenv | grep DISPLAY
[kwagjj@James5 ~]$ 

na początku widać, że poprawnie ustawiłem zmienną DISPLAY. Ale nawet po ssh'ingu (bez przełącznika -X) xclock nie jest wykonywany.

* setenv | grep DISPLAYMożna zobaczyć tutaj inny wynik (porównaj z przypadkiem 1). w przypadku 2 wynik jest po prostu pusty. z drugiej strony wynikiem przypadku1 w tym wierszu poleceń jest DISPLAY: undefined variable.... Nie jestem pewien, jak ta różnica jest spowodowana, ale mam przeczucie, że jest to związane z tym, czy spełniasz warunek 1. lub 2 .

skrzynka 3

tym razem poprawnie określę zmienną DISPLAY na komputerze lokalnym, a także ssh na zdalnym serwerze z włączonym przełącznikiem -X.

Black@Black-PC ~
$ echo $DISPLAY
:0.0

Black@Black-PC ~
$ ssh -X kwagjj@$labserver -p 122
Warning: untrusted X11 forwarding setup failed: xauth key data not generated
Warning: No xauth data; using fake authentication data for X11 forwarding.
Last login: Tue Jun 24 22:37:27 2014 from 
[kwagjj@James5 ~]$ xclock &
[1] 9174
[kwagjj@James5 ~]$ setenv | grep DISPLAY
DISPLAY=localhost:11.0
[kwagjj@James5 ~]$

z tym ustawieniem xclockdziała !! oto zrzut ekranu, aby udowodnić, że nie kłamię. wprowadź opis zdjęcia tutaj xclock został pomyślnie wyświetlony na moim komputerze lokalnym.

Ponownie sprawdź wynik setenv | grep DISPLAYw tym przypadku. Teraz pokazuje DISPLAY=localhost:11.0. Z tego, co wiem, jest to związane z MIT-MAGIC-COOKIE w pliku .Xauthority, ale ponieważ niewiele wiem na ten temat, nie pójdę dalej.

Wniosek: z trzech powyższych przypadków możemy potwierdzić, że aby zdalne X-Windows mogło być poprawnie wyświetlane, zarówno 1. zmienna DISPLAY lokalnej maszyny, jak i 2. -Xprzełącznik ssh muszą być odpowiednio ustawione. Oczywiście zdalny serwer powinien umożliwiać przekazywanie X11.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.