私は最近、機能セットがもっと好きなので、screenの使用からtmux(macportsから取得)に切り替えました。ただし、スクリーニングできるように、tmuxを別の場所から再接続することができないようです。
Macの自宅で、iTerm2を開き、デフォルトのシェルはzshで、tmux
でtmuxセッションを開始します。私はすべての唾を吐き出し、適切なサーバーにSSH接続するなどして、しばらく作業します。仕事に行く時間です。 <C-a> d
--tmuxがデタッチします。
私はWindowsXPマシンを使用して仕事に取り掛かります。 PuTTYを起動し、自宅のMacにSSHで接続し、tmux attach
を試行すると、エラーメッセージが表示されます。
no sessions
なぜこれが起こるのか判断できないようです。私はこれを掘り下げることを恐れていませんが、どこから始めればよいのかさえわかりません。考え?
P.S. .tmux.confファイルをすでに削除しているので、デフォルトの設定を使用しています。
tmuxサーバーソケットをTMPDIR環境変数で指定されたディレクトリの下のディレクトリに格納します。
GUIセッションでは、おそらく/var
の下のどこかを指すTMPDIRになります(例:/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
GUIセッションが使用していたディレクトリがわからない場合は、次のようなもので見つけることができる場合があります(構文はzshに固有です。/var/folders/
で次の名前のディレクトリを検索します。 -Tmp-
現在のユーザーが所有しています):
echo /var/folders/**/*/-Tmp-(U/)
将来の問題を回避するために、サーバーを起動する前にTMPDIRの設定を解除する(または、より簡単に予測できる設定に設定する)ことをお勧めします。
私の場合、明らかに一時フォルダがクリーンアップされました。
このブログ投稿 「失われた」セッションを回復するのに役立ちました:
私はついに解決策を得ました:シグナル10を送信してtmuxにソケットを再作成させました。その後、セッションを失うことなくtmuxを再度実行できました。
$ killall -10 tmux
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
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