Tmux не повторно присоединяется
Недавно я переключился с использования экрана на tmux (полученный через macports), поскольку мне больше нравится набор функций. Тем не менее, я не могу заставить tmux повторно подключаться из альтернативного местоположения, например, я могу экранировать.
На моем mac, я открою iTerm2, моя оболочка по умолчанию - zsh, и я начну сеанс tmux с помощью tmux
. Я получаю все свои плюсы, настроенные, ssh'd на соответствующие серверы и т.д., И работаю некоторое время. Время идти на работу. <C-a> d
- tmux отсоединяется.
Я работаю, когда использую машину Windows XP. Я запускаю putty, ssh в свой mac back дома, пытаюсь tmux attach
и получаю сообщение об ошибке:
no sessions
Я не могу определить, почему это произойдет. Я не боюсь вникать в это, но даже не знаю, с чего начать. Мысли?
P.S. Я уже удалил файл .tmux.conf, поэтому он использовал конфигурацию по умолчанию.
Ответы
Ответ 1
tmux хранит свой серверный сокет в каталоге в каталоге, указанном переменной среды TMPDIR.
В вашем сеансе графического интерфейса вы, вероятно, получите TMPDIR, который указывает где-то в /var
(например, /var/folders/mV/mVip4IQ4EXOriTiLJmeSuk+++Tc/-Tmp-/
).
Когда вы вошли в систему через SSH, вы, вероятно, закончите без набора TMPDIR, поэтому tmux будет выглядеть под /tmp/
для своего сокета.
В системе 10.6 вот мой TMPDIR с zsh/& # xfeff; Terminal и с 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
В моем случае, по-видимому, папка temp была очищена.
Это сообщение в блоге помогло мне восстановить мой "потерянный" сеанс:
Наконец-то я получил решение: отправить сигнал 10 принудительным tmux для воссоздания сокетов. После этого я могу снова запустить tmux, не теряя сеанса:
$ killall -10 tmux
Ответ 3
Опция -U
lsof
содержит список открытых файлов сокетов, поэтому lsof -U | grep '^tmux'
будет перечислять все сокеты, используемые tmux. Если вы не вошли в систему как один и тот же пользователь, который запустил tmux, вам нужно будет использовать sudo
.
Последний столбец каждой строки - это имя файла. Файлы, о которых вы заботитесь, начинаются с /
.
Строки, которые вы ищете, будут выглядеть примерно так:
tmux 1234 username 6u unix 0xffffffabcd123456 0t0 /private/var/folders/M8/M8tFwolmH08fOvJ+-35VI++++TM/-Tmp-/tmux-502/default
tmux 56789 username 6u unix 0xffffff123456789a 0t0 /private/tmp/tmux-502/default
Ответ 4
У меня есть вариант предложения lsof
, который я использовал с некоторым успехом, чтобы "восстановить" переменную TMPDIR, которая может помочь обойти кучу неприятностей. Преимущество, я полагаю, состоит в том, что можно быть немного более требовательным к тому, что возвращает lsof
и легче разобрать правильное значение (на случайности в какой-то момент некоторые атипичные символы, но все же действительны, когда-либо выводятся).
Быстрый, однострочный:
$ lsof -Fn -d6 -aUc tmux | grep ^n | cut -c2-
/private/var/folders/_l/f_n8blps05xfnkw6fs3dcn_80000gp/T/tmux-502/default
Я использую следующий script (также может быть функцией в ~/.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
https://gist.github.com/jps3/769d50a6a7611949473b