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

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

C-b d


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

如何分离远程tmux会话?

#1 楼

C-b C-b d


(假设使用默认绑定)

第一个C-b由您的本地tmux解释(因为它是第一个看到所有按键的)。第二个C-b是使您的本地tmux将C-b发送到其活动窗格的命令;此生成的C-b到达远程tmux。 d不变地通过本地tmux;当到达远程tmux时,它会触发detach命令。


您键入C-b。
您的本地tmux将其解释为前缀键;没有任何内容发送到在本地tmux下运行的进程。
您键入Cb。
您的本地tmux将其绑定到send-prefix命令。


您的本地tmux将Cb发送到在活动窗格(ssh)中运行的进程。

ssh将其(通过sshd等)转发到在远端(远程tmux)上运行的进程。
您的远程tmux将其解释为前缀键;没有任何内容发送到在远程tmux下运行的进程。


您键入d。
您的本地tmux正常传递它(因为第二个Cb完成了完整的命令键序列
您的远程tmux已将其绑定到detach-client;它会分离活动客户端。

这与您需要将C-b发送到tmux会话中运行的任何程序时相同。如果您想将Cb发送到普通外壳(例如,因为您的外壳正在使用Emacs风格的编辑,其中Cb是backward-char(并且您不喜欢使用箭头键)),则需要使用Cb Cb将单个Cb发送到外壳。

评论


另外,我经常看到使用C-a C-a跳转到最后一个活动窗口。在这种情况下,请尝试使用C-a和d分离。谢谢!

–mkelley33
13-10-25在0:31

注意:我上面提到的组合只有在用户的tmux.conf中绑定了a键而不是b时才可用。

–mkelley33
13-10-25在0:42

我的外部tmux使用C-a和内部的c-b,并且能够与内部的c-b分离,唯一适合我的东西是C-a C-b-b d,但是我不明白为什么我需要第二个b

– Guilem Cucurull
18年8月21日在15:10

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

–nealmcb
19年7月10日在20:15



在Mac上,先按Command + b再按d,以分离tmux会话。

–瑞安·盖茨(Ryan Gates)
20 Dec 17 '22:01

#2 楼

另一种不用担心绑定到正确的tmux实例的键绑定方法是在远程tmux会话中键入tmux detach

#3 楼

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

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

tmux attach

我输入了tmux并看到另一个会话仍被连接

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

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

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


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


#4 楼

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


,并使用Ctrl+b d分离当前的tmux会话。这样您现在就可以进入普通的终端命令行提示符。
执行tmux ls。查找当前连接的会话
执行此命令以分离已连接的会话tmux detach-client -s <attached_session_name>



#5 楼

如果您已修改tmux配置以在两个tmux会话中使用Ctrl+b以外的功能,则您仍然需要第二次按Ctrl+b

例如,在两个tmux会话中我的绑定都是Ctrl+/,所以我按:

C-/ C-b d