In einer tmux-Sitzung kann nach ssh'ing keine Verbindung zum X-Server hergestellt werden

10

Bei der Arbeit habe ich einen Desktop mit einem Monitor und ein paar laufenden tmux-Sitzungen. Zu Hause ssh ich häufig auf diesen Desktop und gehe in meine laufenden tmux-Sitzungen. Wenn ich von zu Hause ssh, kann ich nicht möchte X11 verwenden, so dass ich das nicht verwenden -XFlagge. Wenn ich wieder zur Arbeit gehe (nachdem ich von zu Hause aus ssh'ing habe) und diese tmux-Sitzungen auf dem Desktop verwende, kann ich nichts mehr tun, was eine GUI hervorbringen würde. Ich kann keine Dateien öffnen. Wenn ich versuche, matplotlib zu verwenden, erhalte ich eine : cannot connect to X serverNachricht.

Wie kann ich nach dem Ssh'ing und Öffnen einer vorhandenen tmux-Sitzung von zu Hause aus die Fähigkeit zum Öffnen von GUI-Inhalten auf dem Desktop wieder herstellen?

Das ssh'ing von zu Hause scheint die tmux-Sitzung vergessen zu lassen, dass es GUI-Zeug erzeugen kann.

BEARBEITEN:

chrisdembia
quelle
Bisschen verwirrt. Benutzt du -Xjetzt die Flagge oder nicht? Sie können X11-Inhalte nur über SSH ausführen, wenn dies festgelegt ist.
Anko
Entschuldigung für die Verwirrung. Ich benutze nirgendwo das Flag -X. Ich habe nicht vor, X11-Sachen über SSH zu machen. Ich beabsichtige nur, X11 auf meinem Desktop zu verwenden, auf dem sich die tmux-Sitzung tatsächlich befindet. Ich werde die ursprüngliche Frage aktualisieren.
Chrisdembia

Antworten:

4

Ich muss lediglich die Umgebungsvariable DISPLAY auf: 0.0 setzen. Ich denke, das Problem war, dass ich die Fischschale verwende, und ich muss das Flag -x verwenden, um dies zu setzen:

set -x DISPLAY :0.0
chrisdembia
quelle
3
Beachten Sie, dass der richtige Wert für DISPLAYmöglicherweise von abweicht :0.0. Eine schnelle Möglichkeit, dies herauszufinden, besteht darin, ein neues tmux-Fenster zu erstellen echo $DISPLAY.
j08lue
1
Erweitern Sie einfach den Kommentar von @ j08lue; in meinem Fall echo $DISPLAYzurückgekehrt localhost:10.0und Laufen set DISPLAY localhost:0.0hat den Trick gemacht.
IsaacS
1
Kennt jemand eine bashgleichwertige oder eine Cross-Shell-Version? set -xerhöht nur die Ausführlichkeit für mich in bash. @IsaacS, mussten Sie set DISPLAY localhost:10.0stattdessen oder haben localhost:0.0Sie für Sie gearbeitet?
Eiswasser
4
Auf Bash sollten Sie in der Lage sein, zu verwenden export DISPLAY=:0.0.
Chrisdembia
1
Diese Lösung gefällt mir nicht, da ich sie für den Rest der Sitzung (die für mich Wochen dauert) für jedes neue Fenster ausführen muss. Und es passiert sogar, wenn ich wieder auf meinem X11-Hauptsystem bin und neue Fenster erstelle. Wie können wir tmux dazu bringen, das Einstellen zu stoppen $DISPLAY?
Nealmcb
4

Ich hatte das gleiche Problem. Normalerweise verwende ich tmuxals Teil einer X11-Desktopumgebung mit mehreren Monitoren und ssh manchmal von einem Chromebook, das X11 oder Set nicht unterstützt $DISPLAY. Die Antwort von @chrisdembia funktioniert, erfordert jedoch das Ändern DISPLAYin jedem neuen Fenster für den Rest der tmux-Sitzung, was schmerzhaft ist.

Eine dauerhafte Lösung besteht darin, DISPLAYdie update-environmentVariable tmux in den Einstellungen von tmux zu entfernen . Mit diesem Befehl können Sie Ihren aktuellen Wert anzeigen:

tmux show-options -g update-environment

Um es zu entfernen, habe ich diese Zeile zu meiner ~/.tmux.confDatei hinzugefügt , einschließlich allem außer DISPLAY:

set-option -g update-environment "SSH_ASKPASS SSH_AUTH_SOCK SSH_AGENT_PID SSH_CONNECTION WINDOWID XAUTHORITY"

Dies wird unter Zurücksetzen der Shell-DISPLAY-Variablen in einer tmux-Sitzung über ssh näher erläutert. Dies erklärt, warum DISPLAYes standardmäßig einen anderen allgemeinen Anwendungsfall gibt.

nealmcb
quelle