7 nov

Erro ao executar aplicação via ssh -X “Error: Can’t open display:”

Muitos já se depararam com uma mensagem dessas ao tentar abrir uma aplicação gráfica pelo terminal via ssh.

anjos:~ # ssh -X root@pitinga
Password:
Have a lot of fun…
pitinga:~ # xclock
Error: Can’t open display:

Numa busca rápida pelo google vocêc encontra várias “soluções” que variam desde permissões dos arquivos do /etc, instalação do pacote xorg-x11-xauth, criação do arquivo .Xauthority no home do usuário, habilitar e desabilitar o controle de acesso com xhost + e xhost -, setar variável $DISPLAY com o comando export e por aí vai…

Falando em variável $DISPLAY, olha só o conteúdo dela (e mesmo alterando não consigo executar os aplicativos).

pitinga:~ # echo “->${DISPLAY}<-" -> <-

Mas e se nenhuma dessas soluções der certo?
Bem, comigo não resolveu e vou mostrar como acertei a configuração num OpenSuse 12.1 e um Debian 6.0.

Dei uma olhada no arquivo de log para obter mais informações. Destaquei apenas a mensagem de log que nos mostra o erro no ssh.

pitinga:~ # tail -f /var/log/messages

Nov 7 14:02:52 sshd[992]: error: Failed to allocate internet-domain X11 display socket.

Encontrei referências em http://bugs.debian.org e http://bugs.opensolaris.org (textos retirados de outros sites, pois a Oracle já não o mantém) sobre um problema com o openssh-server 5.5 quando o protocolo ipv6 era desabilitado.
Solução rápida, habilitar o ipv6 e pronto, realmente consegui executar minhas aplicações gráficas pelo terminal.

anjos:~ # ssh -X root@pitinga
Password:
Have a lot of fun…
/usr/bin/xauth: file /root/.Xauthority does not exist
pitinga:~ # echo $DISPLAY
localhost:10.0
pitinga:~ # xclock

Reparem que assim que realizo o ssh já recebo a informação de que o arquivo .Xauthority não existe, ou melhor, não existia porque o sistema acabou de criá-lo. Além disso, a variável $DISPLAY agora tem informação.

pitinga:~ # ls -la /root/
total 68
drwx—— 12 root root 4096 Nov 7 14:02 .
drwxr-xr-x 26 root root 4096 Nov 6 17:38 ..
-rw——- 1 root root 61 Nov 7 13:18 .Xauthority
-rw——- 1 root root 7407 Nov 7 14:02 .bash_history
drwxr-xr-x 5 root root 4096 Nov 7 11:27 .config
drwx—— 3 root root 4096 Sep 7 04:03 .dbus
drwx—— 2 root root 4096 Nov 7 11:27 .gconf
drwx—— 2 root root 4096 Sep 7 11:43 .gnupg
drwxr-xr-x 2 root root 4096 Sep 7 03:40 .kbd
drwxr-xr-x 3 root root 4096 Sep 7 04:03 .kde4
drwxr-xr-x 3 root root 4096 Sep 7 04:01 .kdm
drwx—— 2 root root 4096 Sep 7 10:36 .ssh
-rw——- 1 root root 4143 Nov 7 14:02 .viminfo
drwxr-xr-x 2 root root 4096 Oct 25 2011 bin
drwxr-xr-x 4 root root 4096 Sep 6 23:17 inst-sys
pitinga:~ #

Problema resolvido: Sim
Da maneira que eu queria: Não

Costumo desabilitar o protocolo ipv6 das máquinas onde sei que isso não será usado. Já tive algumas dores de cabeça por ele estar ativo, até escrevi um post falando sobre isso “Desabilitando módulos indesejáveis”.

Tem duas maneiras de utilizar o X11Forwarding do SSH sem problema e manter o ipv6 desativado, lembrando que as modificações foram feitas na máquina acessada.

-> Incluir o parâmetro “-4” na variável SSH_OPTS do arquivo /etc/sysconfig/ssh (OpenSuse) ou /etc/default/ssh (Debian) e reiniciar o serviço ssh.

OU

-> Descomentar o item #AddressFamily any no arquivo /etc/ssh/sshd_config, alterá-lo para AddressFamily inet e reiniciar o serviço ssh.

Espero que tenham gostado e até a próxima!

Tags: , ,

Carol Souza

Caroline de Souza Vieira, mais conhecida como Carol Souza, formada em Análise de Sistemas, administradora de redes Linux, incentivadora do uso de Software Livre e usuária OpenSuse. Membro atuante da Comunidade Software Livre no Rio de Janeiro, colaboradora voluntária de eventos como Hack’n Rio 2011, IV FSLDC e DFDRJ, blogueira em sites como Cotidiano Linux, Gmigos, Mulheres na Tecnologia e CooperaTI além de manter o próprio blog Carolinux. Sonhadora, amiga, determinada, criativa e movida à desafios. Uma “padawan” amante de tecnologia, aspirante a corredora, ritmista e blogueira.
  • Elton

    tamém usando
    $su –
    funciona

    • carolinux

      Não entendi o seu comentário.
      O que vc quis dizer com $su – funciona?

  • Elton

    É isso ai: digite

    #su –

    • carolinux

      Aonde isso?
      Vc está falando para virar root, eu entendi, mas pra que?
      Onde isso resolve o problema do ssh -X com o IPv6 desabilitado?