เทอร์มินัลมัลติเพล็กเซอร์มีประโยชน์ใด ๆ เมื่อใช้กับตัวจัดการหน้าต่างเรียงต่อกันหรือไม่?


11

ทั้งเทอร์มินัลมัลติเพล็กเซอร์ (หน้าจอ tmux) และตัวจัดการหน้าต่างเรียงต่อกันที่ทำงานด้วยคีย์บอร์ด (ratpoison, dwm, xmonad) ให้การทำงานที่คล้ายกัน มีประโยชน์ในการใช้ทั้งสองอย่างในเวลาเดียวกันหรือไม่? แล้วปัญหาที่อาจเกิดขึ้นล่ะ


1
พวกเขาทำ? ฟีเจอร์เดียวที่ฉันนึกได้คือการทับซ้อนกันคือความสามารถในการแบ่งหน้าต่างออกเป็นหลาย ๆ แบบ
Michael Mrozek

@MichaelMrozek ฉันมีประสบการณ์ 0 อย่างกับพวกเขาดังนั้นฉันจะทำบางสิ่งที่ฉันอ่าน มันจะดีถ้าคุณสามารถชี้ให้เห็นความแตกต่างบางอย่าง
Pubby

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 ที่สองนี่เป็นขั้นตอนที่น้อยกว่า
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.