X11-Weiterleitung über Gnu-Bildschirm, ist das möglich?


32

Ich benutze ständig GNU Screen. Aber ich habe versucht herauszufinden, ob es eine Möglichkeit gibt, X11-Apps zum Weiterleiten über den Bildschirm zu bewegen, wenn ich sshing (ist das ein Wort?). Wenn ich derzeit versuche, "gedit" über den Bildschirm auszuführen, wird es auf meinem "Server" -Computer und nicht auf meinem Client geöffnet. Wenn ich außerhalb des Bildschirms dasselbe mache, ist alles in Ordnung. Aber ich möchte, dass alles in Ordnung ist, wenn ich auch den Bildschirm benutze!

Vielen Dank!

PS: Ich habe das Problem gegoogelt und sehe die Erwähnung von xmove, aber ich kann das Paket, das xmove enthält, nicht auf meinem Ubuntu finden. (Ubuntu 10.10)


Ich habe keine Zeit, eine vollständige Antwort zu finden, aber Sie müssen einige Umgebungsvariablen richtig einstellen. Sie können wahrscheinlich herausfinden, welche Sie in Ihrer Umgebung außerhalb des Bildschirms betrachten.
28.

Antworten:


32

Um dies manuell zu tun, überprüfen Sie Ihre DISPLAY-Umgebungsvariable, sobald Sie SSHed in, aber vor dem erneuten Anschließen an den Bildschirm haben:

echo $DISPLAY

Legen Sie die Umgebungsvariable explizit fest, nachdem Sie die Verbindung zum Bildschirm wiederhergestellt haben:

export DISPLAY=:N.0

wo : N.0 ist was das echovor dem anhängen zeigte. Dies wird nicht perfekt sein, da einige Anwendungen möglicherweise erwarten, mit dem Session D-Bus zu kommunizieren, der für das Senden über die SSH-Verbindung etwas komplexer ist.


1
Genial! Dies scheint für die meisten Apps zu funktionieren. Ich versuche, meinen Bildschirm hochzuklappen. Haben Sie irgendwelche Ideen oder können Sie mich zumindest in die allgemeine Richtung lenken, wie ich dies automatisieren kann? Vielen Dank!
Sandro

Ich habe seltsame Dinge getan, wie etwa Skripten: echo $DISPLAY > $HOME/.display.txt; screen -x -dund dann noch einen Bildschirm, der das tutexport DISPLAY=$(cat $HOME/.display.txt)
Kees Cook

Genau das habe ich versucht zu erreichen. Aber bisher kein Glück. Der Versuch, diesen Export zu realisieren, ist eine ziemliche Hürde, da es nicht gut ist, ihn in einem Skript auszuführen. Ich muss ihn irgendwie als Quelle verwenden ... und auch Setenv scheint keinen magischen Touch zu haben.
Sandro

Um das Skript Typ Quelle , . /path/to/scriptwo scriptistexport DISPLAY=$(cat $HOME/.display.txt)
Kees Cook -

Dies setzt voraus, dass Sie beim Anmelden keinen automatischen Start des Bildschirms haben (a la byobu)
Ein Student an einer Universität

11

es gibt ein programm namens xpra in den repositories, es ist wie gnu screen für x11. es ist nicht allzu schwer damit zu arbeiten:

X Persistente Remote-Anwendungen

Xpra bietet Ihnen die Funktionalität von GNU Screen für X-Anwendungen.

Der Benutzer kann Remote-X-Anwendungen auf seinem lokalen Computer anzeigen und die Verbindung zum Remote-Computer trennen und wiederherstellen, ohne den Status der ausgeführten Anwendungen zu verlieren.


2
Ich habe darüber geschrieben, wie man xpra tatsächlich in Screen integriert, um sowohl Konsolen- als auch X11-Anwendungspersistenz zu erreichen: krlmlr.github.io/integrating-xpra-with-screen . Funktioniert bei mir.
krlmlr

7

Byobu fügt die ssh- und gpg-Agenten automatisch wieder hinzu. Ich könnte es schaffen, die Anzeigevariable wieder zuzuordnen, wenn das für Sie hilfreich ist ...


Es scheint nicht einmal die Anzeigevariable in NEUEN Sitzungen weiterzugeben, die in einer SSH-Sitzung mit X11-Weiterleitung erstellt wurden. Es wäre wunderbar, wenn es so wäre ... Ich habe aufgehört, es zu verwenden, weil ich das automatische Starten von byobu deaktivieren musste, damit man die X11-Weiterleitung verwenden kann.
Ein Student an einer Universität

2

So habe ich es beim Laufenlassen von byobu zum Laufen gebracht

Fügen Sie diese Zeile in .bash_login vor der Zeile "_byobu_source .." hinzu:

echo $DISPLAY > $HOME/.display.env

Und dann füge diese Zeile zu .bashrc hinzu :

if [ ! -z ${SSH_CONNECTION+x} ]; then
  export DISPLAY=$(cat $HOME/.display.env) 
fi

1

Es scheint, dass das Problem darin besteht, dass die Umgebungsvariable XAUTHORITY in der Bildschirmsitzung nicht beibehalten wird. Ich habe dieses Problem gelöst, indem ich Folgendes zu meinem .bashrc hinzugefügt habe. Ich habe nicht gedacht, dass dies notwendig sein sollte, aber ich denke, Sie tun, was Sie müssen:

# ensure X forwarding is setup correctly, even for screen
XAUTH=~/.Xauthority
if [[ ! -e "${XAUTH}" ]]; then
 # create new ~/.Xauthority file
 xauth
fi
if [[ -z "${XAUTHORITY}" ]]; then
 # export env var if not already available.
 export XAUTHORITY="${XAUTH}" 
fi

Ich erwarte nicht, dass dies die beste oder prägnanteste Lösung ist, aber es funktioniert.



0

Auf der Grundlage von @harre-Vorschlägen stellte ich fest, dass dies die beste funktionierende Lösung ist, zumindest für RHEL via Putty. Ich weiß, dass es einen besseren Weg gibt, als eine Datei zu erstellen, die die Variable enthält, aber dies funktioniert außerhalb des Gates, um beim Laden über X11Zugriff auf die zu erhalten .DISPLAYgnu screen

Automatisierte Lösung

Hinzufügen zu .bashrc(oder .bash_profile, abhängig von Ihrem Anwendungsfall)

#.bashrc
if [ -f ~/etc/.bash-screen-x11 ]; then
   echo $DISPLAY > $HOME/.display.env
   source ~/etc/.bash-screen-x11
fi

Fügen Sie dann die folgende Datei hinzu (oder Ihre Pfadauswahl)

#~/etc/.bash-screen-x11
# sets back display var.
if [ -z $STY ]; then
  export DISPLAY=$(cat $HOME/.display.env)
fi
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.