Java não pode se conectar ao servidor de janela X11 usando 'localhost: 10.0' como o valor da variável DISPLAY


93

Eu tenho um script usando java para conectar para exibir o X11 na porta 10.0 em localhost

mas eu sempre recebo esse erro

java.lang.InternalError: Can't connect to X11 window server using 'localhost:10.0' as the value of the DISPLAY variable.
    at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method)
    at sun.awt.X11GraphicsEnvironment.access$200(X11GraphicsEnvironment.java:62)
    at sun.awt.X11GraphicsEnvironment$1.run(X11GraphicsEnvironment.java:178)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.awt.X11GraphicsEnvironment.<clinit>(X11GraphicsEnvironment.java:142)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:186)
    at java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:82)
    at sun.awt.X11.XToolkit.<clinit>(XToolkit.java:112)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:186)
    at java.awt.Toolkit$2.run(Toolkit.java:849)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:841)
    at ij.io.Opener.openJpegOrGif(Opener.java:367)
    at ij.io.Opener.openImage(Opener.java:220)
    at ij.io.Opener.openImage(Opener.java:249)
    at ij.io.Opener.open(Opener.java:116)
    at ij.IJ.open(IJ.java:1112)
    at ij.macro.Functions.open(Functions.java:2006)
    at ij.macro.Functions.doFunction(Functions.java:129)
    at ij.macro.Interpreter.doStatement(Interpreter.java:205)
    at ij.macro.Interpreter.doBlock(Interpreter.java:515)
    at ij.macro.Interpreter.runUserFunction(Interpreter.java:278)
    at ij.macro.Interpreter.getFactor(Interpreter.java:1200)
    at ij.macro.Interpreter.getTerm(Interpreter.java:1162)
    at ij.macro.Interpreter.getExpression(Interpreter.java:1145)
    at ij.macro.Interpreter.getBooleanExpression(Interpreter.java:881)
    at ij.macro.Interpreter.getLogicalExpression(Interpreter.java:857)
    at ij.macro.Interpreter.getBoolean(Interpreter.java:850)
    at ij.macro.Interpreter.doIf(Interpreter.java:829)
    at ij.macro.Interpreter.doStatement(Interpreter.java:217)
    at ij.macro.Interpreter.doBlock(Interpreter.java:515)
    at ij.macro.Interpreter.doStatement(Interpreter.java:241)
    at ij.macro.Interpreter.doIf(Interpreter.java:831)
    at ij.macro.Interpreter.doStatement(Interpreter.java:217)
    at ij.macro.Interpreter.doStatements(Interpreter.java:195)
    at ij.macro.Interpreter.run(Interpreter.java:99)
    at ij.macro.Interpreter.run(Interpreter.java:65)
    at ij.macro.Interpreter.run(Interpreter.java:75)
    at ij.plugin.Macro_Runner.runMacro(Macro_Runner.java:127)
    at ij.plugin.Macro_Runner.runMacroFile(Macro_Runner.java:112)
    at ij.IJ.runMacroFile(IJ.java:103)
    at ij.ImageJ.main(ImageJ.java:517)

Eu tentei de tudo para resolver este problema como:

export DISPLAY=:10.0
export DISPLAY=localhost:10.0

Eu tentei também a porta 0.0 mas sempre recebo o mesmo erro

depois de tentar xhost

xhost +local:all
xhost:  unable to open display ""
xhost:  unable to open display ":10.0"

como posso consertar isso eu pensei que o servidor X não está rodando então eu tentei startxele diz que está rodando naquela porta

meu sistema é Ubuntu server edition 10.04

Respostas:


35

Este comando me ajudou a resolver o problema:

export DISPLAY=:0

40
unset DISPLAYme ajudou (com export DISPLAY=:0o erroCan't connect to X11 window server using ':0'
beluchin

1
Onde você colocou
Spektakulatius

1
bem em algum momento - não funcionará no Linux, então é bom instalar o Xvfb com o apt e executá-lo em qualquer tela como: Xvfb: 1 e então definir a variável na fase de construção - exportar DISPLAY =: 1 -> isso funciona perfeitamente.
Pankaj Kumar Katiyar


56

Você precisa especificar o -Djava.awt.headless=trueparâmetro no momento da inicialização.


Muito obrigado, mas onde eu tenho que especificar isso exatamente?
Elteroooo

1
Exceção no thread "main" java.awt.He adlessException em java.awt.GraphicsEnvironment.checkHeadless (GraphicsEnvironment.java:1 73)
Elteroooo

Você está executando um gerenciador de segurança? Nesse caso, talvez você precise conceder permissão para.
Michael-O de

1
obrigado, o problema é que o servidor X está rodando em outra porta
Elteroooo

1
O programa do ij.io.Opener.openJpegOrGifsolicitante deseja fazer , podemos adivinhar que provavelmente requer uma GUI. Então, sem cabeça resultaria em outro erro: java.awt.HeadlessException.
Nicolas Raoul

40

Remova a variável DISPLAY

unset DISPLAY

Isso ajuda na maioria dos casos (por exemplo, iniciando servidores de aplicativos ou outras ferramentas baseadas em java) e evita modificar muitas linhas de comando.

Também pode ser confortável adicioná-lo ao .bash_profile para um usuário dedicado de servidor de aplicativos / ferramentas.


1
não me ajudou em nada. Entendi: AWT Não é possível conectar ao servidor de janela X11 usando ...
Pankaj Kumar Katiyar

Se o seu aplicativo usa awt, você deve definir DISPLAY corretamente. Isso é para aplicativos que não usam awt.
bebbo

Ao brincar com isso, certifique-se de reiniciar mobaXterm após adicionar o comando unset em seu arquivo bash. Já que a variável Display será configurada antes e apenas rodar seu arquivo bash não mudará isso.
março


9

No caso de alguém tentar executar os testes de unidade automatizados via maven-surefire-plugin no CI (jenkins, ..) e receber o erro mencionado acima, certifique-se de atualizar a configuração do plugin surefire:

<plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-surefire-plugin</artifactId>
     <version>${maven-surefire-plugin.version}</version>
     <configuration>
            <systemPropertyVariables>
                <java.awt.headless>true</java.awt.headless>
            </systemPropertyVariables>
      </configuration>
</plugin>

1
como fazê-lo no gradle e também como definir o valor da propriedade nele.
Sobhit Sharma

7

Isso vai consertar:

/usr/bin/java -Djava.awt.headless=true $Your_program

Não consertou o meu
Alex Shnyrov

1
Isso funcionou para mim. Obrigado. Estava recebendo o erro porque estou usando poi.
dev4life

6

Para mim, fazer login como -Y em vez de -X funcionou.

Caso você tenha um X11 não confiável, conforme mostrado abaixo, tente a sinalização -Y (se você confiar no host):

Aviso : falha na configuração de encaminhamento X11 não confiável: dados da chave xauth não gerados


4

Depois de vários dias de esforços inúteis para instalar o glassfish no raspberry pi 2 com o fedora 22 sem cabeça, o Below funcionou para mim sem problemas

 unset DISPLAY
java -Djava.awt.headless=true -jar glassfissh-installer-v2ur2-b04-linux.jar

tenho minha ajuda daqui


3

Primeiro: inicie o XQuartz

Segundo: ssh -X user @ ip_address

...: inicie o seu processo

se você executar ssh e iniciar o XQuartz, obterá esse erro


3

Isso resolveu meu problema

xhost +

mas esteja ciente de que xhost +desativa completamente a autenticação e permite que todos acessem todos os aplicativos em sua tela.

xhost +si:localuser:root parece funcionar de forma semelhante com autenticação adequada.


2

Eu estava usando o Xming e recebi um erro semelhante. As seguintes etapas foram executadas para corrigir o problema:

  1. No lançamento do Xming, marque a caixa sem controle de acesso.
  2. No putty execute o seguinte comando: DISPLAY=XXX.XXX.XXX.XX:0.0; export DISPLAY

Substitua XXX.XXX.XXX.XXpelo seu endereço IP.


Estou na mesma configuração, porém não funcionou. Eu precisava adicionar o IP executando X11 no arquivo X0.hosts
Christophe Moine

2

Primeiro faça isso na fase de construção do Jenkins se estiver usando ou definido em / etc / profile:

unset DISPLAY
export DISPLAY=:0

em seguida, defina essa propriedade em código java ou usando maven: -Djava.awt.headless = false


2

Resolvido. Acabei de sair e entrar com o xorg!


1
export DISPLAY =: 0 ou export DISPLAY =: 1 não funcionou para mim. Fazer logoff e logon resolveu para mim.
Optimus

1

Michael-O deu uma abordagem útil para resolver o problema. Outra maneira de resolver isso é iniciar o servidor com o Putty Console.


você pode explicar um pouco mais como isso funcionaria? (Eu nunca usei massa)
mrk

1

No meu caso, não sobrou espaço na minha máquina e enfrentei o mesmo problema. Algumas vezes pode ser a questão do espaço. Verifique o espaço em seu ambiente Linux / Unix e certifique-se de que sua máquina tenha espaço suficiente.


1

Se você está tentando exportar a tela usando su e ainda não funciona. Isto é o que funcionou para mim. Experimente o encaminhamento X11 para usuários sudo.

Conecte o host remoto usando a opção -X com ssh.

# ssh -X root@remote-host

Agora liste o conjunto de coockie para o usuário atual.

# xauth list $DISPLAY
    node01.thegeekdiary.com/unix:10  MIT-MAGIC-COOKIE-1  dacbc5765ec54a1d7115a172147866aa
# echo $DSIPLAY
    localhost:10.0

Mude para outra conta de usuário usando sudo. Adicione o cookie da saída do comando acima para o usuário sudo.

# sudo su - [user]
# xauth add node01.thegeekdiary.com/unix:10  MIT-MAGIC-COOKIE-1  dacbc5765ec54a1d7115a172147866aa

Exporte a exibição da etapa 2 novamente para o usuário sudo. Tente o comando xclock para verificar se os aplicativos cliente x estão funcionando conforme o esperado.

# export DISPLAY=localhost:10.0

fonte: https://www.thegeekdiary.com/how-to-set-x11-forwarding-export-remote-display-for-users-who-switch-accounts-using-sudo/


1

verifique se a variável $ DISPLAY está definida ou não, com o comando abaixo:

echo $ DISPLAY

se a variável de exibição não estiver definida, execute o comando abaixo para definir, (mesmo se estiver definido, você pode ter um abaixo para a sua sessão)

exportar DISPLAY =: 0.0

na massa também tem o local de exibição x como: 0,0



0

Encontro o mesmo erro com você quando executo o comando jconsole remotamente. Quero modificar um parâmetro no jconsole que é executado em um host Linux remoto, posso fazer o login no host usando o secureCRT, o terminal lança essa informação de erro. Felizmente, ao usar o Putty, tudo bem. Esquisito....


0

Se você vir este erro no Hudson, tente remover o diretório .java do seu diretório inicial, pode funcionar para você.


0

Se você iniciar o aplicativo em um servidor remoto enquanto estiver logado por ssh, outra forma seria iniciar o ssh com o -xparâmetro ou adicionar ForwardX11 noseu /etc/ssh/ssh_config. Neste caso, o ssh não criará a variável de ambiente DISPLAY.


0

Se você estiver acionando seu código do Jenkins, habilitar a opção "Iniciar Xvfb antes da compilação e desligá-lo depois" pode ajudar. Isso me ajudou.


0

mude para outro usuário e tente, exceto root. funciona para mim.



0

Para Ubuntu 17.10, instale o buffer de quadro virtual X (xvfb)

apt install xvfb

E adicionou essas linhas ao arquivo / etc / profile ...

# Start the X virtual frame buffer (Xvfb)
if [ -f /usr/X11R6/bin/Xvfb ]; then
/usr/X11R6/bin/Xvfb :1 -screen 0 1366x768x32
fi

# Set the DISPLAY variable for the X virtual frame buffer (Xvfb)
export DISPLAY=localhost:1.0

2
Agora recebo apenas "Exceção no thread" main "java.awt.AWTError: Não é possível conectar ao servidor de janela X11 usando 'localhost: 1.0' como o valor da variável DISPLAY." no Ubuntu 16.04. O binário Xvfb agora parece estar localizado em / usr / bin, não em / usr / X11R6 / bin, mas me mostra "Não foi possível adicionar a tela 0 (EE)".
Chris Jenks

0

No meu caso, esse erro não estava relacionado à porta do DISPLAY. Eu estava tentando carregar um XML no Windchill (um software PLM) e recebi apenas o erro acima no terminal. Em um arquivo de log, encontrei o relatório de que meu arquivo XML estava corrompido . Talvez alguém tenha um problema semelhante e possa usar esta resposta.


0

Meu problema era com o firewall. Desativado temporariamente.

[EDIT] E, o nome do host do servidor estava apontando para outro IP. Defina-o simplesmente como servidor local. strace xclockajudou a depurar este problema.


0

Resolvi esse problema fazendo login usando o Xorg. Por padrão, usei o Wayland. Parece que o Wayland elimina a maioria das falhas de design do Xorg, ele tem seus próprios problemas.insira a descrição da imagem aqui


-1

Para mim, o problema era que o xorg-x11-xauth não estava instalado. Eu instalei e funcionou.

Os pacotes que tenho agora são:

  • libX11-common-1.6.3-2.el6.noarch
  • libX11-1.6.3-2.el6.i686
  • libX11-1.6.3-2.el6.x86_64
  • xorg-x11-drv-ati-firware-7.6.1-2.el6.noarch
  • xorg-x11-xauth-1.0.9-1.el6.x86_64
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.