Подтвердить что ты не робот

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, поэтому он использовал конфигурацию по умолчанию.

4b9b3361

Ответ 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