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

Elteroooo
fonte

Respostas:

35

Este comando me ajudou a resolver o problema:

export DISPLAY=:0
Maryam Saeidi
fonte
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
Por favor, leia: this stackoverflow.com/questions/20607777/…
Felix Aballi
56

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

Michael-O
fonte
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.

bebbo
fonte
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
15

Acho que você está trabalhando no modo sudo. Verifique o modo de usuário e tente novamente

Harsh V Pillai
fonte
4
Esse também era o meu problema. Parece estranho não poder rodar como root, certo?
javajavajava
Por que não consigo usar o sudo?
Andrea Borgogelli Avveduti
@javajavajava yup
Harsh V Pillai
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>
Puneetsri
fonte
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
grepit
fonte
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

Loknath
fonte
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

N_E
fonte
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

Aleks Tkachenko
fonte
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.

Bercove
fonte
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.

Shashank
fonte
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

Pankaj Kumar Katiyar
fonte
2

Resolvido. Acabei de sair e entrar com o xorg!

Nilesh
fonte
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.

Koti Reddy
fonte
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.

user3016200
fonte
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/

Mohamed ELJ
fonte
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

Naresh A
fonte
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....

David
fonte
0

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

user2945593
fonte
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.

user3132194
fonte
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.

Akshay Maldhure
fonte
0

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

Vinod Ranga
fonte
0

Só não saí do root antes de executar ./studio.sh Tudo pronto.

Praveen Kumar Verma
fonte
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
cwilliamsz
fonte
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.

LMN
fonte
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.

Seff
fonte
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

Easwer AP
fonte
-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
Kwokman Chung
fonte