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.