Error `Sin protocolo especificado` cuando se ejecuta desde una máquina remota a través de ssh


10

Tengo un script, simplemente para ejecutar mi aplicación gráfica (GUI), como se muestra a continuación.

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

Cuando lo ejecuto desde la máquina local ( ./gui.sh) funciona perfectamente bien. Pero cuando intento ejecutarlo desde una máquina remota a través de ssh, recibí el siguiente error.

[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]#    

No sé, ¿qué protocolo pregunta o me falta algo? Lo intenté directamente iniciando la aplicación, sin script [ ssh -f 192.168.3.77 "cd /root/Desktop/GUI/ && "./gui""], pero el resultado es el mismo. He intentado varias combinaciones como ssh -Y, ssh -fYy más, ¡pero el resultado es el mismo!
En segundo lugar, para mi aplicación, hay una condición obligatoria de que primero tenemos que ir al directorio donde se encuentra el programa.
¿Alguna solución?

Respuestas:


5

El significado de la opción -display 127.0.0.1:0.0depende de ese guiprograma, pero es muy probable que signifique "mostrar en la pantalla X 127.0.0.1:0.0". Esta es la primera pantalla X local, a la que se accede a través de TCP. Esto es casi seguro que está mal por dos razones. Primero, la pantalla X local debería ser :0, no 127.0.0.1:0, porque incluir una dirección IP hace que el tráfico pase a través de TCP en lugar de acceso local. Pasar por TCP puede no funcionar dependiendo de si el servidor X acepta conexiones TCP. Incluso si lo hace, pierde las optimizaciones que tienen las pantallas locales.

La pantalla a utilizar normalmente se indica mediante la DISPLAYvariable de entorno, y esa variable tiende a configurarse correctamente automáticamente. (Por lo general, si DISPLAYtiene el valor incorrecto, es porque has estado jugando con él. La principal excepción es el uso de screeno tmux).

Es probable que su programa busque el valor de la DISPLAYvariable de entorno, porque eso suele suceder automáticamente con las llamadas xlib. Así que solo debes llamar ./gui, tu script no hace nada útil. Si su programa insiste en el -displayargumento, haga que use la variable de entorno:

./gui -display "$DISPLAY"

4

ssh -Yy ssh -Xdebería ser un buen comienzo, pero ¿también reenvió su servidor X?

$ grep X /etc/ssh/sshd_config
X11Forwarding yes

de lo contrario no funcionará.

Otra cosa a verificar es la variable DISPLAY, debería mostrar algo como esto:

$ echo $DISPLAY
$ localhost:10.0

esto se corrió después ssh -Y. La misma variable está vacía si ssh sin -Yo -X.

Para conocer las diferencias -Xy -Yleer la página de manual de ssh.


3

Este video explica cómo resolver el error paso a paso. Si no quieres mirar, sigue el siguiente texto:

El error Sin protocolo especificado indica que "el usuario no sabe cómo iniciar una aplicación GUI" y que "el usuario no tiene permisos para iniciar una aplicación GUI". En el video la aplicación GUI es dbca.

La pieza clave de este video es ejecutar el comando xhost +que otorga al usuario permisos para mostrar de forma remota una GUI desde un sistema remoto al sistema local.


66
xhost +dará acceso a cualquiera para conectarse a su pantalla. Yo recomendaríaxhost +local:[hostname or ip]
vimdude

Esto y esto es lo que solucionó el error para mí. +1
Yug Singh

1

Debian Jessie, agregue también:

export XAUTHORITY=/.Xauthority

xhost +solucionó mi problema (en el lado del cliente)
peligro89

Eso ayudó, gracias! Mi XAUTHORITY era /tmp/xauth-1000-_0pero después de comenzar dos sesiones X adicionales ese archivo había desaparecido, solo quedaba el tercero. Para solucionar el problema para todas las ventanas lo ln -s ~/.Xauthority /tmp/xauth-1000-_0
restauré

0

Me encontré con el mismo problema. Lo resolví cambiando la variable de entorno DISPLAY de:

export DISPLAY=:0.0

a

export DISPLAY=:10
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.