it-swarm-ja.com

グラフィカル環境(コンソールから作成)を持たない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 destkopへのログインに使用したものと同じ)を使用してコンソールからEclipseを開くと、Eclipseは完全に正常に開きます。

そのため、両方のユーザーの間に存在する違いではこれができないと思われます。問題は、hduserがグラフィカル環境で使用するための適切な構成を持っていないことだと思います。私は正しいですか? Eclipseを開くことができるようにhduserを変更できますか?

3
chomp

次のコマンドを実行してみてください。

export DISPLAY=:0

Eclipseを実行する前に、使用するXディスプレイを確実に認識します。

それが機能しない場合、このユーザーはウィンドウマネージャーの構成ファイルも必要になる場合があります。したがって、新しいユーザーを追加するためのGUIルートを実行するだけで([設定]→[ユーザーとグループ]の下にあると思います)、すべてのデフォルト構成が読み込まれます。

3

CentOS6.xにIBMInstallation 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

発生するもう1つの問題は、IBMIMインストーラー(Eclipseベース)をSudo経由でrootユーザーとして実行しようとしていることです。これを行うと、インストーラーから上記のアプリケーションエラーが発生します。

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ファイルに追加する必要があります。

User1として:

$ 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

参考文献

1
slm