终端多路复用器(screen、tmux)和键盘驱动的平铺窗口管理器(ratpoison、dwm、xmonad)都提供类似的功能。同时使用两者有什么好处吗?可能出现的问题怎么办?
答案1
终端多路复用器的额外好处是,您的多路复用器会话仍然有效,即使 X(您的桌面会话)崩溃或您从 X 注销,您也可以重新连接到它们。
答案2
我使用 dwm 和 tmux。在学习使用 tmux 之前,我会为不同的事情打开多个终端,并将它们放在不同的标签中。现在,我可以在单个标签下运行一个 tmux 会话内的所有内容,并且如果需要重新启动 X,可以分离和重新附加而不会丢失状态。
答案3
使用两者:平铺窗口管理器和终端多路复用器。
结合双方的能力和优势,获得更好的协同效应。在我的 i3 设置上,我经常显示多个终端同时,但所有这些都连接到相同的 tmux 会话,这样我就可以显示任何终端中的所有 tmux 窗口。
实际上,我使用平铺功能来i3
替换/增强终端多路复用器的窗口分割/移动功能,以(恕我直言)获得两全其美的效果。
这里使用以下脚本来管理会话/检测连接并在终端启动时进行清理:
#!/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
答案4
不会。在屏幕内的屏幕或 tmux 内的 tmux 很有用的极少数情况下,这两个程序都提供了将控制传递给嵌套实例的简单方法。
Screen 提供了串行控制台功能,但我只在需要时使用专用应用程序(与 python 一起分发的 miniterm.py)。否则,我无法立即想到任何一个可以做而另一个不能做的事情,但一个可能会比另一个更简单。
我会学习其中之一,如果您对自己选择的内容感到好奇或不满意,请尝试另一个。我个人更喜欢 tmux。