我最近从使用屏幕切换到tmux(通过macports获得),因为我更喜欢功能集。但是,我似乎无法从备用位置重新连接tmux,就像我可以屏幕一样。
在我家的Mac上,我将打开iTerm2,我的默认shell是zsh,我将开始与tmux
进行tmux会话。我将所有的吐痰设置,ssh到适当的服务器等,并工作了一段时间。是时候去上班了。 <C-a> d
- tmux分离。
我开始工作,我使用的是Windows XP机器。我在家里把腻子,ssh打开我的mac,尝试tmux attach
,然后收到错误信息:
no sessions
我似乎无法确定为什么会这样。我并不害怕深入研究,但甚至不知道从哪里开始。想法?
P.S。我已经删除了我的.tmux.conf文件,所以它使用的是默认配置。
答案 0 :(得分:33)
在我的情况下,显然临时文件夹已被清除 This blog post帮助我恢复了“迷失”的会话:
我终于得到了解决方案:发送信号10强制tmux重新创建套接字。之后我可以再次运行tmux而不会失去我的会话:
$ killall -10 tmux
答案 1 :(得分:21)
tmux 将其服务器套接字存储在TMPDIR环境变量指定的目录下的目录中。
在您的GUI会话中,您最终可能会得到指向/var
下某处的TMPDIR(例如/var/folders/mV/mVip4IQ4EXOriTiLJmeSuk+++Tc/-Tmp-/
)。
当您通过SSH登录时,可能最终没有设置TMPDIR,因此 tmux 在/tmp/
下查找其套接字。
在10.6系统上,这是我的TMPDIR zsh / 终端,以及 zsh / SSH:
% echo local: ${TMPDIR-unset}; ssh localhost 'echo remote: ${TMPDIR-unset}'
local: /var/folders/mV/mVip4IQ4EXOriTiLJmeSuk+++Tc/-Tmp-/
remote: unset
如果您知道需要为TMPDIR使用的值,可以在附加(或在会话本身之外运行其他 tmux 命令)时指定它:
TMPDIR=/var/folders/mV/mVip4IQ4EXOriTiLJmeSuk+++Tc/-Tmp-/ tmux attach
如果你不知道你的GUI会话正在使用的目录,你可以用这样的东西找到它(语法特定于 zsh ;它在/var/folders/
下搜索名为-Tmp-
的目录,由当前用户拥有):
echo /var/folders/**/*/-Tmp-(U/)
为避免将来出现问题,您可能需要在启动服务器之前取消设置TMPDIR(或将其设置为您可以更容易预测的内容)。
答案 2 :(得分:6)
-U
的{{1}}选项列出了打开的套接字文件,因此lsof
将列出 tmux 使用的所有套接字。如果您未以启动 tmux 的同一用户身份登录,则需要使用lsof -U | grep '^tmux'
。
每行的最后一列是文件的名称。您关注的文件以sudo
开头。
您正在寻找的行看起来像这样:
/
答案 3 :(得分:1)
我对lsof
的建议有一些变化,我一直在成功地“恢复”TMPDIR变量,这有助于解决一堆烦恼。我认为,优势在于,人们可以对lsof
返回的内容更加严格,并且更容易解析出正确的值(在某些情况下,某些非典型字符的可能性很小,但仍然有效,输出)。
快速,单线:
$ lsof -Fn -d6 -aUc tmux | grep ^n | cut -c2-
/private/var/folders/_l/f_n8blps05xfnkw6fs3dcn_80000gp/T/tmux-502/default
我使用以下脚本(也可以是〜/ .bash_profile中的函数或我想的其他适当位置):
#!/bin/bash
if [[ -z "${TMPDIR}" ]]; then
while read line; do
case $line in
n*) line="${line#n}"
export TMPDIR="${line%%/tmux-$(id -u)/*}"
;;
esac;
done < <(lsof -Fn -d6 -aUc tmux)
else
echo ">> \$TMPDIR already defined: $TMPDIR" 1>&2
fi