ทั้งเทอร์มินัลมัลติเพล็กเซอร์ (หน้าจอ tmux) และตัวจัดการหน้าต่างเรียงต่อกันที่ทำงานด้วยคีย์บอร์ด (ratpoison, dwm, xmonad) ให้การทำงานที่คล้ายกัน มีประโยชน์ในการใช้ทั้งสองอย่างในเวลาเดียวกันหรือไม่? แล้วปัญหาที่อาจเกิดขึ้นล่ะ
ทั้งเทอร์มินัลมัลติเพล็กเซอร์ (หน้าจอ tmux) และตัวจัดการหน้าต่างเรียงต่อกันที่ทำงานด้วยคีย์บอร์ด (ratpoison, dwm, xmonad) ให้การทำงานที่คล้ายกัน มีประโยชน์ในการใช้ทั้งสองอย่างในเวลาเดียวกันหรือไม่? แล้วปัญหาที่อาจเกิดขึ้นล่ะ
คำตอบ:
ฉันใช้ dwm และ tmux ก่อนที่จะเรียนรู้การใช้ tmux ฉันจะเปิดเทอร์มินัลหลายอย่างสำหรับสิ่งที่แตกต่างกันและให้พวกมันอยู่ในแท็กที่ต่างกัน ตอนนี้ฉันสามารถรันทุกอย่างภายในหนึ่งเซสชั่น tmux ภายใต้แท็กเดียวและสามารถแยกออกและใส่กลับเข้าไปใหม่โดยไม่สูญเสียสถานะถ้าฉันต้องรีสตาร์ท X
ประโยชน์ที่เพิ่มขึ้นของเทอร์มินัลมัลติเพล็กเซอร์คือเซสชันมัลติเพล็กเซอร์ของคุณจะยังคงอยู่และคุณสามารถเชื่อมต่ออีกครั้งแม้ว่า X (เซสชันเดสก์ท็อปของคุณ) ล่มหรือคุณออกจากระบบ X
ใช้ทั้งสอง: ตัวจัดการหน้าต่างเรียงต่อกันและเทอร์มินัลมัลติเพล็กเซอร์
รวมทั้งความสามารถและข้อดีของพวกเขาเพื่อให้ได้มาซึ่งการทำงานร่วมกันที่ดียิ่งขึ้น กับการตั้งค่า 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
ไม่ในกรณีที่หายากเหล่านั้นซึ่งหน้าจอด้านในของหน้าจอหรือ tmux ด้านในของ tmux มีประโยชน์ทั้งสองโปรแกรมให้วิธีง่ายๆในการส่งผ่านการควบคุมไปยังอินสแตนซ์ที่ซ้อนกัน
หน้าจอมีความสามารถคอนโซลแบบอนุกรม แต่ฉันใช้แอพเฉพาะ (miniterm.py แบบกระจายด้วย python) เมื่อฉันต้องการ ไม่อย่างนั้นฉันก็ไม่สามารถคิดอะไรในทันทีทันใดที่สามารถทำได้และคนอื่นไม่สามารถทำได้ แต่คนหนึ่งอาจทำได้ง่ายกว่าอีกคนหนึ่ง
ฉันจะเรียนรู้อย่างใดอย่างหนึ่งและถ้าคุณอยากรู้หรือไม่พอใจกับสิ่งที่คุณเลือกลองอื่น ๆ ฉันชอบ tmux ส่วนตัว
อีกแง่มุมที่มีประโยชน์ของเทอร์มินัลมัลติเพล็กเซอร์ในสถานการณ์นี้คือหลังจากเชื่อมต่อกับเซิร์ฟเวอร์ระยะไกล กรณีการใช้งานทั่วไปที่ฉันพบคือ