使用没有图形环境(从控制台创建)的 Linux 用户打开 eclipse

使用没有图形环境(从控制台创建)的 Linux 用户打开 eclipse

我在 Ubuntu Destkop 14.04 LTS 中的控制台创建了一个用户,执行以下操作:

sudo addgroup hadoop
sudo adduser --ingroup hadoop hduser

我使用该用户来做各种事情,因为我用它来做一些与 Hadoop 相关的编程工作,所以我知道它运行良好,总是从控制台使用它并在没有 GUI 的情况下执行东西。我想用这个用户打开 Eclipse (Luna),因此我执行以下操作:

su hduser
cd /opt/eclipse
./eclipse

但它引发了一个错误:

!MESSAGE Application error
!STACK 1
org.eclipse.swt.SWTError: No more handles [gtk_init_check() failed]
    at org.eclipse.swt.SWT.error(SWT.java:4467)
    at org.eclipse.swt.widgets.Display.createDisplay(Display.java:934)
    at org.eclipse.swt.widgets.Display.create(Display.java:918)
    at org.eclipse.swt.graphics.Device.<init>(Device.java:157)
    at org.eclipse.swt.widgets.Display.<init>(Display.java:514)        
    at org.eclipse.swt.widgets.Display.<init>(Display.java:505)
    at org.eclipse.ui.internal.Workbench.createDisplay(Workbench.java:732)
    at org.eclipse.ui.PlatformUI.createDisplay(PlatformUI.java:162)
    at org.eclipse.ui.internal.ide.application.IDEApplication.createDisplay$
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEAppl$
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHand$
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runAppl$
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(E$
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.j$
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.j$
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl$
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcce$
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1465)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1438)

但是,如果我使用我的“主用户”(与我用于登录我的 ubuntu 桌面的用户相同)从控制台打开 eclipse,那么 eclipse 就可以完美打开。

这就是为什么我怀疑两个用户之间存在的差异不允许我这样做,我怀疑问题在于hd用户没有适合在图形环境中使用的正确配置。我说得对吗?可以修改 hduser 以便让我打开 eclipse 吗?

答案1

尝试执行这个命令:

export DISPLAY=:0

它确保在执行 Eclipse 之前知道要使用哪个 X 显示器。

如果这不起作用,该用户可能还需要窗口管理器的配置文件。因此,只需执行添加新用户的 GUI 路径(我相信它位于首选项 → 用户和组),这样所有的默认配置都会被加载。

答案2

我在 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

参考

相关内容