1

所以,我在本地机器上运行了会话,但如果我先回到自己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.

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

4

2 回答 2

5

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

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

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

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

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

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

tmux -L temp start\; info | grep path

temp这将使用名为而不是 的套接字创建一个瞬态服务器default,并向您显示它正在使用的套接字的路径。

于 2012-12-05T06:51:11.267 回答
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 默认 ls)


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

于 2012-12-04T17:29:59.053 回答