Как отключить сеанс tmux, который сам уже в tmux?

118

Я открыл сеанс tmux на моей локальной машине и ssh на удаленной машине. После этого я набрал команду «tmux attach» на удаленном компьютере, а затем получил удаленный сеанс tmux в своем локальном сеансе tmux.

Теперь я хочу отсоединить удаленную сессию tmux, я пробовал

C-b d

но это оторвало мою локальную сессию tmux, а не удаленную.

Как я могу отсоединить удаленную сессию tmux?

суперамин
источник

Ответы:

162
C-b C-b d

(при условии привязки по умолчанию)

Первый Cb интерпретируется вашим локальным tmux (потому что он первым видит все ваши нажатия клавиш). Второй Cb - это команда, которая заставляет ваш локальный tmux отправлять Cb на свою активную панель; этот сгенерированный Cb прибывает в удаленный tmux . Д проходит через локальное tmux неизменного; когда он добирается до удаленного tmux, он запускает detachкоманду.

  1. Вы вводите Cb .
    Ваш локальный tmux интерпретирует его как ключ префикса; ничего не отправляется процессам, работающим под локальным tmux .
  2. Вы вводите Cb .
    Ваш локальный tmux связал это с send-prefixкомандой.
    1. Ваш локальный tmux отправляет Cb процессу, работающему в активной панели ( ssh ).
    2. ssh передает его (через sshd и т. д.) процессу, запущенному на удаленном конце (удаленный tmux ).
      Ваш удаленный tmux интерпретирует его как префиксный ключ; ничего не отправляется процессам, работающим под удаленным tmux .
  3. Вы вводите d .
    Ваш локальный tmux проходит через него нормально (поскольку второй Cb завершил полную последовательность командных клавиш для локального tmux ).
    Ваш удаленный tmux связан с этим detach-client; он отключает активного клиента.

Это то же самое, что когда вам нужно отправить Cb любой программе, запущенной в сеансе tmux . Если вы хотите отправить Cb в вашу обычную оболочку (например, потому что ваша оболочка использует редактирование в стиле Emacs, где находится Cbbackward-char (и вам не нравятся клавиши со стрелками)), вам нужно будет использовать Cb Cb, чтобы получить один Cb для оболочки.

Крис Джонсен
источник
8
Кроме того, я часто видел использование C-a C-aдля перехода к последнему активному окну. При таких обстоятельствах попытайтесь C-a a dотсоединиться. Спасибо!
mkelley33
2
Примечание : комбо, о котором я упоминал выше, будет доступно только в том случае, если aключ привязан, а не bв пользовательском tmux.conf.
mkelley33
Мой внешний tmux использует C-aи внутренний C-b, и чтобы иметь возможность отделиться от внутреннего, единственное, что работает для меня, - C-a C-b-b dно я не понимаю, зачем мне второйb
Guillem Cucurull
Просто напоминание, чтобы позволить людям включить эту опцию, если у них нет привязок клавиш по умолчанию: вы можете запустить :команду для интерактивного запуска команды tmux, а затем установить привязку с помощью этой bind-key -n j send-prefixкоманды. В этом примере я хотел связать, jчтобы отправить префикс. В противном случае используйте ответ Дейва: используйте tmux detachкоманду.
nealmcb
47

Другой способ сделать это, не беспокоясь о привязках клавиш, которые попадают в нужный экземпляр tmux, - это ввести tmux detachудаленный сеанс tmux.

Дейв Вонгиллис
источник
8

Я попробовал первый ответ безуспешно.

Я смог получить желаемые результаты, выполнив следующие действия:

tmux attach

Я вошел в tmux и увидел, что другой сеанс все еще был подключен

Поэтому я отключил свой текущий сеанс, чтобы вернуться к оболочке: Ctrl + b; d

Затем я выпустил следующее: tmux attach -d

Это говорит, чтобы присоединиться к сеансу по умолчанию, и отсоединить все другие сеансы, в настоящее время присоединенные См. Справочную страницу в разделе « Клиенты и сессии».

attach-session [-dr] [-t target-session] (псевдоним: attach) При запуске из-за пределов tmux создайте нового клиента в текущем терминале и присоедините его к target-сессии. Если используется изнутри, переключите текущего клиента. Если указан параметр -d, все остальные клиенты, подключенные к сеансу, будут отключены. -r означает, что клиент доступен только для чтения (действуют только ключи, связанные с командой detach-client)

Бобби
источник
0

Если вы хотите попробовать другой вариант, выполните следующие действия

  1. отсоединить текущий сеанс tmux от Ctrl+b d. Так что теперь вы идете в обычный терминал командной строки.
  2. Сделать а tmux ls. Ищите сессию, которая в данный момент прикреплена
  3. Выполните эту команду, чтобы отсоединить уже прикрепленный сеанс tmux detach-client -s <attached_session_name>
Баран
источник