Apakah terminal multiplexer memiliki manfaat apa pun ketika digunakan dengan tiling window manager?


11

Multiplexer terminal (layar, tmux) dan manajer jendela ubin yang digerakkan keyboard (ratpoison, dwm, xmonad) menyediakan fungsionalitas yang serupa. Apakah ada manfaatnya menggunakan keduanya sekaligus? Bagaimana dengan masalah yang mungkin timbul?


1
Mereka lakukan? Satu-satunya fitur yang dapat saya pikirkan tentang tumpang tindih itu adalah kemampuan untuk membagi jendela menjadi banyak
Michael Mrozek

@MichaelMrozek Saya memiliki 0 pengalaman dengan salah satu dari mereka jadi saya hanya akan melakukan beberapa hal yang saya baca. Akan lebih bagus jika Anda bisa menunjukkan beberapa perbedaan.
Pubby

3
Ketahuilah bahwa untuk pengelola jendela, setiap jendela hanyalah jendela - dan hanya itu. Oleh karena itu banyak hal terkait terminal selain pemisahan jendela tidak tersedia untuk WM.
sr_

Jawaban:


9

Saya menggunakan dwm dan tmux. Sebelum belajar menggunakan tmux, saya akan memiliki beberapa terminal terbuka untuk hal-hal yang berbeda, dan memilikinya dalam tag yang berbeda. Sekarang saya dapat menjalankan semua yang ada di dalam satu sesi tmux, di bawah satu tag, dan dapat melepaskan dan memasang kembali tanpa kehilangan status jika saya perlu me-restart X.


16

Manfaat tambahan dari terminal multiplexer adalah bahwa sesi multiplexer Anda akan tetap hidup dan Anda dapat menyambung kembali ke sana bahkan jika X (sesi desktop Anda) macet, atau Anda keluar dari X.


2

Gunakan keduanya: Window tiling manager, dan terminal multiplexer.

Kombinasikan kemampuan dan keunggulan mereka untuk mendapatkan sinergi yang lebih baik. Pada pengaturan i3 saya, saya secara teratur menampilkan beberapa terminal pada saat yang sama, tetapi semuanya terhubung ke sesi tmux yang sama , sehingga saya dapat menampilkan semua jendela tmux di salah satu terminal .

Akibatnya, saya menggunakan kemampuan ubin i3untuk mengganti / menambah fungsionalitas pemisahan / pemindahan jendela dari terminal multiplexer untuk (imho) mendapatkan yang terbaik dari kedua dunia.

Skrip di bawah ini digunakan di sini untuk mengelola koneksi sesi / deteksi dan pembersihan pada startup terminal:

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

1

Tidak. Dalam kasus yang jarang terjadi di mana layar di dalam layar atau tmux di dalam tmux berguna, kedua program menyediakan cara sederhana untuk menyerahkan kontrol ke instance bersarang.

Layar menawarkan kemampuan konsol serial, tetapi saya hanya menggunakan aplikasi khusus (miniterm.py didistribusikan dengan python) ketika saya membutuhkannya. Kalau tidak, saya tidak bisa memikirkan hal lain yang bisa dilakukan dan yang lain tidak bisa, tetapi yang satu mungkin melakukannya lebih sederhana daripada yang lain.

Saya akan belajar satu atau yang lain, dan jika Anda ingin tahu atau tidak puas dengan apa yang Anda pilih, coba yang lain. Saya lebih suka tmux, secara pribadi.


0

Aspek lain yang berguna dari terminal multiplexer dalam skenario ini adalah setelah tersambung ke server jarak jauh. Kasus penggunaan khas yang saya temukan adalah

  1. Buka jendela terminal pada pc lokal saya.
  2. ssh ke server jauh.
  3. tmux / layar sekarang menyediakan multiplexing pada server jarak jauh, memungkinkan pembukaan terminal / shell baru pada server jarak jauh. Dibandingkan dengan membuka terminal kedua pada pc lokal dan menghubungkan kembali dengan ssh kedua, ini adalah satu langkah lebih sedikit.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.