GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ssh – Öffnen Sie ein Fenster auf einem entfernten X-Display (warum „Display kann nicht geöffnet werden“)?

Es war einmal,

DISPLAY=:0.0 totem /path/to/movie.avi

nachdem ich von meinem Laptop per SSH auf meinen Desktop gelangte, würde Totem movie.avi abspielen auf meinem Desktop.

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 schätze, ich habe die Konfiguration beschädigt.

Ich habe darüber gegoogelt und kann beim besten Willen nicht herausfinden, was ich tun soll.

(VLC hat eine HTTP-Schnittstelle, die funktioniert, aber nicht so praktisch ist wie ssh.)

Das gleiche Problem tritt auf, wenn ich versuche, dies über einen Cron-Job auszuführen.

Akzeptierte Antwort:

(Angepasst von Linux:wmctrl kann die Anzeige nicht öffnen, wenn die Sitzung über ssh+screen initiiert wird)

ANZEIGE und BEHÖRDE

Ein X-Programm benötigt zwei Informationen, um sich mit einem X-Display zu verbinden.

  • Es benötigt die Adresse des Displays, typischerweise :0 wenn Sie lokal angemeldet sind oder :10 , :11 usw., wenn Sie remote angemeldet sind (die Anzahl kann sich jedoch ändern, je nachdem, wie viele X-Verbindungen aktiv sind). Die Adresse des Displays wird normalerweise im DISPLAY angezeigt Umgebungsvariable.

  • Es benötigt das Passwort für die Anzeige. X-Display-Passwörter werden magische Cookies genannt . Magische Cookies werden nicht direkt angegeben:Sie werden immer in X-Autoritätsdateien gespeichert, die eine Sammlung von Datensätzen der Form „display :42“ sind hat Cookie 123456 “. Die X-Autoritätsdatei wird normalerweise in XAUTHORITY angegeben Umgebungsvariable. Wenn $XAUTHORITY nicht gesetzt ist, verwenden Programme ~/.Xauthority .

Sie versuchen, auf die Fenster zu reagieren, die auf Ihrem Desktop angezeigt werden. Wenn Sie die einzige Person sind, die Ihren Desktop-Computer verwendet, lautet der Anzeigename höchstwahrscheinlich :0 . Den Speicherort der X-Autoritätsdatei zu finden, ist schwieriger, da es sich bei gdm, wie es unter Debian Squeeze oder Ubuntu 10.04 eingerichtet wurde, in einer Datei mit einem zufällig generierten Namen befindet. (Davor hatten Sie kein Problem, da frühere Versionen von gdm die Standardeinstellung verwendeten, d. h. Cookies, die in ~/.Xauthority gespeichert wurden .)

Werte der Variablen abrufen

Hier sind einige Möglichkeiten, um die Werte von DISPLAY zu erhalten und XAUTHORITY :

  • Sie können eine Bildschirmsitzung systematisch von Ihrem Desktop aus starten, vielleicht automatisch in Ihren Anmeldeskripten (aus ~/.profile; aber tun Sie es nur, wenn Sie sich unter X anmelden:Testen Sie, ob DISPLAY wird auf einen Wert gesetzt, der mit : beginnt (das sollte alle Fälle abdecken, denen Sie wahrscheinlich begegnen werden)). In ~/.profile :

    case $DISPLAY in
      :*) screen -S local -d -m;;
    esac
    

    Dann in der ssh-Sitzung:

    screen -d -r local
    
  • Sie könnten auch die Werte von DISPLAY speichern und XAUTHORITY in einer Datei speichern und die Werte abrufen. In ~/.profile :

    case $DISPLAY in
      :*) export | grep -E '(^| )(DISPLAY|XAUTHORITY)=' >~/.local-display-setup.sh;;
    esac
    

    In der ssh-Sitzung:

    . ~/.local-display-setup.sh
    screen
    
  • Sie könnten die Werte von DISPLAY erkennen und XAUTHORITY aus einem laufenden Prozess. Dies ist schwieriger zu automatisieren. Sie müssen die PID eines Prozesses herausfinden, der mit der Anzeige verbunden ist, an der Sie arbeiten möchten, und dann die Umgebungsvariablen aus /proc/$pid/environ abrufen (eval export $(</proc/$pid/environ tr \0 \n | grep -E '^(DISPLAY|XAUTHORITY)=') ¹).

Verwandte:Gibt es offene / uneingeschränkte Funkfrequenzen, die für jede Nutzung frei sind?

Kopieren der Cookies

Ein anderer Ansatz (der einem Vorschlag von Arrowmaster folgt) besteht darin, nicht zu versuchen, den Wert von $XAUTHORITY abzurufen in der ssh-Sitzung, sondern um die X-Sitzung dazu zu bringen, ihre Cookies in ~/.Xauthority zu kopieren . Da die Cookies jedes Mal generiert werden, wenn Sie sich anmelden, ist es kein Problem, wenn Sie veraltete Werte in ~/.Xauthority beibehalten .

Es kann ein Sicherheitsproblem geben, wenn auf Ihr Home-Verzeichnis über NFS oder ein anderes Netzwerkdateisystem zugegriffen werden kann, das es entfernten Administratoren ermöglicht, seinen Inhalt anzuzeigen. 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 Leute trifft dies also entweder nicht zu (kein NFS) oder ist kein Problem (keine X-TCP-Verbindungen).

Um Cookies zu kopieren, wenn Sie sich bei Ihrer Desktop-X-Sitzung anmelden, fügen Sie die folgenden Zeilen zu ~/.xprofile hinzu oder ~/.profile (oder ein anderes Skript, das gelesen wird, wenn Sie sich anmelden):

case $DISPLAY:$XAUTHORITY in
  :*:?*)
    # DISPLAY is set and points to a local display, and XAUTHORITY is
    # set, so merge the contents of `$XAUTHORITY` into ~/.Xauthority.
    XAUTHORITY=~/.Xauthority xauth merge "$XAUTHORITY";;
esac

¹ Im Prinzip fehlt hier die richtige Anführungszeichen, aber in diesem speziellen Fall $DISPLAY und $XAUTHORITY enthält kein Shell-Metazeichen.


Linux
  1. Ssh – Warum ist Firefox gegenüber SSH so langsam?

  2. Übergeben von Variablen im Remote-SSH-Befehl

  3. Warum ist meine SSH-Anmeldung langsam?

  4. Wie kann ich mich von einer offenen Remote-SSH-Sitzung abmelden?

  5. VPN-Tunnel für den SSH-Fernzugriff

Ausführen von Befehlen auf Remote-Linux-Systemen über SSH

SSHFS:Mounten eines Remote-Dateisystems über SSH

So öffnen Sie ein Linux-Terminalfenster

So verwenden Sie SSH, um eine Verbindung zu einem Remote-Server herzustellen

Gewusst wie:FreeBSD-Fernverwaltung

Warum ist Port 1111 offen und ist das sicher?