Cả bộ ghép kênh đầu cuối (màn hình, tmux) và trình quản lý cửa sổ ốp lát điều khiển bằng bàn phím (ratpoison, dwm, xmonad) đều cung cấp chức năng tương tự. Có bất kỳ lợi ích trong việc sử dụng cả hai cùng một lúc? Những vấn đề có thể phát sinh?
Cả bộ ghép kênh đầu cuối (màn hình, tmux) và trình quản lý cửa sổ ốp lát điều khiển bằng bàn phím (ratpoison, dwm, xmonad) đều cung cấp chức năng tương tự. Có bất kỳ lợi ích trong việc sử dụng cả hai cùng một lúc? Những vấn đề có thể phát sinh?
Câu trả lời:
Tôi sử dụng dwm và tmux. Trước khi học cách sử dụng tmux, tôi sẽ mở nhiều thiết bị đầu cuối cho những thứ khác nhau và đặt chúng trong các thẻ khác nhau. Bây giờ tôi có thể chạy mọi thứ bên trong một phiên tmux, dưới một thẻ duy nhất và có thể tách ra và gắn lại mà không mất trạng thái nếu tôi cần khởi động lại X.
Sử dụng cả hai: Trình quản lý cửa sổ ốp lát và bộ ghép kênh đầu cuối.
Kết hợp cả khả năng và lợi thế của họ để có được một sức mạnh tổng hợp thậm chí tốt hơn. Trong thiết lập i3 của tôi, tôi thường xuyên hiển thị một số thiết bị đầu cuối cùng một lúc, nhưng tất cả chúng đều được kết nối với cùng một phiên tmux , vì vậy tôi có thể hiển thị tất cả các cửa sổ tmux trong bất kỳ thiết bị đầu cuối nào .
Trên thực tế, tôi sử dụng các khả năng ốp lát i3
để thay thế / tăng cường chức năng tách / di chuyển cửa sổ của bộ ghép kênh đầu cuối để (imho) đạt được kết quả tốt nhất của cả hai thế giới.
Kịch bản dưới đây được sử dụng ở đây để quản lý kết nối phiên / phát hiện và dọn dẹp khi khởi động thiết bị đầu cuối:
#!/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
Không. Trong những trường hợp hiếm hoi mà màn hình bên trong màn hình hoặc tmux bên trong tmux là hữu ích, cả hai chương trình đều cung cấp một phương tiện đơn giản để chuyển điều khiển sang thể hiện lồng nhau.
Màn hình cung cấp các khả năng của bàn điều khiển nối tiếp, nhưng tôi chỉ sử dụng một ứng dụng chuyên dụng (miniterm.py được phân phối với python) khi tôi cần. Mặt khác, tôi không thể nghĩ ra bất cứ điều gì có thể làm được và người kia không thể làm được, nhưng người này có thể làm điều đó đơn giản hơn người khác.
Tôi sẽ học cái này hay cái khác, và nếu bạn tò mò hoặc không hài lòng với những gì bạn đã chọn, hãy thử cái khác. Tôi thích tmux, cá nhân.
Một khía cạnh hữu ích khác của bộ ghép kênh đầu cuối trong kịch bản này là sau khi kết nối với các máy chủ từ xa. Một trường hợp sử dụng điển hình tôi tìm thấy là