1. ホーム
  2. tmux

[解決済み] 小さいモニタから大きいモニタに切り替えたときに、tmuxのウィンドウを再描画する方法はありますか?

2022-03-23 22:45:44

質問

例えば、Terminal.appでリモートサーバーにssh接続するとします。以前起動した小さなモニタから大きな解像度のモニタで "tmux attach" を行うと、コンソールの周りにドットが描かれます。新しいウィンドウサイズに合わないのです。ウィンドウを再描画してきれいにする方法はないでしょうか? CTRL + L または CTRL - B + R は役に立ちません。manで調べても適切なコマンドは見つかりませんでした。

% tmux -V
tmux 1.5

解決方法は?

tmux は、ウィンドウの寸法を、そのウィンドウが接続されているすべてのセッションで、各寸法の最小値に制限します。もしこれを行わなければ、接続されたすべてのクライアントのためにウィンドウの全領域を表示する賢明な方法はありません。

最も簡単な方法は、アタッチするときに他のクライアントをセッションからデタッチすることです。

tmux attach -d

あるいは、セッションにアタッチする前に、他のクライアントを別のセッションに移動させることもできます。

takeover() {
    # create a temporary session that displays the "how to go back" message
    tmp='takeover temp session'
    if ! tmux has-session -t "$tmp"; then
        tmux new-session -d -s "$tmp"
        tmux set-option -t "$tmp" set-remain-on-exit on
        tmux new-window -kt "$tmp":0 \
            'echo "Use Prefix + L (i.e. ^B L) to return to session."'
    fi

    # switch any clients attached to the target session to the temp session
    session="$1"
    for client in $(tmux list-clients -t "$session" | cut -f 1 -d :); do
        tmux switch-client -c "$client" -t "$tmp"
    done

    # attach to the target session
    tmux attach -t "$session"
}
takeover 'original session' # or the session number if you do not name sessions

より小さなクライアントがセッションに切り替えた場合、画面は再び縮小します。

また、ウィンドウだけを引き継ぐというバリエーションもあります (ウィンドウを新しいセッションにリンクさせる。 aggressive-resize しかし、一般的なケースでスクリプトを書くのは難しいです(そして、単にセッションから切り離すのではなく、ウィンドウのリンクを解除したり、セッションを終了させたいので、「終了」とは異なります)。