Чи має термінальний мультиплексор будь-яку перевагу при використанні з керуючим плиткою вікна?


11

Як термінальні мультиплексори (екран, tmux), так і керовані клавіатурою керуючі плитковими вікнами (ratpoison, dwm, xmonad) забезпечують подібну функціональність. Чи є якась користь у використанні обох одночасно? А як щодо проблем, які можуть виникнути?


1
Вони роблять? Єдиною особливістю, яку я можу придумати, що це перекриття, - це можливість розділити вікно на багатьох
Michael Mrozek

@MichaelMrozek У мене є 0 досвіду роботи з будь-яким з них, тому я просто збираюся прочитати деякі речі, які я прочитав. Було б чудово, якби ви могли вказати на деякі відмінності.
Паббі

3
Майте на увазі, що для менеджера вікон кожне вікно - це лише вікно - і ось про це. Тому безліч розділених з терміналом речей, крім розбиття вікон, для WM недоступні.
sr_

Відповіді:


9

Я використовую dwm та tmux. Перш ніж навчитися використовувати tmux, я мав би кілька терміналів, відкритих для різних речей, і розміщувати їх у різних тегах. Тепер я можу запустити все, що знаходиться в межах одного сеансу tmux, під одним тегом, і можу від'єднатись і повторно встановити без втрати стану, якщо мені потрібно перезапустити X.


16

Додатковою перевагою термінальних мультиплексорів є те, що ваші сеанси мультиплексора залишаться активними, і ви можете знову підключитися до них, навіть якщо збій X (ваш робочий стіл на робочому столі) або ви вийшли з X.


2

Використовуйте обидва: менеджер віконних плиток та мультиплексор терміналу.

Поєднуйте їхні можливості та переваги, щоб отримати ще кращу синергію. Під час налаштування i3 я регулярно відображаю кілька терміналів одночасно, але всі вони підключені до одного і того ж сеансу tmux , тому я можу відображати всі вікна tmux у будь-якому з терміналів .

Насправді, я використовую можливості плитки, i3щоб замінити / розширити функцію розбиття / переміщення вікон термінального мультиплексора, щоб (imho) отримати найкраще з обох світів.

Нижче описаний сценарій використовується для управління підключенням до сеансу / виявлення та очищення при запуску терміналу:

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

Ні. У тих рідкісних випадках, коли екран всередині екрана або tmux всередині tmux корисний, обидві програми пропонують простий засіб передачі управління вкладеному екземпляру.

Екран пропонує можливості послідовних консолей, але я просто використовую спеціальний додаток (miniterm.py, розповсюджений python), коли мені це потрібно. В іншому випадку я не можу придумати нічого з того, що можна зробити, а інший не може, але один може зробити це простіше, ніж інший.

Я б навчився того чи іншого, і якщо ви цікаві чи незадоволені тим, що вибрали, спробуйте інше. Я віддаю перевагу tmux, особисто.


0

Ще один корисний аспект термінального мультиплексора в цьому сценарії - це після підключення до віддалених серверів. Я знайду типовий випадок використання

  1. Відкрийте вікно терміналу на моєму локальному ПК.
  2. ssh на віддалений сервер.
  3. tmux / screen тепер забезпечує мультиплексування на віддаленому сервері, що дозволяє легко відкривати нові термінали / оболонки на віддаленому сервері. Порівняно з відкриттям другого терміналу на локальному ПК та повторним підключенням до другого ssh, це ще один менший крок.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.