다음 명령을 사용하여 우분투 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.
따라서 해당 특정 로그 파일로 이동하면 로그에 다음과 같은 내용이 표시됩니다.
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)
무엇이 잘못되고 있는지 아는 사람이 있나요? 아니면 이 문제를 해결하려면 어떻게 해야 합니까? 감사해요..
고쳐 쓰다:-
버전 세부정보는 다음과 같습니다 -
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
답변1
X 액세스를 전달하지 않고 ssh를 통해 Eclipse를 시작하려고 시도하는 경우에도 이 오류가 발생할 수 있습니다. 즉, 실행하는 것을 잊었 ssh -X user@host
거나 서버 항목 ForwardX11 yes
에 포함하는 것을 잊었습니다.~/.ssh/config
기술적으로 OP가 VM 사례에 대해 질문하고 있음에도 불구하고 Google 검색에서 이 질문을 우연히 발견할 수 있는 모든 사람을 위해 이 답변을 추가하고 있습니다.
답변2
내 생각엔 이것이 gtk의 문제인 것 같다. 어떤 버전이 설치되어 있는지 확인하세요.
dpkg -l libgtk[0-9]* | grep ^i
설치되지 않았거나 버전이 잘못된 경우 sudo apt-get install gtk
또는 를 수행하십시오 sudo apt-get update
.
편집하다
문제는 SSH를 사용하여 Linux VM에 원격으로 액세스하고 있는데 Windows에 X-Server가 설정되어 있지 않고 X11 전달이 활성화되어 있지 않다는 것입니다. 이 문제가 해결되면 OP에서 Eclipse를 실행하는 데 문제가 없어야 합니다.
답변3
또한 이 문제는 응용 프로그램이 원격 장치에 표시할 수 있는 올바른 권한을 갖고 있지 않기 때문에 발생할 수도 있습니다 X server
. 이는 일반적으로 한 사용자로 ssh 세션에 로그인하고 다른 사용자로 명령을 실행하여 GUI 응용 프로그램을 시작할 때 발생합니다. 예를 들어, 원격 서버에 로그인하여 sudo
명령을 실행하는 경우입니다. 이 문제를 해결하려면 로그인한 사용자의 매직 쿠키를 가져와서 명령을 실행하는 사용자의 쿠키를 가져와야 합니다.
사용자가 표시 권한이 있는 서버에 로그인하면 다음을 X
실행합니다.
xauth extract cookie_file $DISPLAY
그런 다음 사용자가 gui를 실행하려고 하면
xauth
다음과 같이 병합합니다 .cookie_file
쿠키를 사용자의 .file 로 가져오면 Xauthority
GUI를 실행할 수 있습니다.
답변4
Linux에서 Gnome을 실행하는 경우:
Xorg 세션을 사용하여 Gnome을 시작하십시오:
GDM(Welcome/Login Manager)에서 사용자 이름을 클릭한 후 사용자 이름을 클릭하고 비밀번호를 입력하기 전에 작은 기어를 클릭한 후 Gnome with Xorg를 선택하고 비밀번호를 입력하세요.