94

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

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

C-b d

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

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

4 ответа4

137
C-b C-b d

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

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

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

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

42

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

6

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

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

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>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .