Erro `Nenhum protocolo especificado` ao executar da máquina remota via ssh

10

Eu tenho um script, simplesmente para executar meu aplicativo gráfico (GUI), como abaixo.

#cat gui.sh
#!/bin/bash 
./gui -display 127.0.0.1:0.0    

Quando o executo da máquina local ( ./gui.sh), ele funciona perfeitamente. Mas quando estou tentando executá-lo da máquina remota via ssh, recebi o seguinte erro.

[root@localhost]# ssh -f 192.168.3.77 "cd /root/Desktop/GUI/ && "./gui.sh""   
No protocol specified  
gdm: cannot connect to X server 192.168.3.77:0.0   
[root@localhost]#    

Não sei, qual protocolo está perguntando ou estou perdendo alguma coisa? Tentei diretamente iniciando o aplicativo, sem script [ ssh -f 192.168.3.77 "cd /root/Desktop/GUI/ && "./gui""], mas o resultado é o mesmo. Eu tentei várias combinações como ssh -Y, ssh -fYe mais, mas o resultado é o mesmo!
Em segundo lugar, para minha aplicação, é necessário que, primeiro tenhamos que entrar no diretório em que o programa está localizado.
Alguma solução?

Tejas
fonte

Respostas:

5

O significado da opção -display 127.0.0.1:0.0depende desse guiprograma, mas é altamente provável que signifique "exibição no display X 127.0.0.1.0.0". Esta é a primeira exibição local do X, acessada por TCP. Isso quase certamente está errado por duas razões. Primeiro, a exibição local do X não deve ser :0, 127.0.0.1:0porque incluir um endereço IP faz com que o tráfego passe pelo TCP em vez do acesso local. Passar pelo TCP pode não funcionar, dependendo se o servidor X aceita conexões TCP. Mesmo se perder, você perde as otimizações que os monitores locais têm.

A exibição a ser usada normalmente é indicada pela DISPLAYvariável de ambiente, e essa variável tende a ser definida corretamente automaticamente. (Geralmente, se DISPLAYtiver o valor errado, é porque você está mexendo com ele. A principal exceção é o uso de screenou tmux.)

Seu programa provavelmente procura o valor da DISPLAYvariável de ambiente, porque isso tende a acontecer automaticamente com as chamadas xlib. Portanto, você deve apenas ligar ./gui, seu script não faz nada de útil. Se o seu programa insistir no -displayargumento, faça-o usar a variável de ambiente:

./gui -display "$DISPLAY"
Gilles 'SO- parar de ser mau'
fonte
4

ssh -Ye ssh -Xdeve ser um bom começo, mas você também encaminhou seu servidor X?

$ grep X /etc/ssh/sshd_config
X11Forwarding yes

caso contrário, não funcionará.

Outra coisa a verificar é a variável DISPLAY, que deve mostrar algo como isto:

$ echo $DISPLAY
$ localhost:10.0

isso foi executado depois ssh -Y. A mesma variável está vazia se eu ssh sem -You -X.

Para diferenças entre -Xe -Yleia a página de manual do ssh.

hashier
fonte
3

Este vídeo explica como resolver o erro passo a passo. Se você não quiser assistir, siga o texto abaixo:

O erro Sem protocolo especificado indica que "o usuário não sabe como iniciar um aplicativo GUI" e "o usuário não tem permissões para iniciar um aplicativo GUI". No vídeo, o aplicativo GUI é dbca.

A parte principal deste vídeo está na execução do comando xhost +que concede ao usuário permissões para exibir remotamente uma GUI de um sistema remoto para o sistema local.

Vishwanath gowda k
fonte
6
xhost +dará acesso a qualquer pessoa para conectar-se ao seu monitor. Eu recomendariaxhost +local:[hostname or ip]
vimdude
Foi isso que corrigiu o erro para mim. +1
Yug Singh
1

Debian Jessie, adicione também:

export XAUTHORITY=/.Xauthority
ranzi
fonte
xhost +Corrigido o meu problema (no lado do cliente)
danger89
Isso ajudou, obrigado! Meu XAUTHORITY foi, /tmp/xauth-1000-_0mas depois de iniciar duas sessões X adicionais, esse arquivo desapareceu - apenas a terceira permaneceu. Para corrigir o problema de todas as janelas, restaurei-o com:ln -s ~/.Xauthority /tmp/xauth-1000-_0
joeytwiddle
0

Fui atingido pelo mesmo problema, resolvi-o alterando a variável de ambiente DISPLAY de:

export DISPLAY=:0.0

para

export DISPLAY=:10
Faheem
fonte