Fehler "Kein Protokoll angegeben" beim Ausführen von einem Remote-Computer über ssh


10

Ich habe ein Skript, um einfach meine grafische (GUI) Anwendung wie unten auszuführen.

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

Wenn ich es von einem lokalen Computer ( ./gui.sh) aus starte, läuft es einwandfrei. Aber wenn ich versuche, es von einem Remote-Computer über ssh auszuführen, wurde der folgende Fehler angezeigt.

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

Ich weiß nicht, welches Protokoll gefragt wird oder fehlt mir etwas? Ich habe es direkt versucht, indem ich die Anwendung ohne Skript [ ssh -f 192.168.3.77 "cd /root/Desktop/GUI/ && "./gui""] gestartet habe, aber das Ergebnis ist dasselbe. Ich habe verschiedene Kombinationen wie und mehr ausprobiert ssh -Y, ssh -fYaber das Ergebnis ist das gleiche!
Zweitens gibt es für meine Anwendung eine Bedingung, dass wir zuerst in das Verzeichnis gehen müssen, in dem sich das Programm befindet.
Irgendwelche Lösungen?

Antworten:


5

Die Bedeutung der Option -display 127.0.0.1:0.0hängt von diesem guiProgramm ab, aber es ist sehr wahrscheinlich, dass dies "Anzeige auf dem X-Display 127.0.0.1:0.0" bedeutet. Dies ist die erste lokale X-Anzeige, auf die über TCP zugegriffen wird. Dies ist mit ziemlicher Sicherheit aus zwei Gründen falsch. Erstens sollte die lokale X-Anzeige :0nicht angezeigt werden , 127.0.0.1:0da durch das Einfügen einer IP-Adresse der Datenverkehr über TCP anstatt über den lokalen Zugriff geleitet wird. Das Durchlaufen von TCP funktioniert möglicherweise nicht, je nachdem, ob der X-Server TCP-Verbindungen akzeptiert. Selbst wenn dies der Fall ist, verlieren Sie die Optimierungen, die lokale Anzeigen haben.

Die zu verwendende Anzeige wird normalerweise durch die DISPLAYUmgebungsvariable angezeigt , und diese Variable wird in der Regel automatisch korrekt eingestellt. (Wenn DISPLAYder falsche Wert vorliegt, liegt dies normalerweise daran, dass Sie damit herumgespielt haben. Die Hauptausnahme ist die Verwendung von screenoder tmux.)

Ihr Programm sucht wahrscheinlich nach dem Wert der DISPLAYUmgebungsvariablen, da dies bei xlib-Aufrufen normalerweise automatisch geschieht. Sie sollten also einfach anrufen ./gui, Ihr Skript macht nichts Nützliches. Wenn Ihr Programm auf dem -displayArgument besteht, lassen Sie es die Umgebungsvariable verwenden:

./gui -display "$DISPLAY"

4

ssh -Yund ssh -Xsollte ein guter Anfang sein, aber haben Sie auch Ihren X-Server weitergeleitet?

$ grep X /etc/ssh/sshd_config
X11Forwarding yes

sonst wird es nicht funktionieren.

Eine andere zu überprüfende Sache ist die DISPLAY-Variable, die ungefähr Folgendes anzeigen sollte:

$ echo $DISPLAY
$ localhost:10.0

das wurde nachgelaufen ssh -Y. Die gleiche Variable ist leer, wenn ich ohne -Yoder ssh -X.

Für Unterschiede zwischen -Xund -Ylesen Sie die Manpage von ssh.


3

In diesem Video wird Schritt für Schritt erklärt, wie Sie den Fehler beheben können. Wenn Sie nicht zuschauen möchten, folgen Sie dem folgenden Text:

Der Fehler Kein Protokoll angegeben gibt an, dass "der Benutzer nicht weiß, wie eine GUI-Anwendung gestartet wird" und "der Benutzer keine Berechtigungen zum Starten einer GUI-Anwendung hat". Im Video ist die GUI-Anwendung dbca.

Das wichtigste Element dieses Videos ist die Ausführung des Befehls, mit xhost +dem der Benutzer die Berechtigung erhält , eine GUI von einem Remote-System aus auf dem lokalen System remote anzuzeigen.


6
xhost +ermöglicht jedem Zugriff auf Ihr Display. Ich würde empfehlenxhost +local:[hostname or ip]
vimdude

Dies und das ist es, was den Fehler für mich festgelegt. +1
Yug Singh

1

Debian Jessie, füge auch hinzu:

export XAUTHORITY=/.Xauthority

xhost +mein Problem behoben (auf der Client-Seite)
Gefahr89

Das hat geholfen, danke! Meine XAUTHORITY war, /tmp/xauth-1000-_0aber nachdem ich zwei zusätzliche X-Sitzungen gestartet hatte, war diese Datei verschwunden - nur die dritte blieb übrig. Um das Problem für alle Fenster zu beheben, habe ich es wiederhergestellt mit:ln -s ~/.Xauthority /tmp/xauth-1000-_0
joeytwiddle

0

Ich war von demselben Problem betroffen, das ich durch Ändern der Umgebungsvariablen DISPLAY von:

export DISPLAY=:0.0

zu

export DISPLAY=:10
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.