2011-02-24 03:10:27 +0000 2011-02-24 03:10:27 +0000
128
128

Как отсоединить сеанс tmux, который сам по себе уже в tmux?

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

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

C-b d

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

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

Ответы (4)

172
172
172
2011-02-24 04:21:36 +0000
C-b C-b d

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

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

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

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

51
51
51
2011-09-24 12:00:19 +0000

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

8
8
8
2013-01-21 16:43:49 +0000

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

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

tmux attach

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

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

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

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

подключение сеанса [-dr] -t target-session Если запустить tmux извне, создайте нового клиента в текущем терминале и прикрепите его к целевому сеансу. Если используется изнутри, переключите текущий клиент. Если указано -d, то все остальные клиенты, подключенные к сеансу, отсоединяются._ -r означает, что клиент доступен только для чтения (только ключи, привязанные к команде отсоединить клиента, имеют какой-то эффект).

0
0
0
2018-03-12 06:28:47 +0000

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

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