(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 der DISPLAY
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 Cookie 123456
“. Die X-Normdatei wird normalerweise in der XAUTHORITY
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 ermitteln XAUTHORITY
:
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, ob DISPLAY
ein Wert festgelegt ist, der mit beginnt :
(dies sollte alle Fälle abdecken, in denen Sie wahrscheinlich sind) begegnen)). In ~/.profile
:
case $DISPLAY in
:*) screen -S local -d -m;;
esac
Dann in der SSH-Sitzung:
screen -d -r local
Sie können auch die Werte von DISPLAY
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önnen die Werte von DISPLAY
und XAUTHORITY
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:
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 dieses Zitat richtiges fehlt, aber in diesem speziellen Fall $DISPLAY
und $XAUTHORITY
wird keine Shell - Metazeichen enthalten.