与切片窗口管理器一起使用时,终端多路复用器有什么好处吗?


11

终端多路复用器(屏幕,tmux)和键盘驱动的平铺窗口管理器(ratpoison,dwm,xmonad)都提供相似的功能。同时使用两者有什么好处吗?可能出现的问题呢?


1
他们是这样?我能想到的唯一重叠特征是能够将窗口分成多个窗口
Michael Mrozek

@MichaelMrozek我对他们两个都有0经验,所以我只涉及一些我读过的东西。如果您能指出一些差异,那就太好了。
Pubby

3
请注意,对于窗口管理器来说,每个窗口都是一个窗口,仅此而已。因此,除了窗口拆分之外,WM无法使用许多与终端相关的东西。
sr_

Answers:


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

不会。在少数情况下,屏幕内部的screen或tmux内部的tmux很有用,这两个程序都提供了将控制传递给嵌套实例的简单方法。

屏幕提供了串行控制台功能,但是当我需要时,我只使用专用的应用程序(随python分发的miniterm.py)。否则,我不会想到任何事情都可以做而另一个不能做的事情,但是一个做起来可能比另一个简单。

我会学习其中一个,如果您对选择的内容感到好奇或不满意,请尝试另一个。我个人更喜欢tmux。


0

在这种情况下,终端多路复用器的另一个有用方面是在连接到远程服务器之后。我发现一个典型的用例是

  1. 在我的本地PC上打开一个终端窗口。
  2. ssh到远程服务器。
  3. 现在,tmux / screen可以在远程服务器上提供多路复用,从而可以轻松打开远程服务器上的新终端/外壳。与在本地PC上打开第二个终端并与第二个SSH重新连接相比,这少了一步。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.