Як від'єднати сеанс 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
Гільям Кукуррул,

Просто нагадування, щоб дозволити людям увімкнути цю опцію, якщо вони не мають типових :прив'язок клавіш: ви можете запустити команду для інтерактивного виконання команди tmux, а потім встановити прив’язку за допомогою bind-key -n j send-prefixкоманди. У цьому прикладі я хотів прив’язати, jщоб надіслати префікс. В іншому випадку використовуйте відповідь Дейва: використовуйте tmux detachкоманду.
nealmcb

46

Ще один спосіб зробити це, не турбуючись про прив'язки клавіш до правильного екземпляра tmux, - це набрати tmux detachвіддалений сеанс tmux.


8

Я спробував першу відповідь без успіху.

Мені вдалося отримати бажані результати, зробивши наступне:

tmux attach

Я ввійшов до tmux і побачив, що інший сеанс все ще додається

Тому я відключив свій поточний сеанс, щоб повернутися до оболонки: Ctrl + b; d

Тоді я видав таке: tmux attach -d

Це говорить про те, що потрібно приєднати до сеансу за замовчуванням і відключити всі вкладені в даний час сесії. Див. Головну сторінку у розділі Клієнти та сесії

attach-session [-dr] [-t target-session] (псевдонім: attach) Якщо запускати з-за tmux, створіть нового клієнта в поточному терміналі та приєднайте його до цільової сесії. Якщо використовується зсередини, переключіть поточного клієнта. Якщо вказано -d, будь-які інші клієнти, приєднані до сеансу, відлучаються. -r означає, що клієнт доступний лише для читання (лише ключі, прив'язані до команди detach-client, мають будь-який ефект)


0

Якщо ви хочете спробувати інший варіант, виконайте наведені нижче дії

  1. відключити поточний сеанс tmux з Ctrl+b d. Так що тепер ви переходите до звичайного командного рядка терміналу.
  2. Зробіть a tmux ls. Шукайте сеанс, який зараз додається
  3. Виконайте цю команду, щоб від'єднати вже доданий сеанс tmux detach-client -s <attached_session_name>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.