如何分离本身已在tmux中的tmux会话?


118

我已经在本地计算机上打开了一个tmux会话,并SSH到远程计算机。此后,我在远程计算机上键入了命令“ tmux attach”,然后在本地tmux会话上获得了一个远程tmux会话。

现在我想分离远程tmux会话,我已经尝试过

C-b d

但是它分离了我的本地tmux会话,而不是远程的。

如何分离远程tmux会话?

Answers:


162
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. 您的本地tmuxCb发送到活动窗格(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内部的tmux C-b,并且能够与内部的tmux 分离,对我而言唯一有效的方法是C-a C-b-b d,但是我不明白为什么我需要第二个b
Guillem Cucurull,

提醒您,如果人们没有默认的键盘绑定,则允许他们启用此选项:您可以运行:命令以交互方式运行tmux命令,然后通过该bind-key -n j send-prefix命令设置绑定。在此示例中,我想绑定j以发送前缀。否则,请使用Dave的答案:使用tmux detach命令。
nealmcb


8

我尝试了第一个答案,但没有成功。

通过执行以下操作,我可以获得所需的结果:

tmux attach

我进入了tmux,看到另一个会话仍处于连接状态

因此,我分离了当前会话以返回到shell: Ctrl + b; d

然后我发布了以下内容: tmux attach -d

这表示要附加到默认会话,并分离当前附加的所有其他会话。请参见“ 客户端和会话”下的手册页

attach-session [-dr] [-t target-session](别名:attach)如果从tmux外部运行,请在当前终端中创建一个新客户端,并将其附加到target-session。如果从内部使用,请切换当前客户端。 如果指定了-d,则附加到该会话的所有其他客户端都将被分离。 -r表示客户端是只读的(仅绑定到detach-client命令的键才有效)


0

如果您想尝试其他选项,请按照以下步骤操作

  1. 使用分离当前的tmux会话Ctrl+b d。这样您现在就可以转到普通的终端命令行提示符。
  2. 做一个 tmux ls。查找当前连接的会话
  3. 执行此命令以分离已连接的会话 tmux detach-client -s <attached_session_name>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.