„Brak zmiennej X11 DISPLAY” - co to znaczy?

102

Próbuję zainstalować aplikację Java na moim komputerze z systemem Linux (Slackware).

Otrzymałem następujący błąd i go nie rozumiem.

Czy możesz mi doradzić, jak podejść do problemu? Dziękuję Ci.

Oto, co otrzymuję: (Widzę, że należy ustawić jakąś zmienną X11 DISPLAY , ale jaką wartość mam jej podać i jak?)

~$ java -jar gate-5.0-beta1-build3048-installer.jar
- ERROR -

java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
at java.awt.GraphicsEnvironment.checkHeadless(Graphic sEnvironment.java:159)
at java.awt.Window.<init>(Window.java:407)
at java.awt.Frame.<init>(Frame.java:402)
at net.sourceforge.mlf.metouia.borders.MetouiaDotsBuf fer.<init>(MetouiaDotsBuffer.java:105)
at net.sourceforge.mlf.metouia.borders.MetouiaDots.<i nit>(MetouiaDots.java:66)
at net.sourceforge.mlf.metouia.borders.MetouiaToolBar Border.<init>(MetouiaToolBarBorder.java:49)
at net.sourceforge.mlf.metouia.MetouiaLookAndFeel.ini tComponentDefaults(MetouiaLookAndFeel.java:241)
at javax.swing.plaf.basic.BasicLookAndFeel.getDefault s(BasicLookAndFeel.java:130)
at javax.swing.plaf.metal.MetalLookAndFeel.getDefault s(MetalLookAndFeel.java:1591)
at javax.swing.UIManager.setLookAndFeel(UIManager.jav a:537)
at javax.swing.UIManager.setLookAndFeel(UIManager.jav a:581)
at com.izforge.izpack.installer.GUIInstaller.loadLook AndFeel(GUIInstaller.java:373)
at com.izforge.izpack.installer.GUIInstaller.<init>(G UIInstaller.java:116)
at sun.reflect.NativeConstructorAccessorImpl.newInsta nce0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInsta nce(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newI nstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Construc tor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:30
at com.izforge.izpack.installer.Installer.main(Instal ler.java:62)
user42155
źródło
Mam ten sam problem, działa perfekcyjnie na konsoli, ale kiedy używam eclipse, rzuca ten sam wyjątek, nawet umieszczam te linie kodu: Process proc_exporting = Runtime.getRuntime (). exec ("sudo export DISPLAY =: 0.0") ; nadal nie działa
hb.Sara
3
Żadna z odpowiedzi nie zawiera informacji potrzebnych do rozwiązania tego problemu podczas zdalnego łączenia się z konsolą przez puTTY. Żadna odpowiedź dotycząca SSH nie wyjaśnia, jak to działa. Czy ktoś zna pytanie, które dotyczy tego?

Odpowiedzi:

121

Jeśli jesteś na głównym ekranie, to

export DISPLAY=:0.0

lub jeśli używasz csh lub tcsh

setenv DISPLAY :0.0

przed uruchomieniem aplikacji.

Właściwie jestem zaskoczony, że nie jest ustawiany automatycznie. Czy próbujesz uruchomić tę aplikację z terminala bez grafiki? Jeśli nie, czy zmodyfikowałeś domyślny .profile, .login, .bashrc lub .cshrc?

Zauważ, że ustawienie WYŚWIETLACZA na: 0.0 zakłada, że ​​siedzisz przy głównym wyświetlaczu, jak powiedziałem, lub przynajmniej, że główny wyświetlacz jest zalogowany do twojego identyfikatora użytkownika. Jeśli nie jest zalogowany lub ma inny identyfikator użytkownika, to się nie powiedzie.

Jeśli przychodzisz z innego komputera i jesteś na głównym ekranie tego komputera i działa na nim X, możesz użyć "ssh -X hostname", aby połączyć się z tym hostem, a ssh przekaże ekran X z powrotem . ssh upewni się również, że zmienna środowiskowa DISPLAY jest ustawiona poprawnie (pod warunkiem, że nie jest ona pomieszana w różnych plikach kropek, o których wspomniałem powyżej). W sesji "ssh -X" zmienna środowiskowa DISPLAY będzie miała wartość taką jak "localhost: 11.0", która będzie wskazywać gniazdo, które ssh tuneluje do twojego lokalnego urządzenia.

Paul Tomblin
źródło
Cześć, bardzo dziękuję, pierwszy zadziałał dla mnie. Tak, uruchamiam go z terminala bez grafiki.
user42155
Wygląda jednak na to, że chce uzyskać dostęp do wyświetlacza graficznego. Uważaj, aby go nie uruchamiać, gdy wyświetlacz graficzny nie jest dostępny lub należy do innego identyfikatora użytkownika.
Paul Tomblin,
3
zwróć uwagę, że to zadziałało, ponieważ jesteś / byłeś na konsoli. gdybyś był na innym terminalu, musiałbyś mieć serwer X działający na terminalu, a następnie ustawić środowisko tak, aby wskazywało na twój komputer (na przykład export DISPLAY = 'nazwa hosta pauls terminal': 0.0)
KevinDTimm
@kevindtimm, słuszna uwaga - zamierzam uwzględnić informacje @ Mikeage o ssh -X w mojej odpowiedzi.
Paul Tomblin,
1
Jeśli potrzebujesz uruchomić zautomatyzowane zadanie wymagające połączenia z serwerem X, możesz spojrzeć na xvfb, który tworzy wirtualny serwer X. Jest to bardzo przydatne w przypadku niektórych testów wsadowych lub testów uruchomieniowych.
Wichert Akkerman
10

Czy uruchamiasz to w środowisku X11? Możesz użyć okna terminala, ale musi ono znajdować się w X (albo po zalogowaniu graficznym, albo po uruchomieniu startx).

Jeśli jesteś już w środowisku graficznym, spróbuj wyeksportować DISPLAY =: 0 dla powłok typu bash (bash, sh itp.) Lub setenv DISPLAY: 0 dla powłok opartych na powłoce C (csh, tcsh itp.)

Jeśli połączyłeś się z innego komputera przez SSH, używasz opcji -X, aby wyświetlić interfejs graficzny na maszynie, na której siedzisz (pod warunkiem, że jest tam uruchomiony X serwer (taki jak xming dla Windows i standardowy Linux X serwer).

Mikeage
źródło
Cześć, używam startx.
user42155
No tak, Slackware. Czy nadal jest tak samo szkieletowy, jak wtedy, gdy ostatnio go używałem 10 lat temu?
Paul Tomblin,
Wciąż uruchamia się domyślnie na 3. poziomie działania. Oczywiście, jeśli powiesz mu, aby uruchamiał się na poziomie 5, otrzymasz ładne menu logowania KDM, zakładając, że zainstalowałeś KDE.
Adam Jaskiewicz
dzięki! na CentOS i SSH (kit): export DISPLAY=:0
jacktrades
8

musisz włączyć przekazywanie X11 w swoim PuTTy

aby to zrobić otwórz PuTTy, przejdź do Connection => SSH => Tunnels i zaznacz pole wyboru Enable X11 forwarding

Również sudo na serwer i wyeksportuj poniższą zmienną tutaj IP to adres IP twojej lokalnej maszyny

export DISPLAY=10.75.75.75:0.0

wprowadź opis obrazu tutaj

Girdhar Singh Rathore
źródło
4

Jeszcze jedna rzecz, która może być problemem w przypadku podobnym do opisanego - X nie jest przekazywany, a $ DISPLAY nie jest ustawiane, gdy program 'xauth' nie jest zainstalowany po stronie zdalnej. Możesz zobaczyć, że wyszukuje go po uruchomieniu "ssh -Xv ip_address" i, jeśli nie zostanie znaleziony, zawiedzie, co nie jest widoczne, chyba że włączysz tryb gadatliwy (błąd IMO). Zwykle można znaleźć „xauth” w pakiecie o tej samej nazwie.

Арсений Пичугин
źródło
3

Bardzo łatwo, miałem ten sam problem, co wtedy, gdy pobrałem i zainstalowałem aplikację, która pomogłaby w wyświetleniu, a następnie naprawiłem błąd.

Pobierz tę aplikację xming:

http://sourceforge.net/project/downloading.php ?

Zainstaluj, a następnie użyj ustawień tego linku:

http://www.geo.mtu.edu/geoschem/docs/putty_install.html lub wykonaj następujące czynności:

Instalowanie / konfigurowanie PuTTy i Xming

Po pobraniu PuTTy i Xming na komputer, zainstaluj zgodnie z ich instrukcjami.

Konfiguracja Xming

Po zainstalowaniu Xming uruchom aplikację o nazwie „XLaunch” i sprawdź, czy ustawienia są takie, jak pokazano:

  • wybierz Domyślne wpisy w oknach Ustawienia wyświetlania, kliknij dalej
  • kliknij dalej w oknie Typ sesji.
  • kliknij dalej w oknie Dodatkowe parametry (Zwróć uwagę, że pole wyboru schowka jest prawdziwe)
  • zapisz konfigurację i kliknij, aby zakończyć.

Konfigurowanie PuTTy

Po zainstalowaniu PuTTy kliknij dwukrotnie ikonę PuTTy na pulpicie i skonfiguruj, jak pokazano:

Pokazuje tworzenie profilu logowania, a następnie zapisywanie go.

  • Na ssh -> X11, kliknij pole wyboru, aby włączyć przekazywanie X11.
  • w polu tekstowym lokalizacji wyświetlania X wpisz localhost: 0.0

zapisz profil, a następnie połącz się zdalnie z serwerem w celu przetestowania.

Twoje zdrowie!!!

Peter Azuka Molokwu
źródło
Prosimy o uwzględnienie w samej odpowiedzi podstawowych informacji z linków, ponieważ mogą one w końcu umrzeć, czyniąc odpowiedź bezużyteczną.
plamut
2

Istnieje wiele sposobów, aby to zrobić. Zrobiłem poniżej coś wygodnego dla mnie i zawsze działa dobrze.

  1. Na swoim serwerze zdalnym zainstaluj xorg-x11-xauth, xorg-x11-font-utils, xorg-x11-fonts.
  2. Uruchom serwer Xming na swoim lokalnym pulpicie
  3. Na putty, przed ssh do serwera, włącz przekazywanie X11 i ustaw miejsce wyświetlania na localhost: 0.0
  4. Na serwerze generowany jest plik .Xauthority i zauważ, że zmienna DISPLAY jest już ustawiona.

    Lista $ xauth

    $ xauth dodaj

Aby to przetestować, wpisz xclock lub xeyes

Uwaga : Aby zmienić użytkownika, skopiuj plik .Xauthority do katalogu domowego odpowiedniego użytkownika, a także wyeksportuj zmienną DISPLAY od tego użytkownika.

Naseer-shaik
źródło
0

Miałem ten sam problem w Ubuntu 14.04.01, kiedy próbowałem zainstalować JDK 8 i Netbeans, jeśli uruchomię skrypt w terminalu Byobu (może z ekranami dzieje się to samo).

Po prostu wyjdź z Byobu i (w terminalu graficznym) uruchom skrypt.

victe
źródło
0

Wstępna kontrola.

1) Podczas eksportowania WYŚWIETLACZA do innego komputera upewnij się, że polecenie zostało wprowadzone xhost +na tym komputerze. To polecenie pozwala innej maszynie wyeksportować swój WYŚWIETLACZ na tym komputerze. Mogą istnieć ograniczenia dotyczące bezpieczeństwa, po prostu o tym wiedz. Potrzebujesz sprawdzić ssh -X MachineIPnie będzie wymagać xhost +?

2) Czasami JCONSOLEnie pokazuje całego procesu, ponieważ te procesy JVM mogą działać z innym użytkownikiem i eksportujesz DISPLAY z innym użytkownikiem. więc lepiej podążajCD_DIR>sudo ./jconsole

3) W WAS (WEBSPHERE); jconsole nie będzie w stanie połączyć się z procesem serwera java, w tym czasie po prostu przejdź do łącza, a następnie spróbuj go połączyć. To zadziałało dla mnie. Być może ta strona inicjuje niektóre zmienne, aby umożliwić jconsole połączenie z tym serwerem.

Konsola WAS> Serwery aplikacji> serwer1> Definicja procesu> Wirtualna maszyna języka Java


Napotkałem ten sam problem z maszyną AIX (gdzie dostępny jest tylko interfejs wiersza poleceń, nie ma interfejsu DISPLAY UI). Rozwiązałem, instalując

Klient NX dla systemu Windows

Krok 1: Za pośrednictwem tego komputera z systemem Windows połączyłem się z skrzynką unix, w której dostępna jest konsola GUI.
Krok 2: SSH do skrzynki AIX z tego pudełka UNIX.
Krok 3: ustaw DISPLAY jak "export DISPLAY = UNIXMACHINE: NXClientPORTConnectedMentionedOnTitle"
Krok 4: Teraz, jeśli uruchomimy jakiekolwiek programy, które wymagają DISPLAY; zostanie uruchomiony na tym pudełku z systemem UNIX.

VNC

Jeśli zainstalowałeś VNC na skrzynce UNIX, gdzie wyświetlacz jest dostępny; wtedy klient Windows i NX nie są wymagane. Krok 1: Użyj VNC, aby połączyć się z skrzynką Unix, w której dostępna jest konsola GUI.
Krok 2: SSH do skrzynki AIX z tego pudełka UNIX.
Krok 3: ustaw DISPLAY jak "export DISPLAY = UNIXMACHINE: VNCPORT"
Krok 4: Teraz, jeśli uruchomimy jakiekolwiek programy, które wymagają DISPLAY; zostanie uruchomiony na tym pudełku z systemem UNIX.

JESZCZE

Krok 1: SSH do skrzynki AIX z tego pudełka UNIX.
Krok 2: ustaw DISPLAY jak "export DISPLAY = UNIXMACHINE: VNCPORT"
Krok 3: Teraz, jeśli uruchomimy jakiekolwiek programy, które wymagają DISPLAY; zostanie uruchomiony na tym pudełku z systemem UNIX.

Kanagavelu Sugumar
źródło
0

Dla tych, którzy próbują pobrać aplikację X Window działającą z systemu Windows z systemu Linux:

To, co zadziałało, to skonfigurowanie serwera xming na moim komputerze z systemem Windows, ustawienie opcji przekazywania X11 w kitu, kiedy łączę się z hostem linux i umieszczenie adresu IP systemu Windows z portem wyświetlania, a następnie zmiennej wyświetlania z moim adresem IP systemu Windows: 0.0

Nie zapomnij dodać adresu IP hostów linuxowych do pliku X0.hosts, aby upewnić się, że serwer xming akceptuje ruch z tego hosta. Zajęło mi trochę czasu, zanim to rozgryzłem.

Subramaniam Ramasubramanian
źródło
-3

Nie zapomnij wykonać "host +" na swoim "głównym" komputerze wyświetlającym, a kiedy łączysz się z maszyną przez ssh, robisz "ssh -x nazwa hosta"

Tihamer
źródło
14
Zdecydowanie odradzałbym używanie "xhost +", ponieważ skutecznie wyłącza wszystkie zabezpieczenia na twoim X serwerze. ssh jest wystarczająco sprytny, aby używać xauth do automatycznej konfiguracji uwierzytelniania X11, więc nie powinno być potrzeby używania xhost.
Wichert Akkerman,
To powinien być komentarz, a nie post. To, że nie możesz komentować, nie oznacza, że ​​powinieneś napisać zły post.
Elliot A.