リモートSSHセッションにtmuxを認識させますか?

リモートSSHセッションにtmuxを認識させますか?

tmuxコンピュータAでセッションを実行し、sshそのセッションからコンピュータBに対話型シェルを開始するとします。

PS1以下の使用方法に合わせてMachine Bを交換したいと思いますtmux。たとえば、XTerm タイトル文字列に別のコンテンツを含めます。

私は常にtmux最適化プロンプトを表示するためにマシンBの設定を編集しません。時にはssh通常の端末(ではなく)からシステムBに接続し、この場合は一般的な端末を使用tmuxしたいと思うかもしれません。PS1

これを達成するための標準/承認された最良の方法はありますか?

これまで私が考えたのは、AcceptEnvironコンピュータBの設定で設定してsshd接続するときにカスタム信号変数を渡すことだけです。ssh

答え1

目的のタスクを実行する1つの方法は次のとおりです。

tmux は、作成したシェルに環境変数 ($TMUX、$TMUX_PANE など) を設定します。これらの変数を検出して ssh コマンドを実行して、リモートセッションにクライアントの起動方法を通知できます。私たちは2つのステップを見てみましょう。

まず、sshが開始された場所を検索します。これは「ssh」という関数で実行できます。

function ssh {
    if [ -z "$TMUX" ]; then
        # echo connecting from a plain terminal
        /usr/bin/ssh $1 # $1 is <user@hostname>
    else
        # echo connecting through tmux
        /usr/bin/ssh -t $1 bash --rcfile '~/.bashrc.tmux'
    fi
}   

注:関数名がパス内のプログラムと同じに指定されている場合、その関数は優先的に適用されます。混乱を避けるために、関数名を異なるように指定してください。

次に、リモートホストがそれに応じてプロンプトを設定するには、リモートホストに〜/ .bashrc.tmuxファイルを作成します。

# contents of .bashrc.tmux, override PS1 to your liking
source .bashrc
PS1="[\d \t \u@\h:\w ] $ "

あるいは、より多くの場所で使用できるように環境変数を設定することもできます。

RUNNING_THRU_TMUX=true
source .bashrc

関連情報