所以,我在我的本地计算机上运行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.
这不是必须跳过的最糟糕的箍,但为什么会发生,我该如何解决?
答案 0 :(得分:5)
对于客户端/服务器通信, tmux 在TMPDIR环境变量指定的目录下使用命名套接字(在基于UID的子目录中)。如果未设置此环境变量(或它为空),则 tmux 将使用_PATH_TMP
中paths.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以查看是否有关于当前问题的状态是值得的。