Erreur `Aucun protocole spécifié` lors de l'exécution à partir d'une machine distante via ssh

10

J'ai un script, simplement pour exécuter mon application graphique (GUI), comme ci-dessous.

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

Lorsque je l'exécute à partir d'une machine locale ( ./gui.sh), cela fonctionne parfaitement bien. Mais lorsque j'essaie de l'exécuter à partir d'une machine distante via ssh, j'ai eu l'erreur suivante.

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

Je ne sais pas, quel protocole il demande ou est-ce que je manque quelque chose? J'ai essayé directement en démarrant l'application, sans script [ ssh -f 192.168.3.77 "cd /root/Desktop/GUI/ && "./gui""], mais le résultat est le même. J'ai essayé différentes combinaisons comme ssh -Y, ssh -fYet plus mais le résultat est le même!
Deuxièmement, pour ma candidature, il y a une condition indispensable que nous devons d'abord aller dans le répertoire où se trouve le programme.
Des solutions?

Tejas
la source

Réponses:

5

La signification de l'option -display 127.0.0.1:0.0dépend de ce guiprogramme, mais il est très probable que cela signifie «afficher sur l'affichage X 127.0.0.1:0.0». Il s'agit du premier affichage X local, accessible via TCP. C'est presque certainement faux pour deux raisons. Tout d'abord, l'affichage X local devrait l'être :0, 127.0.0.1:0car l'inclusion d'une adresse IP entraîne le trafic via TCP au lieu de l'accès local. Passer par TCP peut ne pas fonctionner selon que le serveur X accepte les connexions TCP. Même si c'est le cas, vous perdez les optimisations des écrans locaux.

L'affichage à utiliser est normalement indiqué par la DISPLAYvariable d'environnement, et cette variable a tendance à être définie correctement automatiquement. (Habituellement, si DISPLAYla valeur est incorrecte, c'est parce que vous avez joué avec. La principale exception est l'utilisation de screenou tmux.)

Votre programme recherche probablement la valeur de la DISPLAYvariable d'environnement, car cela a tendance à se produire automatiquement avec les appels xlib. Vous devez donc simplement appeler ./gui, votre script ne fait rien d'utile. Si votre programme insiste sur l' -displayargument, faites-le utiliser la variable d'environnement:

./gui -display "$DISPLAY"
Gilles 'SO- arrête d'être méchant'
la source
4

ssh -Yet ssh -Xdevrait être un bon début, mais avez-vous également transféré votre serveur X?

$ grep X /etc/ssh/sshd_config
X11Forwarding yes

sinon cela ne fonctionnera pas.

Une autre chose à vérifier est la variable DISPLAY, elle devrait montrer quelque chose comme ceci:

$ echo $DISPLAY
$ localhost:10.0

cela a été exécuté après ssh -Y. La même variable est vide si je ssh sans -You -X.

Pour les différences entre -Xet -Ylisez la page de manuel de ssh.

hashier
la source
3

Cette vidéo explique comment résoudre l'erreur étape par étape. Si vous ne voulez pas regarder, suivez le texte ci-dessous:

L'erreur Aucun protocole spécifié indique que "l'utilisateur ne sait pas comment lancer une application GUI" et "l'utilisateur n'a pas les autorisations pour lancer une application GUI". Dans la vidéo, l'application GUI est dbca.

L'élément clé de cette vidéo consiste à exécuter la commande xhost +qui accorde à l'utilisateur les autorisations pour afficher à distance une interface graphique depuis un système distant vers le système local.

Vishwanath gowda k
la source
6
xhost +donnera accès à n'importe qui pour se connecter à votre écran. Je recommanderaisxhost +local:[hostname or ip]
vimdude
Ceci et cela est ce qui fixe l'erreur pour moi. +1
Yug Singh
1

Debian Jessie, ajoutez aussi:

export XAUTHORITY=/.Xauthority
ranzi
la source
xhost +correction de mon problème (côté client)
danger89
Cela a aidé, merci! Mon XAUTHORITY était, /tmp/xauth-1000-_0mais après le démarrage de deux sessions X supplémentaires, ce fichier avait disparu - seule la troisième était restée. Pour résoudre le problème pour toutes les fenêtres, je l'ai restauré avec:ln -s ~/.Xauthority /tmp/xauth-1000-_0
joeytwiddle
0

J'ai été touché par le même problème que je l'ai résolu en changeant la variable d'environnement DISPLAY de:

export DISPLAY=:0.0

à

export DISPLAY=:10
Faheem
la source