去年,我为您带来了 19 天的 2019 年新的(对您而言)生产力工具。今年,我采取了不同的方法:构建一个环境,让您在新的一年中使用您可能已经在使用或可能没有使用的工具来提高工作效率。
使用 twin 克服“一个屏幕,一个应用程序”的限制
谁还记得 DESQview 吗?它在 DOS 中实现了我们现在在 Windows、Linux 和 MacOS 中认为理所当然的功能——即能够同时运行多个程序并在屏幕上显示。在我早期运行拨号 BBS 的日子里,DESQview 是必不可少的——它使我能够在后台运行 BBS,同时在前台做其他事情。例如,我可以在有人拨号登录的情况下开发新功能或设置新的外部程序,而不会影响他们的体验。后来,在我早期提供支持时,我可以同时运行我的工作电子邮件(MHS 上的 DaVinci 电子邮件)、支持票务系统和其他 DOS 程序。这太棒了!

自那时以来,运行多个控制台应用程序已经走了很长一段路。但是像 tmux 和 Screen 这样的应用程序仍然遵循“一个屏幕,一个应用程序”的显示方式。好吧,是的,tmux 具有屏幕分割和窗格,但不像 DESQview 那样,能够将窗口“浮动”在其他窗口之上,我个人很怀念这一点。
进入 twin,文本模式窗口环境。在我看来,这个相对年轻的项目是 DESQview 的精神继承者。它支持控制台和图形环境,以及从会话分离和重新连接到会话的能力。它不像某些东西那样容易设置,但它可以在大多数现代操作系统上运行。
Twin 是从源代码安装的(目前)。但首先,您需要安装所需的开发库。库名称因操作系统而异。以下示例显示了我的 Ubuntu 19.10 安装。安装库后,从 Git 检出 twin 源代码并运行 ./configure 和 make,它应该自动检测所有内容并构建 twin
sudo apt install libx11-dev libxpm-dev libncurses-dev zlib1g-dev libgpm-dev
git clone git@github.com:cosmos72/twin.git
cd twin
./configure
make
sudo make install
注意:如果您在 MacOS 或 BSD 上编译此代码,您需要在运行 make 之前注释掉文件 include/Tw/autoconf.h 和 include/twautoconf.h 中的 #define socklen_t int。这个问题应该通过 twin 问题编号 57 解决。

首次调用 twin 可能有点挑战性。您需要使用 --hw 参数告诉它正在使用的显示器类型。例如,要启动文本模式版本的 twin,您需要输入 twin --hw=tty,TERM=linux。 TERM 变量指定覆盖 shell 中当前终端变量。要启动图形版本,请运行 twin --hw=X@$DISPLAY。在 Linux 上,twin 大多“开箱即用”,而在 MacOS 上,它主要仅在终端中工作。
真正 的乐趣在于能够使用 twattach 和 twdisplay 命令连接到正在运行的会话。它们允许您连接到其他地方正在运行的 twin 会话。例如,在我的 Mac 上,我可以运行以下命令来连接到我的演示框上运行的 twin 会话
twdisplay --twin@20days2020.local:0 --hw=tty,TERM=linux

通过一些额外的工作,您还可以将其用作控制台上 getty 的登录 shell。这需要 gdm 鼠标守护进程、twdm 应用程序(包含)和一些额外的配置。在使用 systemd 的系统上,首先安装并启用 gdm(如果尚未安装)。然后使用 systemctl 为控制台创建覆盖(我使用了 tty6)。命令必须以 root 用户身份运行;在 Ubuntu 上,它们看起来像这样
apt install gdm
systemctl enable gdm
systemctl start gdm
systemctl edit getty@tty6
systemctl edit getty@tty6 命令将打开一个名为 override.conf 的空文件。这定义了 systemd 服务设置以覆盖控制台 6 的默认设置。将内容更新为
[service]
ExecStart=
ExecStart=-/usr/local/sbin/twdm --hw=tty@/dev/tty6,TERM=linux
StandardInput=tty
StandardOutput=tty
现在,重新加载 systemd 并重启 tty6 以获得 twin 登录提示符
systemctl daemon-reload
systemctl restart getty@tty6

这将为登录用户启动 twin 会话。我不建议将其用于多用户系统,但对于个人桌面来说非常酷。并且,通过使用 twattach 和 twdisplay,您可以从本地 GUI 或远程桌面访问该会话。
我认为 twin 非常酷。它有一些粗糙的地方,但基本功能已经存在,并且它有一些非常好的文档。此外,它满足了我对现代操作系统上类似 DESQview 体验的渴望。我期待随着时间的推移不断改进,我希望您像我一样喜欢它。
5 条评论