Erro 'Nenhum protocolo especificado' ao executar a partir da máquina remota via ssh

8

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

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

Quando eu o executo na máquina local ( ./gui.sh ), ele funciona perfeitamente bem. Mas quando estou tentando executá-lo a partir 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]#    

Eu não sei qual protocolo está pedindo ou estou sentindo falta de alguma coisa? Eu 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 -fY e mais, mas o resultado é o mesmo!
Em segundo lugar, para o meu aplicativo, há uma condição obrigatória, primeiro temos que ir para o diretório em que o programa está localizado.
Alguma solução?

    
por Tejas 07.08.2013 / 08:35

5 respostas

5

O significado da opção -display 127.0.0.1:0.0 depende do programa gui , mas é altamente provável que signifique “exibir na tela X 127.0.0.1:0.0”. Este é o primeiro display X local, acessado via TCP. Isso é quase certamente errado por dois motivos. Primeiro, a exibição X local deve ser :0 , não 127.0.0.1:0 , porque a inclusão de um endereço IP faz com que o tráfego passe pelo TCP em vez de pelo acesso local. Percorrer o TCP pode não funcionar dependendo se o servidor X aceita conexões TCP. Mesmo que isso aconteça, você perde as otimizações que as exibições locais têm.

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

Seu programa provavelmente procura o valor da variável de ambiente DISPLAY , porque isso tende a acontecer automaticamente com as chamadas xlib. Então você deve apenas chamar ./gui , seu script não faz nada útil. Se o seu programa insistir no argumento -display , use a variável de ambiente:

./gui -display "$DISPLAY"
    
por 08.08.2013 / 01:43
4

ssh -Y e ssh -X devem ser um bom começo, mas você também encaminha 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 assim:

$ echo $DISPLAY
$ localhost:10.0

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

Para diferenças entre -X e -Y , leia a man page de ssh.

    
por 08.08.2013 / 01:18
1

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

O erro Nenhum 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 da GUI é dbca .

A peça chave deste vídeo está em executar o comando xhost + , que concede às permissões do usuário para exibir remotamente uma GUI de um sistema remoto, para o sistema local.

    
por 19.11.2014 / 19:38
0

Eu fui atingido pelo mesmo problema que resolvi alterando a variável de ambiente DISPLAY de:

export DISPLAY=:0.0

para

export DISPLAY=:10
    
por 14.07.2016 / 15:07
-2

Debian Jessie, adicione também:

export XAUTHORITY=/.Xauthority
    
por 19.12.2017 / 15:18

Tags