tmux не присоединяется - PullRequest
       42

tmux не присоединяется

23 голосов
/ 27 января 2012

Я недавно переключился с использования screen на tmux (полученного через macports), так как мне больше нравится набор функций.Тем не менее, я не могу заставить tmux подключиться из другого места, как я могу показать на экране.

Дома на моем Mac я открою iTerm2, моя оболочка по умолчанию - zsh, и я начнусеанс tmux с tmux.Я настроил все свои сплиты, установил ssh'd на соответствующие серверы и т. Д. И некоторое время работаю.Время идти на работу.<C-a> d - tmux detaches.

Я приступаю к работе, где использую машину Windows XP.Я запускаю замазку, ssh в свой Mac дома, пытаюсь tmux attach и получаю сообщение об ошибке:

no sessions

Я не могуопределить, почему это произойдет.Я не боюсь копаться в этом, но даже не знаю, с чего начать.Мысли?

PS Я уже удалил свой файл .tmux.conf, поэтому он использует конфигурацию по умолчанию.

Ответы [ 4 ]

33 голосов
/ 31 марта 2014

В моем случае, очевидно, временная папка была очищена.
Этот пост в блоге помог мне восстановить мой «потерянный» сеанс:

Я наконец-то получил решение: отправкасигнал 10 заставил tmux воссоздать сокеты.После этого я мог снова запустить tmux, не теряя сеанс:

$ killall -10 tmux
21 голосов
/ 28 января 2012

tmux хранит свой серверный сокет в каталоге в каталоге, указанном переменной среды TMPDIR.

В сеансе GUI вы, вероятно, в конечном итоге получите TMPDIR, который указывает где-то под /var (например, /var/folders/mV/mVip4IQ4EXOriTiLJmeSuk+++Tc/-Tmp-/).

Когда вы входите в систему через SSH, вы, вероятно, в конечном итоге не получите набор TMPDIR, поэтому tmux ищет под /tmp/ свой сокет.

В системе 10.6 вот мой TMPDIR с zsh / 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

Если вы не знаете каталог, который использовался в вашем сеансе графического интерфейса, вы можете найти его примерно так (синтаксис специфичен для zsh ; он ищет в /var/folders/ каталог с именем -Tmp-принадлежит текущему пользователю):

echo /var/folders/**/*/-Tmp-(U/)

Чтобы избежать проблемыВ будущем, возможно, вы захотите сбросить TMPDIR перед запуском вашего сервера (или настроить его на то, что вы можете предсказать легче).

6 голосов
/ 04 октября 2012

Опция -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
1 голос
/ 29 августа 2015

У меня есть вариант с предложением 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

https://gist.github.com/jps3/769d50a6a7611949473b

...