SSH*_*SSH 26 linux ubuntu eclipse
我试图使用以下命令在我的 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.
Run Code Online (Sandbox Code Playgroud)
所以当我去那个特定的日志文件时,这就是我在日志中看到的 -
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)
Run Code Online (Sandbox Code Playgroud)
有谁知道发生了什么错误?或者我应该怎么做才能解决这个问题?谢谢..
更新:-
版本详情如下 -
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
Run Code Online (Sandbox Code Playgroud)
小智 10
如果您尝试通过 ssh 启动 Eclipse 而没有转发 X 访问,这也是您得到的错误。即,您忘记运行ssh -X user@host或忘记包含ForwardX11 yes在您~/.ssh/config的服务器条目中。
我正在为可能从 Google 搜索中偶然发现这个问题的任何人添加这个答案,即使从技术上讲,OP 正在询问 VM 案例。
小智 6
此外,这也可能是由于应用程序没有正确的授权来显示给遥控器X server。当您以一个用户身份登录 ssh 会话并以另一个用户身份执行命令以启动 GUI 应用程序时,通常会发生这种情况。例如,当您登录远程服务器并执行sudo命令时。要解决此问题,您需要获取登录用户的magic cookie 并为运行该命令的用户导入cookie。
作为登录到有权显示的服务器的用户X,运行:
xauth extract cookie_file $DISPLAY
Run Code Online (Sandbox Code Playgroud)
然后作为用户尝试运行 gui:
xauthmergecookie_file
一旦 cookie 被导入到用户的 . Xauthority文件,您应该能够执行 GUI。
我认为这是gtk的问题。检查安装的版本。
dpkg -l libgtk[0-9]* | grep ^i
如果未安装或版本不正确,则执行 asudo apt-get install gtk或执行sudo apt-get update.
编辑
问题在于 SSH 使用 SSH 远程访问 Linux VM,并且没有在 Windows 上设置 X-Server,也没有启用 X11 转发。理顺之后,OP 在运行 Eclipse 时应该没有任何问题。
我在 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.
Run Code Online (Sandbox Code Playgroud)
$ sudo yum install \
gtk2 \
libXtst \
gnome-desktop \
xorg-x11-xauth \
dejavu-lgc-sans-fonts
Run Code Online (Sandbox Code Playgroud)
类似的事情也可以在 Ubuntu 上完成。
出现的另一个问题是您尝试通过 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]
Run Code Online (Sandbox Code Playgroud)
要解决此问题,您需要将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
Run Code Online (Sandbox Code Playgroud)
然后以 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
Run Code Online (Sandbox Code Playgroud)