org.eclipse.swt.SWTError: Nigdy więcej uchwytów [gtk_init_check () nie powiodło się] podczas uruchamiania Eclipse na Ubuntu


24

Próbowałem otworzyć zaćmienie w mojej maszynie wirtualnej Ubuntu za pomocą poniższego polecenia .. I jak tylko to zrobię, zawsze otrzymuję poniższy wyjątek -

ubuntu@username-dyn-vm1-48493:~$ eclipse
Eclipse:
An error has occurred. See the log file
/home/ubuntu/.eclipse/org.eclipse.platform_3.8_155965261/configuration/1381367113197.log.

więc po przejściu do tego konkretnego pliku dziennika widzę to w dzienniku -

ubuntu@username-dyn-vm1-48493:~$ more /home/ubuntu/.eclipse/org.eclipse.platform_3.8_155965261/configuration/1381367113197.log
!SESSION 2013-10-10 01:05:13.088 -----------------------------------------------
eclipse.buildId=debbuild
java.version=1.7.0_25
java.vendor=Oracle Corporation
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_US
Command-line arguments:  -os linux -ws gtk -arch x86_64

!ENTRY org.eclipse.osgi 4 0 2013-10-10 01:05:17.555
!MESSAGE Application error
!STACK 1
org.eclipse.swt.SWTError: No more handles [gtk_init_check() failed]
        at org.eclipse.swt.SWT.error(SWT.java:4387)
        at org.eclipse.swt.widgets.Display.createDisplay(Display.java:914)
        at org.eclipse.swt.widgets.Display.create(Display.java:900)
        at org.eclipse.swt.graphics.Device.<init>(Device.java:156)
        at org.eclipse.swt.widgets.Display.<init>(Display.java:498)
        at org.eclipse.swt.widgets.Display.<init>(Display.java:489)
        at org.eclipse.ui.internal.Workbench.createDisplay(Workbench.java:716)
        at org.eclipse.ui.PlatformUI.createDisplay(PlatformUI.java:161)
        at org.eclipse.ui.internal.ide.application.IDEApplication.createDisplay(IDEApplication.java:154)
        at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:96)
        at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
        at org.eclipse.equinox.launcher.Main.main(Main.java:1414)

Czy ktoś wie, co się stało? Lub co mam zrobić, aby rozwiązać ten problem? Dzięki..

Aktualizacja:-

Szczegóły wersji poniżej -

ubuntu@username-dyn-vm1-48493:~$ dpkg -l libgtk[0-9]* | grep ^i
ii  libgtk2.0-0:amd64                   2.24.17-0ubuntu2                    amd64        GTK+ graphical user interface library
ii  libgtk2.0-bin                       2.24.17-0ubuntu2                    amd64        programs for the GTK+ graphical user interface library
ii  libgtk2.0-common                    2.24.17-0ubuntu2                    all          common files for the GTK+ graphical user interface library

co dziwne, miałem podobny problem z uruchomieniem dbeaver. Musiałem najpierw opuścić tmux, aby działał poprawnie. Odd
— matchew

Odpowiedzi:


4

Myślę, że to jest problem z gtk. Sprawdź, która wersja jest zainstalowana.

dpkg -l libgtk[0-9]* | grep ^i

Jeśli nie jest zainstalowany lub jest niepoprawną wersją, wykonaj a sudo apt-get install gtklub z sudo apt-get update.

EDYTOWAĆ

Problem polegał na tym, że SSH używało SSH do zdalnego sterowania na maszynę wirtualną z systemem Linux i nie miało skonfigurowanego X-Servera w systemie Windows i nie miało włączonego przekazywania X11. Po wyjaśnieniu tego OP nie powinien mieć żadnych problemów z uruchomieniem Eclipse.


Zaktualizowałem swoje pytanie rzeczywistymi informacjami o wersji. Daj mi znać, jeśli nadal będę potrzebować aktualizacji?
— SSH,

Jest wersja 3.8 dla GTK, więc aktualizacja oprogramowania do najnowszej wersji nie zaszkodzi.
— Jeight

3
Rozumiem ... Ale kiedy to zaktualizowałem, właśnie to dostałem - sudo apt-get install gtk Reading package lists... Done Building dependency tree Reading state information... Done E: Unable to locate package gtk . Nie jest w stanie jakoś zlokalizować pakietu gtk ... Masz pomysł?
— SSH,

Co dostajesz, kiedy to robisz sudo apt-cache search gtk?
— Jeight

Robił wiele rzeczy ... I cała masa rzeczy została wydrukowana na moim ekranie .. Nie wiesz, co może Cię zainteresować?
— SSH,

10

Jest to również błąd, który pojawia się, gdy próbujesz uruchomić Eclipse przez ssh bez przekazywania dostępu do X. To znaczy, że zapomniałeś uruchomić ssh -X user@hostlub zapomniał zawierać ForwardX11 yesw swoim ~/.ssh/configwejściem na serwer.

Dodam tę odpowiedź dla każdego, kto może natknąć się na to pytanie z wyszukiwarki Google, nawet jeśli technicznie rzecz biorąc, OP pyta o przypadek maszyny wirtualnej.


@isakbob Dziękuję, to rozwiązało mój problem. Nie mogłem znaleźć odpowiedzi nigdzie indziej. Może chcesz opublikować jako odpowiedź.
— Matthew

@Matthew Nie sądzę, że mój komentarz uzasadnia inną odpowiedź. Właśnie edytowałem tę odpowiedź, aby dołączyć mój komentarz.
— isakbob

@ isakbob już nie wygląda na to, że już tam jest
— Matthew

@Matthew ¯ \ _ (ツ) _ / ¯ zgadnij, że to wtedy jest zdrowy rozsądek.
— isakbob

6

Ponadto może to być również spowodowane tym, że aplikacja nie ma prawidłowej autoryzacji do wyświetlania na pilocie X server. Zwykle dzieje się tak, gdy zalogujesz się do sesji ssh jako jeden użytkownik i wykonasz polecenie jako inny użytkownik, aby uruchomić aplikację GUI. Na przykład po zalogowaniu się do zdalnego serwera i wykonaniu sudopolecenia. Aby rozwiązać ten problem, musisz uzyskać magiczny plik cookie logującego się użytkownika i zaimportować plik cookie dla użytkownika uruchamiającego polecenie.

Jako użytkownik logujący się na serwerze, który ma uprawnienia do wyświetlania X, uruchom:

xauth extract cookie_file $DISPLAY

Następnie, gdy użytkownik próbuje uruchomić GUI: xauthscalićcookie_file

Po zaimportowaniu pliku cookie do użytkownika. Xauthorityplik, powinieneś być w stanie wykonać GUI.


Możliwe jest również, że host w ogóle nie ma wyświetlacza. W takim przypadku możesz zainstalować Xvfb i utworzyć wirtualny bufor ramki za pomocą komend: Xvfb :1 -ac -screen 0 1024x768x8 & export DISPLAY=:1 source
— Staszek

3

Wystąpił podobny problem podczas instalowania programu IBM Installation Manager (IBMIM) na CentOS 6.x i obejrzałem ten problem, instalując kilka pakietów, które były przyczyną tego samego błędu:

$ sudo /opt/IBM/InstallationManager/eclipse/IBMIM \
       -record /root/was8nd_v85_install.xml \
       -skipInstall /tmp/was8nd

00:00.46 ERROR [main] org.eclipse.equinox.log.internal.ExtendedLogReaderServiceFactory safeLogged
  Application error
  org.eclipse.swt.SWTError: No more handles [gtk_init_check() failed]
  org.eclipse.swt.SWTError: No more handles [gtk_init_check() failed]
    at org.eclipse.swt.SWT.error(SWT.java:4387)
    at org.eclipse.swt.widgets.Display.createDisplay(Display.java:913)
    at org.eclipse.swt.widgets.Display.create(Display.java:899)
    at org.eclipse.swt.graphics.Device.<init>(Device.java:156)
    ...
IBMIM:
An error has occurred. See the log file
/opt/IBM/InstallationManager/eclipse/configuration/1457978953529.log.

Rozwiązanie część 1 - brakujące pakiety

$ sudo yum install \
   gtk2            \
   libXtst         \
   gnome-desktop   \
   xorg-x11-xauth  \
   dejavu-lgc-sans-fonts 

Coś podobnego do tego można było również zrobić na Ubuntu.

Rozwiązanie część 2 - Xauth

Innym problemem, który się pojawi, jest próba uruchomienia instalatora IBMIM (opartego na Eclipse) jako użytkownik root za pośrednictwem sudo. Gdy to zrobisz, otrzymasz powyższy błąd aplikacji z instalatora:

00:00.46 ERROR [main] org.eclipse.equinox.log.internal.ExtendedLogReaderServiceFactory safeLogged
  Application error
  org.eclipse.swt.SWTError: No more handles [gtk_init_check() failed]
  org.eclipse.swt.SWTError: No more handles [gtk_init_check() failed]

Aby obejść ten problem, musisz użyć xauth addpierwszego zalogowanego użytkownika jako $HOME/.Xauthoritypliku roota .

Jako użytkownik 1:

$ xauth list
ip-10-10-10-10.us-west-1.compute.internal/unix:10  MIT-MAGIC-COOKIE-1  6902e8c245a01ca50XXXXXXXXXXXXXXXX

Następnie jako root:

$ xauth add ip-10-10-10-10.us-west-1.compute.internal/unix:10  MIT-MAGIC-COOKIE-1  6902e8c245a01ca50XXXXXXXXXXXXXXXX
xauth:  creating new authority file /root/.Xauthority

$ xauth list
ip-10-10-10-10.us-west-1.compute.internal/unix:10  MIT-MAGIC-COOKIE-1  6902e8c245a01ca50XXXXXXXXXXXXXXXX

Referencje


0

Jeśli używasz Linuksa z Gnome:

Rozpocznij gnoma sesją Xorg:

Po kliknięciu swojej nazwy użytkownika w GDM (greeter / manager logowania), kliknij swoją nazwę użytkownika, a przed wprowadzeniem hasła kliknij mały sprzęt i wybierz Gnome z Xorg, a następnie wprowadź hasło


-1

Po wyłączeniu IPV6 na zdalnym komputerze otrzymałem komunikat org.eclipse.swt.SWTError: No more handles [gtk_init_check() failed]przy użyciu polecenia ssh -X ub-dev /opt/eclipse/eclipse. Aby naprawić Ubuntu 14.04, dodałem wiersz AddressFamily inetdo pliku /etc/ssh/sshd_configi ponownie uruchomiłem ssh sudo service ssh restart.

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.