Errore "Nessun protocollo specificato" durante l'esecuzione da una macchina remota tramite ssh


10

Ho uno script, semplicemente per eseguire la mia applicazione grafica (GUI), come di seguito.

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

Quando lo eseguo dal computer locale ( ./gui.sh) funziona perfettamente. Ma quando sto cercando di eseguirlo da una macchina remota tramite ssh, ho ricevuto il seguente errore.

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

Non so quale protocollo sta chiedendo o mi sto perdendo qualcosa? Ho provato direttamente avviando l'applicazione, senza script [ ssh -f 192.168.3.77 "cd /root/Desktop/GUI/ && "./gui""], ma il risultato è lo stesso. Ho provato varie combinazioni simili ssh -Y, ssh -fYe di più ma il risultato è lo stesso!
In secondo luogo per la mia applicazione, c'è una condizione indispensabile che, dobbiamo prima andare nella directory in cui si trova il programma.
Qualche soluzione?

Risposte:


5

Il significato dell'opzione -display 127.0.0.1:0.0dipende da quel guiprogramma, ma è molto probabile che significhi "visualizzare sul display X 127.0.0.1:0.0". Questo è il primo display X locale, accessibile tramite TCP. Questo è quasi certamente sbagliato per due motivi. Innanzitutto, la visualizzazione X locale dovrebbe essere :0no 127.0.0.1:0, perché l'inclusione di un indirizzo IP fa sì che il traffico passi attraverso TCP anziché l'accesso locale. Il passaggio tramite TCP potrebbe non funzionare a seconda che il server X accetti connessioni TCP. Anche se lo fa, perdi le ottimizzazioni dei display locali.

Il display da usare è normalmente indicato dalla DISPLAYvariabile d'ambiente e quella variabile tende ad essere impostata correttamente automaticamente. (Di solito, se DISPLAYha un valore errato, è perché ci hai messo un casino. L'eccezione principale è l'uso di screeno tmux.)

Il tuo programma probabilmente cerca il valore della DISPLAYvariabile d'ambiente, perché tende ad accadere automaticamente con le chiamate xlib. Quindi dovresti semplicemente chiamare ./gui, il tuo script non fa nulla di utile. Se il tuo programma insiste -displaysull'argomento, fallo usare la variabile d'ambiente:

./gui -display "$DISPLAY"

4

ssh -Ye ssh -Xdovrebbe essere un buon inizio ma hai anche inoltrato il tuo server X?

$ grep X /etc/ssh/sshd_config
X11Forwarding yes

altrimenti non funzionerà.

Un'altra cosa da verificare è la variabile DISPLAY che dovrebbe mostrare qualcosa del genere:

$ echo $DISPLAY
$ localhost:10.0

questo è stato eseguito dopo ssh -Y. La stessa variabile è vuota se ssh senza -Yo -X.

Per le differenze tra -Xe -Yleggere la pagina man di ssh.


3

Questo video spiega come risolvere l'errore passo dopo passo. Se non vuoi guardare, segui il testo qui sotto:

L'errore Nessun protocollo specificato indica che "l'utente non sa come avviare un'applicazione GUI" e "l'utente non dispone delle autorizzazioni per avviare un'applicazione GUI". Nel video è l'applicazione GUI dbca.

La parte fondamentale di questo video è nell'esecuzione del comando xhost +che concede all'utente le autorizzazioni per visualizzare in remoto una GUI da un sistema remoto al sistema locale.


6
xhost +darà accesso a chiunque per connettersi al tuo display. Consigliereixhost +local:[hostname or ip]
vimdude il

Questo e questo è ciò che ha risolto l'errore per me. +1
Yug Singh

1

Debian Jessie, aggiungi anche:

export XAUTHORITY=/.Xauthority

xhost +risolto il problema (lato client)
danger89,

Ciò ha aiutato, grazie! La mia XAUTHORITY era, /tmp/xauth-1000-_0ma dopo aver iniziato altre due sessioni X quel file era scomparso - rimaneva solo il terzo. Per risolvere il problema per tutte le finestre l'ho ripristinato con:ln -s ~/.Xauthority /tmp/xauth-1000-_0
joeytwiddle,

0

Sono stato colpito dallo stesso problema, l'ho risolto cambiando la variabile di ambiente DISPLAY da:

export DISPLAY=:0.0

per

export DISPLAY=:10
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.