2011-07-13 18:13:00 +0000 2011-07-13 18:13:00 +0000
117
117

Como posso corrigir um erro "cannot open display" quando abro um programa X após o ssh'ing com o X11 forwarding activado?

Após lançar a aplicação X11 (XQuartz 2.3.6, xorg-server 1.4.2-apple56) no meu Mac (OS X 10.6.8), abrir um terminal no X11 e executar o xhost +, eu então ssh -Y para o meu Ubuntu 10.04 VM (a executar no VMware Fusion). Quando corro no gedit .bashrc (por exemplo), recebo:

(gedit:9510): Gtk-WARNING **: cannot open display:

set | grep DISPLAY não devolve nada.

Mas se eu ssh -Y na minha máquina Ubuntu 11.04, gedit .bashrc funciona. echo $DISPLAY devolve “localhost:10.0”.

Eu tentei export DISPLAY=localhost:10.0 enquanto entrava no meu VM e depois corria gedit .bashrc, mas recebo:

(gedit:9625): Gtk-WARNING **: cannot open display: localhost:10.0

O que poderia ser diferente na configuração das duas máquinas Ubuntu diferentes que explicaria porque uma funciona e a outra não?

Update: Como sugerido por Zoredache no comentário abaixo, eu corri sudo apt-get install xbase-clients, mas continuo a ter o mesmo problema.

Respostas (14)

62
62
62
2012-02-21 08:47:03 +0000

A partir de xhost+ : Como corrigir o erro “Cannot Open Display” durante o lançamento da GUI no servidor remoto :

Resposta : Pode corrigir o erro “Cannot Open Display” seguindo o procedimento xhost mencionado neste artigo.

Permitir que os clientes se liguem a partir de qualquer anfitrião utilizando xhost+

Executar o seguinte comando para desactivar o controlo de acesso, através do qual pode permitir que os clientes se liguem a partir de qualquer anfitrião.

$ xhost +

controlo de acesso desactivado, os clientes podem ligar-se a partir de qualquer anfitrião

Enable X11 forwarding

Enquanto faz ssh use a opção -X para activar o reencaminhamento X11.

$ ssh username@hostname -X

Habilitar reencaminhamento X11 fiável, utilizando a opção -Y,

$ ssh username@hostname -Y

Abrir aplicações GUI nesse anfitrião

Após abrir a ligação ssh ao anfitrião remoto como explicado acima, pode abrir qualquer aplicação GUI que a abra sem qualquer problema.

Se ainda assim obtiver o erro “cannot open display”, defina a variável DISPLAY como mostrado abaixo.

$ export DISPLAY='IP:0.0'

Nota: IP é o IP da estação de trabalho local onde pretende que a aplicação GUI seja mostrada.

49
49
49
2011-07-13 18:54:50 +0000

Verifique o sshd_config do servidor (normalmente /etc/ssh/sshd_config), e certifique-se que a opção X11Forwarding está activada com a linha

X11Forwarding yes

Se o X11Forwarding não estiver especificado, o predefinido é não nas máquinas Debian que tenho disponíveis para verificar.

18
18
18
2012-06-29 20:44:03 +0000

Tive este problema quando entrei numa VM Ubuntu do Mac OS X também – por alguma razão não parece gostar de ‘localhost’ na variável display. Então configure o IP manualmente, como sugere a Harrymc:

export DISPLAY="127.0.0.1:10.0"

Então os programas X11 devem ficar bem. Não parece ser necessário dizer ao SO que o localhost e 127.0.0.1 são equivalentes, mas funciona, pelo menos.

14
14
14
2012-10-22 07:59:02 +0000

Eu tinha este problema com o meu servidor CentOS KVM, faltava-me o programa “xauth”.

9
9
9
2014-10-17 08:06:53 +0000

Se tiver este problema após algum tempo quando correr com -X arg. ou apenas ForwardX11 em /etc/ssh/ssh_config, então corra $ ssh username@hostname -Y, para activar trusted X11 forwarding , não sei a causa exacta mas suponho que com -X algumas funcionalidades expiram após algum tempo, provavelmente para aumentar a segurança.

Aqui está o que encontrei online :

Se utilizar ssh -X remotemachine a máquina remota é tratada como um cliente não confiável. Então o seu cliente local envia um comando para a máquina remota e recebe a saída gráfica. Se o seu comando violar algumas definições de segurança receberá um erro.

Mas se utilizar o ssh -Y remotemachine a máquina remota é tratada como um cliente de confiança. Esta última opção pode abrir problemas de segurança. Porque outro cliente gráfico (X11) pode farejar dados da máquina remota (fazer capturas de ecrã, fazer keylogging e outras coisas desagradáveis) e até é possível alterar esses dados.

Se quiser saber mais sobre essas coisas sugiro que leia a manpage Xsecurity ou a especificação da extensão X Security. Além disso você pode verificar as opções ForwardX11 e ForwardX11Trusted no seu /etc/ssh/ssh_config.

fontes:

6
6
6
2017-08-30 11:36:06 +0000

Só testado no meu Mac, outros sistemas podem ficar bem :

  1. Permitir aos clientes ligarem-se a partir de qualquer anfitrião usando xhost+

$ xhost +

  1. Deverá ter um ambiente que suporte o display X11

[Sistema Mac] Instalar X11 para mac https://www.xquartz.org/

  1. Deverá deixar o seu servidor ssh encaminhar x11 display

actualizar /etc/ssh/sshd_config e definir X11Forwarding yes, depois reiniciar o seu servidor ssh

  1. Deverá deixar a sua sessão ssh encaminhar x11 display com o parâmetro -X

$ ssh -X user@ip

  1. Como abrir a aplicação X11 em PyCharm?
  • abra uma sessão ssh que suporte o ecrã X11 (lembre-se de manter esta sessão)
  • execute echo $DISPLAY nessa sessão ssh
  • defina a variável de ambiente DISPLAY para o seu PyCharm
4
4
4
2017-09-01 01:17:28 +0000

Tive de colocar no /etc/ssh/sshd_config o seguinte:

X11UseLocalhost no

Em vez de o definir “sim”. Estranho se a predefinição for “NÃO” Utilizadores que utilizam putty com XMing no Windows. Eu uso ssh direto sobre o Fedora. Ocasionalmente começava a dar-nos

error can't open display localhost

A reinicialização do servidor normalmente corrigi-lo, mas isto é estúpido. Fiz o acima referido, reiniciei o serviço sshd no servidor e pré-conexões novas funcionam bem novamente.

4
4
4
2012-07-10 21:26:59 +0000

Ao executar UXTERM ou XTERM basta emitir

export $DISPLAY

A variável estará lá. Depois é só defini-la e exportá-la.

3
3
3
2019-07-08 17:25:35 +0000

Esta configuração funciona para mim:

Local (64 bit Cygwin no Windows 10) DISPLAY=:0

Server (Amazon EC2 RHEL 7.6) DISPLAY=:10.0

Estas configurações foram encontradas clicando em “X menu de aplicações em :0” na barra de tarefas e seleccionando Ferramentas do Sistema > Terminal

2
2
2
2015-03-18 22:52:32 +0000

Também tive este problema com o Solaris 10 e descobri que o ouvinte não foi criado.

svccfg –s /application/x11/x11-server listprop options/tcp_listen
svccfg –s /application/x11/x11-server setprop options/tcp_listen = true
1
1
1
2017-05-01 04:13:35 +0000

Se você estiver usando o Konsole simplesmente mude para outro emulador de terminal como o Xfce Terminal e tente novamente usando a raiz.

1
1
1
2014-07-15 15:13:51 +0000

No CentOS 6.5, perdi subitamente o acesso aos programas X remotos depois de me ter metido com o /etc/hosts. O mesmo sintoma de variável $DISPLAY vazia (sem ajuda na configuração/exportação manual).

A entrada 127.0.0.1 apontando para o verdadeiro nome da máquina é necessária; de facto a ordem também parece ser relevante (colocar por último & não vai funcionar…)

[root@poseidon /etc]$ cat hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
127.0.0.1 poseidon.mycampus.edu poseidon
1XX.XXX.XXX.208 poseidon.mycampus.edu poseidon

Depois de corrigir isto, xeyes, xclock e outros brinquedos de teste X estão a funcionar novamente, portanto o meu virt-manager necessário também está de novo em linha.

1
1
1
2016-06-10 11:56:04 +0000

Acabei de encontrar um belo soluço na minha configuração que impediu o x encaminhamento: A minha firewall estava a bloquear todas as ligações a partir do local, impedindo assim que o túnel fosse alcançado.

1
1
1
2018-05-30 13:40:40 +0000

terminal aberto $ ssh username@hostname -X

$ ssh username@hostname -Y

$ export DISPLAY='IP:0.0'

export DISPLAY=“127.0.0.1:10.0” tudo deve funcionar.