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

ram*_*ion 1 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.
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*sen 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
Run Code Online (Sandbox Code Playgroud)

您可以确定客户端尝试使用的路径,如下所示:

tmux -L temp start\; info | grep path
Run Code Online (Sandbox Code Playgroud)

这将使用名为temp而不是的套接字创建一个渐逝服务器default,并显示它正在使用的套接字的路径.