タイリングウィンドウマネージャでターミナルマルチプレクサを使用すると、どのような利点がありますか?

タイリングウィンドウマネージャでターミナルマルチプレクサを使用すると、どのような利点がありますか?

ターミナルマルチプレクサ(screen、tmux)とキーボードベースのタイリングウィンドウマネージャ(ratpoison、dwm、xmonad)はどちらも同様の機能を提供します。両方を使用するとどのような利点がありますか?発生する可能性のある問題についてどうすればよいですか?

答え1

ターミナルマルチプレクサのもう1つの利点は、マルチプレクサセッションが有効であり、X(デスクトップセッション)がクラッシュしているかXからログアウトしても再接続できることです。

答え2

私はdwmとtmuxを使います。 tmuxの使い方を学ぶ前に、さまざまなタスクのために複数の端末を開き、それを別のタブに配置しました。これで、単一のタブでtmuxセッション内のすべてを実行できます。Xを再起動する必要がある場合は、状態を失うことなく切り離して再接続するだけです。

答え3

タイリングウィンドウマネージャとターミナルマルチプレクサの両方を使用します。

より良い相乗効果を得るために、両当事者の能力と利点を組み合わせてください。私のi3設定では、私はしばしばマルチターミナル同時に、これらはすべて接続されています同じtmuxセッション、表示できるようにすべての端末のすべてのtmuxウィンドウ

私は実際にタイリング機能を使用してi3ターミナルマルチプレクサのウィンドウ分割/移動機能を置き換え/強化し、(IMHO)2つの世界の利点を最大限に活用します。

ここでは、セッションを管理し、接続を検出し、端末の起動時にクリーンアップするために、次のスクリプトが使用されます。

#!/bin/bash
# This script attaches the terminal to a common session, where all
# terminals can show any window of the main tmux session independently
# This script also cleans up "old" sessions
# Todo: Cosmetic fix-ups. Make less verbose.

DEBUG="y"
showRun(){ echo Will run: $@;test -z $DEBUG||read -n1 -p"Press ENTER";$@; }

SNAME=${1:-XyZ}

if ! tmux has -t $SNAME; then
    echo -n "Session $SNAME not found, creating it: "
    showRun exec tmux new-session -s $SNAME;
else
    echo -n "Session $SNAME found: "
    MySESSION=$(tmux ls | grep -E "^$SNAME:.*\(attached\)$")
    echo $MySESSION;
    if [ -z "$MySESSION" ] ; then
        echo "Session $SNAME unattached, seizing it:"
        showRun exec tmux attach -t $SNAME \; new-window
    else
        echo "Session $SNAME already attached, finding grouped Sessions:"
        REGEX="group ([^)]*)"
        [[ $MySESSION =~ $REGEX ]]
        GNAME=${BASH_REMATCH[1]}
        GSESSIONS=$(tmux ls | grep "group $GNAME)" | grep -v $SNAME:)
        echo "$GSESSIONS"
        if [ -z "$GSESSIONS" ]; then
            echo "No sessions in group with $SNAME found, creating new one:"
            showRun exec tmux new-session -t $SNAME \; new-window
        else
            FGSESSIONS=$(echo "$GSESSIONS" | grep -v attached )
            if [ -z "$FGSESSIONS" ]; then
                echo "No free sessions in group $GNAME found, creating new one:"
                showRun exec tmux new-session -t $SNAME \; new-window
            else
                echo -e "Free grouped Sessions:\n $FGSESSIONS";
                if echo "$FGSESSIONS" | tail -n +2 | grep . > /dev/null; then
                    echo "Several detached Sessions found, cleaning up:"
                    echo "$FGSESSIONS" | while read SID x ; do
                        if [ -z $KEEPSID ]; then
                            KEEPSID=${SID%:*};
                            echo "Keeping session $KEEPSID for takeover after cleanup"
                        else
                            echo "Cleaning up old detached session $SID"
                            tmux kill-session -t ${SID%:}
                        fi;
                    done
                    KEEPSID=$(tmux ls|grep "group $GNAME)" | grep -v attached);
                    KEEPSID=${KEEPSID%: *}
                    echo "Attaching to session $KEEPSID:"
                    showRun exec tmux attach -t $KEEPSID \; new-window
                else
                    echo "Free session ( ${FGSESSIONS%: *} ) found, seizing it:"
                    showRun exec tmux attach -t ${FGSESSIONS%: *} \; new-window
                fi ;
            fi ;
        fi ;
    fi ;
fi

答え4

習慣。画面内の画面またはtmux内のtmuxが有用なまれな場合、両方のプログラムは制御をネストされたインスタンスに渡す簡単な方法を提供します。

Screenはシリアルコンソール機能を提供しますが、必要なときにのみ専用アプリケーション(Pythonと共に配布されるminiterm.py)を使用します。そうしないと、ある人はできるだけで、他の人はできないことをすぐに考えることはできませんが、ある人が他の人よりも簡単になる可能性があります。

私はそのうちの1つを学び、選択した内容が気になるか気に入らない場合は、他のものを試してみてください。個人的には私はtmuxを好みます。

関連情報