Abra o Eclipse com um usuário Linux que não possui ambiente gráfico (criado a partir do console)

Abra o Eclipse com um usuário Linux que não possui ambiente gráfico (criado a partir do console)

Criei um usuário do console no meu Ubuntu Destkop 14.04 LTS, fazendo o seguinte:

sudo addgroup hadoop
sudo adduser --ingroup hadoop hduser

Eu usei esse usuário para fazer todo tipo de coisa, porque estou usando-o para fazer algumas coisas de programação relacionadas ao hadoop, então sei que funciona bem,sempre usando-o no console e executando coisas sem uma GUI. E eu quero abrir, com esse usuário, um Eclipse (Luna), então faço isso:

su hduser
cd /opt/eclipse
./eclipse

Mas isso me gera um erro:

!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)

Mas, se eu abrir o Eclipse a partir do console usando meu "usuário principal" (o mesmo que usei para fazer login no meu destkop do Ubuntu), o Eclipse abrirá perfeitamente.

É por isso que suspeito que a diferença existente entre os dois usuários não me permite fazer isso, e suspeito que o problema seja esseusuário hdnão possui as configurações adequadas para ser utilizado em ambiente gráfico. Estou certo? O hduser pode ser modificado de uma forma que me permita abrir o Eclipse?

Responder1

Tente executar este comando:

export DISPLAY=:0

Ele garante que sabe qual display X usar antes de executar o Eclipse.

Se isso não funcionar, este usuário também pode precisar de arquivos de configuração para um gerenciador de janelas. Então basta fazer a rota GUI para adicionar um novo usuário (acredito que esteja emPreferências → Usuários e Grupos) para que todas as configurações padrão sejam carregadas.

Responder2

Encontrei um problema semelhante ao instalar o IBM Installation Manager (IBMIM) no CentOS 6.x e resolvi o problema instalando vários pacotes que foram a causa deste erro idêntico:

$ 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.

Solução parte 1 – pacotes ausentes

$ sudo yum install \
   gtk2            \
   libXtst         \
   gnome-desktop   \
   xorg-x11-xauth  \
   dejavu-lgc-sans-fonts 

Algo semelhante a isso também poderia ter sido feito no Ubuntu.

Solução parte 2 - xauth

O outro problema que surgirá é que você está tentando executar o instalador IBMIM (baseado em Eclipse) como usuário root via sudo. Ao fazer isso, você receberá o erro de aplicativo acima do instalador:

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]

Para contornar isso, você precisará usar xauth addpara adicionar o usuário inicial com o qual você efetuou login ao arquivo root $HOME/.Xauthority.

Como usuário1:

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

Então como 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

Referências

informação relacionada