Wie trenne ich eine tmux-Sitzung, die sich bereits in einem tmux befindet?

118

Ich habe eine tmux-Sitzung auf meinem lokalen Computer und ssh auf dem Remote-Computer geöffnet. Danach habe ich den Befehl "tmux attach" auf dem entfernten Rechner eingegeben und dann eine entfernte tmux-Sitzung in meiner lokalen tmux-Sitzung gestartet.

Jetzt möchte ich die Remote-tmux-sesstion trennen, ich habe es versucht

C-b d

Aber es hat meine lokale TMUX-Sitzung getrennt und nicht die entfernte.

Wie kann ich die Remote-tmux-sesstion trennen?

höchster Vorgesetzter
quelle

Antworten:

162
C-b C-b d

(unter der Annahme von Standardbindungen)

Das erste Cb wird von Ihrem lokalen tmux interpretiert (weil es das erste ist, das alle Ihre Tastenanschläge sieht). Das zweite Cb ist ein Befehl, der Ihren lokalen tmux veranlasst, ein Cb an seinen aktiven Bereich zu senden . Diese erzeugte Cb kommt am entfernten tmux an . Das d geht unverändert durch den lokalen tmux ; Wenn es zum entfernten tmux kommt , löst es den detachBefehl aus.

  1. Sie geben Cb ein .
    Ihr lokaler tmux interpretiert es als Präfixschlüssel . Es wird nichts an die Prozesse gesendet, die unter dem lokalen tmux laufen .
  2. Sie geben Cb ein .
    Ihr lokaler tmux hat es an den send-prefixBefehl gebunden .
    1. Ihr lokaler tmux sendet eine Cb an den Prozess, der im aktiven Bereich ( ssh ) ausgeführt wird.
    2. ssh leitet es (über sshd usw.) an den Prozess weiter, der auf der entfernten Seite läuft (remote tmux ).
      Ihr Remote- Tmux interpretiert es als Präfixschlüssel . Es wird nichts an die Prozesse gesendet, die unter dem entfernten tmux laufen .
  3. Sie geben d ein .
    Ihr lokaler tmux durchläuft es normal (da der zweite Cb eine vollständige Befehlstastenfolge für den lokalen tmux beendet hat ).
    Ihr Remote- Tmux hat es gebunden detach-client; Der aktive Client wird getrennt.

Dies ist dasselbe, als wenn Sie eine Cb an ein beliebiges Programm senden müssen, das in einer tmux- Sitzung ausgeführt wird. Wenn Sie wollten schicken Cb zu Ihrem normal Shell (zB weil die Shell verwendet Emacs-Stil Bearbeitung wo Cb sind backward-char(und die Sie nicht mögen mit den Pfeiltasten)) müßten Sie verwenden Cb Cb einen einzigen zu erhalten Cb an die Schale.

Chris Johnsen
quelle
8
Alternativ habe ich häufig die Verwendung von gesehen C-a C-a, um zum letzten aktiven Fenster zu springen. Versuchen Sie unter solchen Umständen, sich C-a a dzu lösen. Vielen Dank!
mkelley33
2
Hinweis : Die oben erwähnte Kombination ist nur verfügbar, wenn der aSchlüssel gebunden ist und nicht bin der tmux.conf des Benutzers.
mkelley33
Mein äußerer tmux benutzt C-aund der innere C-b, und um mich vom inneren trennen zu können, ist das einzige, was für mich funktioniert C-a C-b-b d, aber ich verstehe nicht, warum ich den zweiten braucheb
Guillem Cucurull
Nur eine Erinnerung, damit die Benutzer diese Option aktivieren können, wenn sie keine Standardtastenkombinationen haben: Sie können den :Befehl ausführen, um einen tmux-Befehl interaktiv auszuführen, und dann eine Bindung über den bind-key -n j send-prefixBefehl einrichten . In diesem Beispiel wollte ich binden j, um das Präfix zu senden. Verwenden Sie andernfalls Daves Antwort: Verwenden Sie den tmux detachBefehl.
Nealmcb
46

Eine andere Möglichkeit, dies zu tun, ohne sich Gedanken über die Tastenkombinationen zu machen, die es zur richtigen tmux-Instanz machen, besteht darin, tmux detachdie Remote-tmux-Sitzung einzugeben.

Dave Wongillies
quelle
8

Ich habe die erste Antwort ohne Erfolg versucht.

Mit den folgenden Schritten konnte ich die gewünschten Ergebnisse erzielen:

tmux attach

Ich trat in tmux ein und sah, dass die andere Sitzung immer noch angehängt war

Also habe ich meine aktuelle Sitzung getrennt, um zu einer Shell zurückzukehren: Ctrl + b; d

Dann habe ich folgendes ausgegeben: tmux attach -d

Hiermit wird festgelegt, dass eine Verbindung zur Standardsitzung hergestellt und alle anderen derzeit verbundenen Sitzungen getrennt werden sollen. Siehe die Manpage unter Clients und Sessions

attach-session [-dr] [-t Zielsitzung] (Alias: attach) Wenn Sie von außerhalb von tmux ausgeführt werden, erstellen Sie einen neuen Client im aktuellen Terminal und hängen Sie ihn an die Zielsitzung an. Bei Verwendung von innen wechseln Sie den aktuellen Client. Wenn -d angegeben wird, werden alle anderen an die Sitzung angeschlossenen Clients getrennt. -r bedeutet, dass der Client schreibgeschützt ist (nur an den Befehl detach-client gebundene Schlüssel haben Auswirkungen)

Bobby
quelle
0

Wenn Sie eine andere Option ausprobieren möchten, gehen Sie wie folgt vor

  1. Aktuelle tmux-Sitzung trennen mit Ctrl+b d. Damit Sie jetzt zur normalen Terminalbefehlszeile wechseln können.
  2. Mach ein tmux ls. Suchen Sie nach der aktuell angehängten Sitzung
  3. Führen Sie diesen Befehl aus, um die bereits angehängte Sitzung zu trennen tmux detach-client -s <attached_session_name>
RAM
quelle