그래픽 환경이 없는 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)

그러나 "주 사용자"(우분투 destkop에 로그인하는 데 사용한 것과 동일)를 사용하여 콘솔에서 Eclipse를 열면 Eclipse가 완벽하게 열립니다.

그렇기 때문에 두 사용자 사이에 존재하는 차이점으로 인해 이 작업을 수행할 수 없다고 생각하고 문제는 다음과 같습니다.hduser그래픽 환경에서 사용하기에 적합한 구성이 없습니다. 내가 맞나요? Eclipse를 열 수 있도록 hduser를 수정할 수 있습니까?

답변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 

이와 유사한 작업이 우분투에서도 수행될 수 있습니다.

솔루션 파트 2 - xauth

발생하는 또 다른 문제는 sudo를 통해 루트 사용자로 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이 문제를 해결하려면 로그인한 초기 사용자를 루트 파일에 추가하는 데 사용해야 합니다 $HOME/.Xauthority.

user1로서:

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

그런 다음 루트로:

$ 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

참고자료

관련 정보