Es war einmal,
DISPLAY=:0.0 totem /path/to/movie.avi
Wenn ich von meinem Laptop movie.avi
auf meinen Desktop gehe, wird Totem auf meinem Desktop abgespielt.
Jetzt gibt es den Fehler:
No protocol specified Cannot open display:
Ich habe Debian squeeze neu installiert, als es auf beiden Computern stabil lief, und ich glaube, ich habe die Konfiguration gebrochen.
Ich habe darüber gegoogelt und kann für mein ganzes Leben nicht herausfinden, was ich tun soll.
(VLC hat eine HTTP-Schnittstelle, die funktioniert, aber nicht so praktisch wie ssh ist.)
Das gleiche Problem tritt auf, wenn ich versuche, dies von einem Cron-Job auszuführen.
totem
nicht der Suche nach Ihrem X - Cookie, und müssen Sie festlegen ,XAUTHORITY
auf den richtigen Wert, dh der Wert in der regulären Sitzung auf Ihrem Desktop. Lesen Sie Linux: wmctrl kann die Anzeige nicht öffnen, wenn die Sitzung für einen bestimmten Hintergrund über ssh + screen gestartet wird . Siehe auch die entsprechende Antwort. Kann ich als Root ein Grafikprogramm auf dem Desktop eines anderen Benutzers starten? .$XAUTHORITY
an~/.Xauthority
wie jeder erwartet es zu sein.Antworten:
(Unter Linux angepasst : wmctrl kann die Anzeige nicht öffnen, wenn die Sitzung über ssh + screen gestartet wird. )
DISPLAY und AUTHORITY
Ein X-Programm benötigt zwei Informationen, um eine Verbindung zu einer X-Anzeige herzustellen.
Es braucht die Adresse des Displays, die in der Regel ist ,
:0
wenn Sie angemeldet sind in lokal oder:10
,:11
usw. , wenn Sie in der Ferne angemeldet sind (aber die Zahl kann je nach ändern , wie viele X - Verbindungen aktiv sind). Die Adresse der Anzeige wird normalerweise in derDISPLAY
Umgebungsvariablen angezeigt .Es benötigt das Passwort für die Anzeige. X-Display-Passwörter werden als magische Cookies bezeichnet . Magische Cookies werden nicht direkt angegeben: Sie werden immer in X-Authority-Dateien gespeichert. Hierbei handelt es sich um eine Sammlung von Datensätzen in der Form „Display
:42
hat Cookie123456
“. Die X-Normdatei wird normalerweise in derXAUTHORITY
Umgebungsvariablen angegeben. Ist dies$XAUTHORITY
nicht der Fall, werden die Programme verwendet~/.Xauthority
.Sie versuchen, auf die Fenster zu reagieren, die auf Ihrem Desktop angezeigt werden. Wenn Sie die einzige Person sind, die Ihren Desktopcomputer verwendet, ist der Anzeigename sehr wahrscheinlich
:0
. Es ist schwieriger, den Speicherort der X-Normdatei zu finden, da gdm, wie unter Debian squeeze oder Ubuntu 10.04 eingerichtet, in einer Datei mit einem zufällig generierten Namen enthalten ist. (Sie hatten zuvor kein Problem, da frühere Versionen von gdm die Standardeinstellung verwendeten, dh Cookies, die in gespeichert waren~/.Xauthority
.)Abrufen der Werte der Variablen
Hier sind einige Möglichkeiten, die Werte von
DISPLAY
und zu ermittelnXAUTHORITY
:Sie können eine Bildschirmsitzung systematisch von Ihrem Desktop aus starten, möglicherweise automatisch in Ihren Anmeldeskripten (von
~/.profile
; tun dies jedoch nur, wenn Sie sich unter X anmelden : Testen Sie, obDISPLAY
ein Wert festgelegt ist, der mit beginnt:
(dies sollte alle Fälle abdecken, in denen Sie wahrscheinlich sind) begegnen)). In~/.profile
:Dann in der SSH-Sitzung:
Sie können auch die Werte von
DISPLAY
undXAUTHORITY
in einer Datei speichern und die Werte abrufen. In~/.profile
:In der SSH-Sitzung:
Sie können die Werte von
DISPLAY
undXAUTHORITY
aus einem laufenden Prozess ermitteln. Dies ist schwieriger zu automatisieren. Sie müssen die PID eines Prozesses ermitteln, der mit der Anzeige verbunden ist, an der Sie arbeiten möchten, und dann die Umgebungsvariablen von/proc/$pid/environ
(eval export $(</proc/$pid/environ tr \\0 \\n | grep -E '^(DISPLAY|XAUTHORITY)=')
¹) abrufen.Kopieren der Cookies
Ein anderer Ansatz (auf Vorschlag von Arrowmaster ) besteht darin, nicht zu versuchen, den Wert von
$XAUTHORITY
in der ssh-Sitzung abzurufen , sondern die X-Sitzung dazu zu bringen, ihre Cookies zu kopieren~/.Xauthority
. Da die Cookies jedes Mal generiert werden, wenn Sie sich anmelden, ist es kein Problem, wenn Sie veraltete Werte beibehalten~/.Xauthority
.Es kann ein Sicherheitsproblem geben, wenn auf Ihr Basisverzeichnis über NFS oder ein anderes Netzwerkdateisystem zugegriffen werden kann, mit dem Remoteadministratoren den Inhalt anzeigen können. Sie müssten sich trotzdem irgendwie mit Ihrem Computer verbinden, es sei denn, Sie haben X-TCP-Verbindungen aktiviert (Debian hat sie standardmäßig deaktiviert). Für die meisten Menschen gilt dies entweder nicht (kein NFS) oder ist kein Problem (keine X TCP-Verbindungen).
Fügen Sie die folgenden Zeilen zu
~/.xprofile
oder~/.profile
(oder einem anderen Skript, das beim Anmelden gelesen wird) hinzu, um Cookies zu kopieren, wenn Sie sich bei Ihrer Desktop X-Sitzung anmelden:¹ Im Prinzip dieses Zitat richtiges fehlt, aber in diesem speziellen Fall
$DISPLAY
und$XAUTHORITY
wird keine Shell - Metazeichen enthalten.quelle
~/.xprofile
die nur während der X-Anmeldung ausgeführt werden sollte, und sie~/.Xauthority
mit den richtigen Informationen erstellen / aktualisieren zu lassen. Wäre ein symbolischer Link ausreichend?~/.Xauthority
.xauth extract - $DISPLAY | xauth -f "$HOME/.Xauthority" merge -
in~/.xprofile
einsetzt?Ich habe dieses Problem durch Hinzufügen gelöst
zu
~/.xprofile
. Ich weiß nicht, ob dies insgesamt sicher ist (ich wäre sehr daran interessiert zu hören, was sachkundigere Leute denken), aber ich vermute, dass es viel besser ist, als die Zugriffskontrolle (mitxhost +
) auszuschalten, wie es allgemein bei Ihnen vorgeschlagen wird Google für dieses Problem.quelle
localuser
Serverinterpretierte Adressen sind absolut sicher. Debian tut dies sogar standardmäßig als Teil des Anmeldevorgangs (in/etc/X11/Xsession.d/35x11-common_xhost-local
). Weitere Informationen finden Sie auf der Xsecurity-Manpage .xhost +
ist wahrscheinlich in den meisten Fällen genug ...xhost(1)
undXsecurity(7)
für Dokumente). Von selbst, diesen Befehl ist nicht erlaubt , jede Art von Remote - Zugriff oder X11 - Weiterleitung (für die der „Magic Cookie“ Mechanismus ist in der Regel bevorzugt überxhost
).Du musst
export DISPLAY=:0.0
quelle
Funktioniert bei mir, Debian Wheezy -> Ubuntu Trusty.
Hinweis: In diesem Fall wird auf dem Server kein Display-Manager ausgeführt. Es handelt sich um eine "kopflose" virtuelle Maschine ohne angeschlossene Grafikkarte oder Monitor.
Die X-Anzeige auf dem Laptop zeigt die Ausgabe von xterm an, das auf dem Server ausgeführt wird.
Debuggen mit:
strace
wird eine Menge blutiger Details über das, was es tut, verschütten, sollten Sie in der Lage sein zu erraten, wo es stecken bleibt - auf eine Verbindung warten oder was auch immer.In einer Zeile ..
quelle