Jak odłączyć sesję Tmux, która już jest w Tmuxie?

118

Otworzyłem sesję tmux na moim komputerze lokalnym i ssh na komputerze zdalnym. Następnie wpisałem polecenie „tmux attach” na zdalnej maszynie, a następnie dostałem zdalną sesję tmux w mojej lokalnej sesji tmux.

Teraz chcę odłączyć zdalną sesję tmux, próbowałem

C-b d

ale to oderwało moją lokalną sesję Tmux niż zdalną.

Jak mogę odłączyć zdalną sesję Tmux?

superadmin
źródło

Odpowiedzi:

162
C-b C-b d

(zakładając domyślne powiązania)

Pierwszy Cb jest interpretowany przez twój lokalny tmux (ponieważ jako pierwszy widzi wszystkie twoje naciśnięcia klawiszy). Drugie Cb to polecenie, które powoduje, że lokalny tmux wysyła Cb do aktywnego panelu; ten wygenerowany Cb dociera do zdalnego tmux . D przechodzi przez lokalne tmux bez zmian; kiedy dotrze do zdalnego Tmux , uruchamia detachpolecenie.

  1. Wpisujesz Cb .
    Twój lokalny tmux interpretuje go jako klucz prefiksu; nic nie jest wysyłane do procesów działających pod lokalnym tmux .
  2. Wpisujesz Cb .
    Twój lokalny tmux ma to związane z send-prefixpoleceniem.
    1. Twój lokalny tmux wysyła Cb do procesu działającego w aktywnym panelu ( ssh ).
    2. ssh przekazuje go (poprzez sshd itp.) do procesu uruchomionego na zdalnym końcu (zdalny tmux ).
      Twój zdalny tmux interpretuje go jako klucz prefiksu; nic nie jest wysyłane do procesów działających pod zdalnym tmux .
  3. Wpisujesz d .
    Twój lokalny tmux przechodzi normalnie (ponieważ drugi Cb zakończył pełną sekwencję klawiszy poleceń dla lokalnego tmux ).
    Twój zdalny tmux wiąże się z tym detach-client; odłącza aktywnego klienta.

Jest to to samo, co wtedy, gdy musisz wysłać Cb do dowolnego programu działającego w sesji tmux . Jeśli chcesz wysłać Cb do normalnej powłoki (np. Ponieważ twoja powłoka korzysta z edycji w stylu Emacsa, gdzie Cb jest backward-char(i nie lubisz używania klawiszy strzałek)), musisz użyć Cb Cb, aby uzyskać pojedynczy Cb do powłoki.

Chris Johnsen
źródło
8
Alternatywnie często widziałem użycie C-a C-askakania do ostatniego aktywnego okna. W takich okolicznościach spróbuj C-a a dsię oderwać. Dzięki!
mkelley33
2
Uwaga : kombinacja, o której wspomniałem powyżej, byłaby dostępna tylko wtedy, gdy aklucz jest związany, a nie bw tmux.conf użytkownika.
mkelley33
Mój zewnętrzny tmux używa C-ai wewnętrzny C-b, i aby móc odłączyć się od wewnętrznego, jedyną rzeczą, która działa dla mnie jest C-a C-b-b d, ale nie rozumiem, dlaczego potrzebuję drugiejb
Guillem Cucurull
Przypomnienie, aby umożliwić ludziom włączenie tej opcji, jeśli nie mają domyślnych skrótów klawiszowych: możesz uruchomić :polecenie, aby uruchomić polecenie tmux interaktywnie, a następnie skonfigurować powiązanie za pomocą bind-key -n j send-prefixpolecenia. W tym przykładzie chciałem powiązać, jaby wysłać prefiks. W przeciwnym razie skorzystaj z odpowiedzi Dave'a: użyj tmux detachpolecenia.
nealmcb
46

Innym sposobem na zrobienie tego bez martwienia się o przypisanie klawiszy do właściwej instancji tmux jest wpisanie tmux detachzdalnej sesji tmux.

Dave Wongillies
źródło
8

Próbowałem pierwszej odpowiedzi bez powodzenia.

Byłem w stanie uzyskać pożądane wyniki, wykonując następujące czynności:

tmux attach

Wszedłem do tmux i zobaczyłem, że druga sesja była nadal dołączona

Więc odłączyłem bieżącą sesję, aby wrócić do powłoki: Ctrl + b; d

Następnie wydałem następujące: tmux attach -d

To mówi, aby dołączyć do sesji domyślnej i odłączyć wszystkie inne sesje aktualnie dołączone. Zobacz stronę podręcznika w części Klienci i sesje

attach-session [-dr] [-t target-session] (alias: attach) Jeśli uruchamiany jest spoza tmux, utwórz nowego klienta w bieżącym terminalu i dołącz go do sesji docelowej. Jeśli jest używany od wewnątrz, przełącz bieżącego klienta. Jeśli podano -d, wszyscy inni klienci przyłączeni do sesji są odłączani. -r oznacza, że ​​klient jest tylko do odczytu (tylko klucze powiązane z poleceniem detach-client mają jakikolwiek wpływ)

konstabl
źródło
0

Jeśli chcesz wypróbować inną opcję, wykonaj poniższe czynności

  1. odłącz bieżącą sesję tmux za pomocą Ctrl+b d. Aby przejść do normalnego wiersza poleceń terminala.
  2. Zrobić tmux ls. Poszukaj sesji, która jest aktualnie dołączona
  3. Wykonaj to polecenie, aby odłączyć już dołączoną sesję tmux detach-client -s <attached_session_name>
Baran
źródło