“Nenhuma variável DISPLAY X11” - o que significa?


102

Estou tentando instalar um aplicativo Java em minha máquina Linux (Slackware).

Recebi o seguinte erro e não o compreendo.

Você poderia me aconselhar como abordar o problema? Obrigado.

Aqui está o que eu obtenho: (vejo que alguma variável X11 DISPLAY precisa ser definida, mas qual valor devo fornecer e como?)

~$ java -jar gate-5.0-beta1-build3048-installer.jar
- ERROR -

java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
java.awt.HeadlessException:
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
at java.awt.GraphicsEnvironment.checkHeadless(Graphic sEnvironment.java:159)
at java.awt.Window.<init>(Window.java:407)
at java.awt.Frame.<init>(Frame.java:402)
at net.sourceforge.mlf.metouia.borders.MetouiaDotsBuf fer.<init>(MetouiaDotsBuffer.java:105)
at net.sourceforge.mlf.metouia.borders.MetouiaDots.<i nit>(MetouiaDots.java:66)
at net.sourceforge.mlf.metouia.borders.MetouiaToolBar Border.<init>(MetouiaToolBarBorder.java:49)
at net.sourceforge.mlf.metouia.MetouiaLookAndFeel.ini tComponentDefaults(MetouiaLookAndFeel.java:241)
at javax.swing.plaf.basic.BasicLookAndFeel.getDefault s(BasicLookAndFeel.java:130)
at javax.swing.plaf.metal.MetalLookAndFeel.getDefault s(MetalLookAndFeel.java:1591)
at javax.swing.UIManager.setLookAndFeel(UIManager.jav a:537)
at javax.swing.UIManager.setLookAndFeel(UIManager.jav a:581)
at com.izforge.izpack.installer.GUIInstaller.loadLook AndFeel(GUIInstaller.java:373)
at com.izforge.izpack.installer.GUIInstaller.<init>(G UIInstaller.java:116)
at sun.reflect.NativeConstructorAccessorImpl.newInsta nce0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInsta nce(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newI nstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Construc tor.java:513)
at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:30
at com.izforge.izpack.installer.Installer.main(Instal ler.java:62)

estou tendo o mesmo problema, funciona perfeitamente no console, mas quando eu uso o eclipse, ele lança a mesma exceção, eu até coloco as linhas de código: Process proc_exporting = Runtime.getRuntime (). exec ("sudo export DISPLAY =: 0.0") ; ainda não funciona
hb.Sara

3
Nenhuma das respostas fornece as informações necessárias para resolver esse problema ao conectar-se a um console remotamente via puTTY. Qualquer resposta que trate de SSH não explica realmente como fazer funcionar. Alguém sabe de uma pergunta que trate disso?

Respostas:


120

Se você estiver na tela principal, então

export DISPLAY=:0.0

ou se você estiver usando csh ou tcsh

setenv DISPLAY :0.0

antes de executar seu aplicativo.

Na verdade, estou surpreso que não seja definido automaticamente. Você está tentando iniciar este aplicativo de um terminal não gráfico? Caso contrário, você modificou o .profile, .login, .bashrc ou .cshrc padrão?

Observe que definir o DISPLAY para: 0.0 pressupõe que você está sentado no display principal, como eu disse, ou pelo menos que o display principal está conectado ao seu ID de usuário. Se não estiver conectado ou se for um ID de usuário diferente, isso falhará.

Se você está vindo de outra máquina, e está na tela principal dessa máquina e ela está executando o X, então você pode usar "ssh -X hostname" para se conectar a esse host, e ssh irá encaminhar a tela X de volta . O ssh também irá certificar-se de que a variável de ambiente DISPLAY está definida corretamente (desde que não seja alterada nos vários arquivos de ponto que mencionei acima). Em uma sessão "ssh -X", a variável de ambiente DISPLAY terá um valor como "localhost: 11.0", que irá apontar para o socket que o ssh está tunelando para sua caixa local.


Oi, muito obrigado, o primeiro funcionou para mim. Sim, estou iniciando de um terminal não gráfico.
user42155

No entanto, parece que ele deseja acessar a tela gráfica. Tenha cuidado para não executá-lo quando o display gráfico não estiver disponível ou se ele pertencer a algum outro ID do usuário.
Paul Tomblin,

3
observe que isso funcionou porque você está / estava no console. se você estivesse em outro terminal, você teria que ter um servidor X em execução no terminal e, em seguida, definir o ambiente para apontar para sua máquina (export DISPLAY = 'hostname of pauls terminal': 0.0 por exemplo)
KevinDTimm

@kevindtimm, ponto bom - vou incorporar as informações de @Mikeage sobre ssh -X em minha resposta.
Paul Tomblin

1
No caso de você precisar executar uma tarefa automatizada que requer conexão a um servidor X, você pode olhar em xvfb, que cria um servidor X virtual. Isso é muito útil para alguns testes em lote ou testes em execução.
Wichert Akkerman

10

Você está executando isso em um ambiente X11? Você pode usar uma janela de terminal, mas deve estar dentro do X (após um login gráfico ou executando startx).

Se você já estiver em um ambiente gráfico, tente exportar DISPLAY =: 0 para shells semelhantes a bash (bash, sh, etc) ou setenv DISPLAY: 0 para shells baseados em shell C (csh, tcsh, etc)

Se você se conectou de outra máquina via SSH, use a opção -X para exibir a interface gráfica na máquina em que está (desde que haja um servidor X em execução lá (como xming para windows e seu Linux X padrão servidor).


Olá, estou executando o startx.
user42155

Ah, certo, Slackware. Ainda é tão simples como quando o usei pela última vez, há 10 anos?
Paul Tomblin

Ele ainda inicializa por padrão no nível de execução 3. Claro, se você disser para iniciar no nível de execução 5, você obterá um menu de login do KDM bonito, supondo que você instalou o KDE.
Adam Jaskiewicz

obrigado! em CentOS e SSH (massa) usado: export DISPLAY=:0
jacktrades

8

você deve habilitar o encaminhamento X11 em seu PuTTy

para fazer isso, abra o PuTTy, vá para Connection => SSH => Tunnels e marque a caixa de seleção Enable X11 forwarding

Também sudo para o servidor e exporte a variável abaixo aqui IP é o IP da sua máquina local

export DISPLAY=10.75.75.75:0.0

insira a descrição da imagem aqui


4

Mais uma coisa que pode ser o problema em um caso semelhante ao descrito - X não é encaminhado e $ DISPLAY não é definido quando o programa 'xauth' não está instalado no lado remoto. Você pode ver que ele procura por ele quando você executa "ssh -Xv ip_address" e, se não for encontrado, falha, o que não é visto a menos que você ative o modo verbose (uma falha IMO). Normalmente você pode encontrar 'xauth' em um pacote com o mesmo nome.


3

Muito Fácil, Tive esse mesmo problema então o que fiz foi baixar e instalar um app que ajudasse na exibição e depois consertou o erro.

Baixe este aplicativo xming:

http://sourceforge.net/project/downloading.php ?

Instale e use as configurações neste link:

http://www.geo.mtu.edu/geoschem/docs/putty_install.html ou siga estas etapas:

Instalando / Configurando PuTTy e Xming

Depois de fazer o download do PuTTy e do Xming para o PC, instale de acordo com as respectivas instruções.

Configurando o Xming

Assim que o Xming estiver instalado, execute o aplicativo chamado 'XLaunch' e verifique se as configurações são as seguintes:

  • selecione as entradas padrão nas janelas Configurações de exibição, clique em próximo
  • clique em Avançar na janela Tipo de Sessão.
  • clique em Avançar na janela Parâmetros adicionais (a caixa de seleção Observe a área de transferência é verdadeira)
  • salve a configuração e clique para terminar.

Configurando PuTTy

Depois de instalar o PuTTy, clique duas vezes no ícone do PuTTy na área de trabalho e configure conforme mostrado:

Isso mostra a criação de um perfil de login e depois salvá-lo.

  • Em ssh -> X11, clique na caixa de seleção para habilitar o encaminhamento X11.
  • na caixa de texto de localização de exibição X, digite localhost: 0,0

salve o perfil e conecte-se remotamente ao servidor para testar.

Felicidades!!!


Inclua as informações essenciais dos links na própria resposta, pois eles podem ficar inativos eventualmente, tornando a resposta inútil.
plamut

2

Há muitas maneiras de fazer isso. Eu fiz algo abaixo conveniente para mim e sempre funciona bem.

  1. Em seu servidor remoto, certifique-se de instalar xorg-x11-xauth, xorg-x11-font-utils, xorg-x11-fonts.
  2. Execute o Xming Server em sua área de trabalho local
  3. No putty, antes do ssh para o servidor, ative o encaminhamento do X11 e defina o local de exibição para localhost: 0.0
  4. No servidor, o arquivo .Xauthority é gerado e observe que a variável DISPLAY já está definida.

    lista $ xauth

    $ xauth add

Para testá-lo, digite xclock ou xeyes

Observação : para trocar de usuário, copie o arquivo .Xauthority para o diretório inicial do respectivo usuário e também exporte a variável DISPLAY desse usuário.


0

Eu tive o mesmo problema no Ubuntu 14.04.01 quando tentei instalar o JDK 8 e o Netbeans se eu iniciar o script dentro de um terminal Byobu (talvez com telas aconteça o mesmo).

Apenas saia do Byobu e (em um terminal gráfico) execute o script.


0

Verificação inicial.

1) Ao exportar o DISPLAY para outra máquina, certifique-se de inserir o comando xhost +nessa máquina. Este comando permite a outra máquina exportar seu DISPLAY nesta máquina. Pode haver restrições de segurança, apenas saiba sobre isso. Precisa verificar ssh -X MachineIPnão exigirá xhost +?

2) Algumas vezes JCONSOLEnão mostra todo o seu processo, pois esses processos JVM podem rodar com outro usuário e você está exportando o DISPLAY com outro usuário. então é melhor seguirCD_DIR>sudo ./jconsole

3) No WAS (WEBSPHERE); jconsole não será capaz de conectar seu processo de servidor java, dessa vez vá até o link e tente conectá-lo. Isso funcionou para mim. Pode ser que esta página esteja inicializando algumas variáveis ​​para permitir que o jconsole se conecte a esse servidor.

Console WAS> Servidores de aplicativos> server1> Definição de processo> Java Virtual Machine


Eu enfrentei o mesmo problema com a máquina AIX (onde a interface de linha de comando está disponível apenas, não há UI DISPLAY). Resolvi instalando

Cliente NX para Windows

Etapa 1: Por meio dessa máquina Windows, conectei-me com a caixa unix onde o console GUI está disponível.
Etapa 2: SSH para a caixa AIX dessa caixa UNIX.
Etapa 3: defina DISPLAY como "export DISPLAY = UNIXMACHINE: NXClientPORTConnectedMentionedOnTitle"
Etapa 4: Agora, se lançarmos qualquer programa que requeira DISPLAY; ele será lançado nesta caixa UNIX.

VNC

Se você instalou o VNC na caixa UNIX onde a exibição está disponível; então o Windows e o NX Client não são necessários. Etapa 1: Use o VNC para se conectar à caixa Unix onde o console GUI está disponível.
Etapa 2: SSH para a caixa AIX dessa caixa UNIX.
Passo 3: defina DISPLAY como "export DISPLAY = UNIXMACHINE: VNCPORT"
Passo 4: Agora, se lançarmos qualquer programa que requeira DISPLAY; ele será lançado nesta caixa UNIX.

OUTRO

Etapa 1: SSH para a caixa AIX dessa caixa UNIX.
Passo 2: defina DISPLAY como "export DISPLAY = UNIXMACHINE: VNCPORT"
Passo 3: Agora se lançarmos qualquer programa que requeira DISPLAY; ele será lançado nesta caixa UNIX.


0

Para aqueles que estão tentando fazer com que um aplicativo X Window funcione no Windows a partir do Linux:

O que funcionou para mim foi configurar o servidor xming na minha máquina Windows, definir a opção de encaminhamento X11 no putty quando me conectar ao host linux e colocar meu endereço IP do Windows com a porta de exibição e, em seguida, a variável de exibição com meu endereço IP do Windows: 0.0

Não se esqueça de adicionar o endereço IP dos hosts linux ao arquivo X0.hosts para garantir que o servidor xming aceite o tráfego daquele host. Levei um tempo para descobrir isso.


-3

Não se esqueça de executar "host +" em sua máquina de exibição "home", e quando você faz o ssh para a máquina, está executando "ssh -x hostname"


14
Eu recomendaria fortemente não usar "xhost +", pois se efetivamente desativa toda a segurança em seu servidor X. O ssh é inteligente o suficiente para usar o xauth para configurar a autenticação X11 automaticamente, então não deve haver necessidade de usar o xhost.
Wichert Akkerman

Deve ser um comentário, não uma postagem. Só porque você não pode comentar, não significa que você deva fazer uma postagem ruim.
Elliot A.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.