グラフィカル環境を持たない 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

発生するもう 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]

この問題を回避するには、ログインした最初のユーザーを root のファイルxauth addに追加する必要があります。$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

参考文献

関連情報