只能通过ssh连接到本地tmux会话

时间:2012-12-04 17:18:03

标签: ssh tmux

所以,我在我的本地计算机上运行tmux会话,但如果我ssh首先回到自己身上,我只能连接到它(或查看有关它的信息):

% tmux ls
failed to connect to server: Connection refused
% ssh localhost -t tmux ls
Password:
0: 2 windows (created Mon Nov 26 12:47:44 2012) [208x52] (attached)
Connection to localhost closed.

这不是必须跳过的最糟糕的箍,但为什么会发生,我该如何解决?

2 个答案:

答案 0 :(得分:5)

对于客户端/服务器通信, tmux 在TMPDIR环境变量指定的目录下使用命名套接字(在基于UID的子目录中)。如果未设置此环境变量(或它为空),则 tmux 将使用_PATH_TMPpaths.h定义的目录;这通常是/tmp

注意:“会话”的以下用法是指登录会话,而不是 tmux 会话。

我的猜测是你的 ssh 会话共享一个共同的TMPDIR值(可能根本没有),而你的“普通”会话使用不同的TMPDIR值。由于不同会话中的TMPDIR值不同,因此一种会话类型的客户端无法直接“看到”以其他会话类型启动的服务器(例如,客户端尝试使用/var/folders/random/directories/tmux-500/default,但服务器正在侦听{ {1}})。

要解决此问题,您只需调整TMPDIR以匹配 ssh 会话中的正常情况:

/tmp/tmux-500/default

您可以像这样确定客户端尝试使用的路径:

TMPDIR=$(/usr/bin/ssh localhost -t 'echo $TMPDIR') && export TMPDIR

这将使用名为tmux -L temp start\; info | grep path 而不是temp的套接字创建一个渐逝服务器,并显示它正在使用的套接字的路径。

答案 1 :(得分:2)

Tmux管理 / var / run / tmux / tmp / tmux-USERID下的套接字,并且每个套接字都附有一个名称

例如:

$ pwd
/tmp/tmux-2037
$ ls
default  foo
$ tmux -L foo ls
0: 1 windows (created Tue Dec  4 13:36:10 2012) [172x52]
$ tmux -L default ls
0: 1 windows (created Tue Nov 20 16:21:14 2012) [188x47]
$ tmux ls
0: 1 windows (created Tue Nov 20 16:21:14 2012) [188x47]

看一下 / var / run / tmux / tmp / tmux-USERID下的内容,并尝试按名称附加到其中一些套接字,看看是否有助于解决您的问题(运行tmux ls与运行tmux -L default ls相同)


如果所有其他方法都失败了,那么完全分离tmux(关闭所有窗口并完全退出)然后rm / tmp / tmux-500 / default以查看是否有关于当前问题的状态是值得的。