2012-01-27 6 views
20

최근 필자는 화면을 사용하여 tmux (macports를 통해 획득)로 전환했다. 그러나 나는 화면을 볼 수있는 것처럼 tmux가 대체 위치에서 다시 연결되는 것처럼 보일 수 없습니다.tmux가 다시 붙지 않는다

내 Mac에서는 집에서 iTerm2를 열고 기본 쉘은 zsh이고 tmux으로 tmux 세션을 시작합니다. 나는 모든 침을 놓고, 적당한 서버 등에 넣고 잠시 동안 일한다. 일할 시간. <C-a> d - tmux가 분리됩니다.

Windows XP 컴퓨터를 사용하는 곳에서 일하게됩니다. 나는 집에서 나의 Mac으로 퍼티, SSH를 한 화재 tmux attach을 시도하고 오류 메시지가 :

no sessions

나는 이런 일이 왜 결정할 수없는 것. 나는 이것을 두려워하지 않고 어디서부터 시작해야할지조차 모릅니다. 생각?

P. 이미 .tmux.conf 파일을 제거 했으므로 기본 구성을 사용하고 있습니다.

답변

19

tmux은 서버 소켓을 TMPDIR 환경 변수에 의해 지정된 디렉토리 아래의 디렉토리에 저장합니다.

GUI 세션에서 아마도 /var (예 : /var/folders/mV/mVip4IQ4EXOriTiLJmeSuk+++Tc/-Tmp-/) 아래를 가리키는 TMPDIR로 끝날 것입니다.

SSH를 통해 로그인하면 TMPDIR이 설정되지 않고 종료되므로, tmux은 소켓이 /tmp/입니다.

10.6 시스템의 경우 여기 내 TMPDIR은 입니다. zsh/& # xfeff; 터미널zsh을와/SSH : 당신은 당신이 TMPDIR에 사용하는 데 필요한 값을 알고있는 경우 부착 (또는 세션 이외의 다른 TMUX 명령을 실행할 때

% echo local: ${TMPDIR-unset}; ssh localhost 'echo remote: ${TMPDIR-unset}' 
local: /var/folders/mV/mVip4IQ4EXOriTiLJmeSuk+++Tc/-Tmp-/ 
remote: unset 

, 당신은 그것을 지정할 수 있습니다 자체) : 당신이 당신의 GUI 세션이 당신이 (구문이 zsh을에 고유 한이 같은 뭔가를 찾을 수 있습니다 사용 된 디렉토리를 모르는 경우

TMPDIR=/var/folders/mV/mVip4IQ4EXOriTiLJmeSuk+++Tc/-Tmp-/ tmux attach 

것은, 그것은 searche) 현재 사용자가 소유 -Tmp-라는 이름의 디렉토리 /var/folders/ 아래의 :

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

미래의 문제를 방지하려면, 당신은 당신의 서버를 시작하기 전에 해제 TMPDIR하려는 (또는 뭔가를 설정할 수 있습니다 당신이 할 수있는 더 쉽게 예측할 수 있음).

+6

tmux 세션을 시작하기 전에'unset TMPDIR'을 실행하면 문제가 해결됩니다. 거대한 소품. – kenny

+2

bash에서 tmpdir을 찾으려고한다면 'find/var/folders-type d -name "-Tmp-"-user $ (whoami) 2>/dev/null'을 시도하십시오 이것은/당신이 소유 한 "-Tmp-"라는 이름의 디렉토리 (d)에 대한 var/folders./var/폴더에는 권한이 거부 될 많은 디렉토리가 포함되므로 stderr도 비트 버킷으로 리디렉션됩니다. 편집 : 아직 입력하지 않았습니다. – myeeshen

+0

TMPDIR =/var/folders/mV/mVip4IQ4EXOriTiLJmeSuk +++ Tc/-Tmp-/tmux attach'가 작동하지 않았지만 TMUX_TMPDIR =/var/folders/mV/mVip4IQ4EXOriTiLJmeSuk ++ + Tc/-Tmp-/tmux attach'에 아래의 lsof 명령으로 찾을 수있는 TMPDIR에 유효한 값을 지정하십시오. – socketwiz

6

lsof 목록 열린 소켓 파일의 -U 옵션, 그래서 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 
31

을 분명히 임시 폴더를 청소했다. 소켓을 재현 할 수있는 신호 (10) 강제 TMUX를 전송 :

가 드디어 해결책을 가지고 :
This blog post는 내 "손실"세션을 복구 할 수있었습니다.

$ killall -10 tmux 
+1

오늘 같은 문제가 생겨서 같은 블로그를 보았습니다! 그것은 작동하지만, 왜 * 작동하는지 혼란스러워했습니다. 신호 10은 사용자 정의 신호 *이고 [tmux는 "SIGUSR1에서 서버 소켓을 다시 생성합니다"라고 알려줍니다.] (https://github.com/ThomasAdam/tmux/blob/814e40522cb611895e84fc2aaf58d5d0ca9ba348/CHANGES#L552). – DaoWen

+1

이것은 제게는 효과가 있었지만, 두 번째 tmux 세션을 열었을 때 * 아닙니다. 소켓이 충돌하여 원래 세션에서 다시 만들 수 없다고 생각합니다. – spookypeanut

+0

** 부모 디렉토리 **는 소켓 전에 재 작성되지 않으므로, kill 신호를 보내기 전에 수행해야합니다. – bufh

1

내가이 주위에 작업을 도울 수있는 TMPDIR 변수를 "복구"일부 성공 사용 된 lsof 제안의 변형이 : 그 후 나는 내 세션을 잃지 않고 다시 TMUX 실행할 수 있습니다 성가신 무리. 장점은, 제가 생각하기에, 어떤 것이 더 정확한지에 대해 좀 더 정확히 할 수 있다는 것입니다. 올바른 값을 파싱하는 것이 더 쉽습니다. (일부 비정형 문자의 경우 오프 확률이지만 여전히 유효하고 항상 출력됩니다.)

빠른, 한 줄은 다음과 같습니다

#!/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 

:

$ lsof -Fn -d6 -aUc tmux | grep ^n | cut -c2- 
/private/var/folders/_l/f_n8blps05xfnkw6fs3dcn_80000gp/T/tmux-502/default 

나는 다음과 같은 스크립트를 사용하여가 (도 ~/.bash_profile에 또는 다른 적절한 장소 나 가정에서 함수가 될 수있다) https://gist.github.com/jps3/769d50a6a7611949473b