org.eclipse.swt.SWTError:在ubuntu上运行eclipse时,没有更多的句柄[gtk_init_check()失败]


24

我试图用下面的命令在ubuntu VM中打开eclipse。一旦这样做,我总是会收到以下异常-

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.

因此,当我转到该特定的日志文件时,这就是我在日志中看到的内容-

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)

有人知道发生了什么事吗?或者我应该怎么做才能解决此问题?谢谢..

更新:-

下面的版本详细信息-

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

奇怪的是,我在尝试运行dbeaver时遇到了类似的问题。我必须先退出tmux才能正常工作。奇数
火柴

Answers:


4

我认为这是gtk的问题。检查已安装的版本。

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

如果尚未安装或版本不正确,请执行sudo apt-get install gtksudo apt-get update

编辑

问题在于SSH正在使用SSH远程访问Linux VM,并且在Windows上未设置X服务器,并且未启用X11转发。弄清楚之后,OP在运行Eclipse时应该没有任何问题。


我用实际的版本信息更新了问题。让我知道是否仍然需要更新?
SSH

好了,那里有一个用于gtk的3.8版本,因此更新到最新版本不会太麻烦。
13年

3
我明白了。但是当我更新它时,这就是我得到的sudo apt-get install gtk Reading package lists... Done Building dependency tree Reading state information... Done E: Unable to locate package gtk 。无法以某种方式找到gtk软件包。
SSH

当您执行操作时会得到什么sudo apt-cache search gtk
13年

它做了很多事情。.整堆东西都打印在了我的屏幕上..不知道您可能对什么感兴趣?
SSH

10

如果您尝试通过ssh启动Eclipse而不转发X访问,也会遇到此错误。即,您忘记运行ssh -X user@host或忘记包含ForwardX11 yes~/.ssh/config服务器的条目中。

我正在为可能从Google搜索中偶然发现此问题的任何人添加此答案,即使从技术上讲OP也在询问VM案例。


@isakbob谢谢,这解决了我的问题。在其他任何地方都找不到答案。可能希望将其发布为答案。
马修

@Matthew我认为我的评论不值得另一个答案。我刚刚编辑了此答案以包含我的评论。
isakbob

6

另外,这也可能是由于应用程序没有正确的授权显示给遥控器而引起的X server。当您以一个用户身份登录ssh会话并以另一个用户身份执行命令来启动GUI应用程序时,通常会发生这种情况。例如,当您登录到远程服务器并执行sudo命令时。要解决此问题,您将需要获取登录用户的魔术cookie,并为运行该命令的用户导入cookie。

当用户登录到有权显示为的服务器时X,运行:

xauth extract cookie_file $DISPLAY

然后,当用户尝试运行gui时: xauthmergecookie_file

一旦将cookie导入到用户的中。Xauthority文件,您应该能够执行GUI。


也有可能主机根本不显示。在这种情况下,您可以安装Xvfb,并使用以下命令创建虚拟帧缓冲区:Xvfb :1 -ac -screen 0 1024x768x8 & export DISPLAY=:1 source
Staszek

3

我在CentOS 6.x上安装IBM Installation Manager(IBMIM)时遇到了类似的问题,并通过安装几个导致此相同错误的软件包来解决了该问题:

$ 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.

解决方案第1部分-缺少软件包

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

在Ubuntu上也可以完成类似的操作。

解决方案第2部分-xauth

将会出现的另一个问题是您试图通过sudo作为root用户运行IBMIM安装程序(基于Eclipse)。执行此操作时,您将从安装程序中收到上述应用程序错误:

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]

要解决此问题,您将需要用于xauth add将您登录的初始用户添加到root用户的$HOME/.Xauthority文件中。

作为用户1:

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

然后以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

参考文献


0

如果您使用Gnome在Linux上运行:

通过Xorg会话启动Gnome:

在GDM(迎宾员/登录管理器)中单击您的用户名后,单击您的用户名,然后输入密码,然后单击小齿轮并选择带有Xorg的Gnome,然后输入密码


-1

在远程计算机上禁用IPV6后org.eclipse.swt.SWTError: No more handles [gtk_init_check() failed],使用command时收到消息ssh -X ub-dev /opt/eclipse/eclipse。为了在Ubuntu 14.04上修复,我AddressFamily inet在文件中添加了行,/etc/ssh/sshd_config然后重新启动ssh sudo service ssh restart

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.