使用此开源窗口环境同时运行多个控制台

在我们关于 2020 年使用开源提高效率的 20 种方法的系列文章的第十四篇中,使用 twin 模拟老式的 DESQview 体验。
103 位读者喜欢这个。
Digital creative of a browser on the internet

去年,我为您带来了 19 天的 2019 年新的(对您而言)生产力工具。今年,我采取了不同的方法:构建一个环境,让您在新的一年中使用您可能已经在使用或可能没有使用的工具来提高工作效率。

使用 twin 克服“一个屏幕,一个应用程序”的限制

谁还记得 DESQview 吗?它在 DOS 中实现了我们现在在 Windows、Linux 和 MacOS 中认为理所当然的功能——即能够同时运行多个程序并在屏幕上显示。在我早期运行拨号 BBS 的日子里,DESQview 是必不可少的——它使我能够在后台运行 BBS,同时在前台做其他事情。例如,我可以在有人拨号登录的情况下开发新功能或设置新的外部程序,而不会影响他们的体验。后来,在我早期提供支持时,我可以同时运行我的工作电子邮件(MHS 上的 DaVinci 电子邮件)、支持票务系统和其他 DOS 程序。这太棒了!

twin

自那时以来,运行多个控制台应用程序已经走了很长一段路。但是像 tmuxScreen 这样的应用程序仍然遵循“一个屏幕,一个应用程序”的显示方式。好吧,是的,tmux 具有屏幕分割和窗格,但不像 DESQview 那样,能够将窗口“浮动”在其他窗口之上,我个人很怀念这一点。

进入 twin,文本模式窗口环境。在我看来,这个相对年轻的项目是 DESQview 的精神继承者。它支持控制台和图形环境,以及从会话分离和重新连接到会话的能力。它不像某些东西那样容易设置,但它可以在大多数现代操作系统上运行。

Twin 是从源代码安装的(目前)。但首先,您需要安装所需的开发库。库名称因操作系统而异。以下示例显示了我的 Ubuntu 19.10 安装。安装库后,从 Git 检出 twin 源代码并运行 ./configuremake,它应该自动检测所有内容并构建 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.hinclude/twautoconf.h 中的 #define socklen_t int。这个问题应该通过 twin 问题编号 57 解决。

twin text mode

首次调用 twin 可能有点挑战性。您需要使用 --hw 参数告诉它正在使用的显示器类型。例如,要启动文本模式版本的 twin,您需要输入 twin --hw=tty,TERM=linuxTERM 变量指定覆盖 shell 中当前终端变量。要启动图形版本,请运行 twin --hw=X@$DISPLAY。在 Linux 上,twin 大多“开箱即用”,而在 MacOS 上,它主要仅在终端中工作。

真正 的乐趣在于能够使用 twattachtwdisplay 命令连接到正在运行的会话。它们允许您连接到其他地方正在运行的 twin 会话。例如,在我的 Mac 上,我可以运行以下命令来连接到我的演示框上运行的 twin 会话

twdisplay --twin@20days2020.local:0 --hw=tty,TERM=linux

remote twin session

通过一些额外的工作,您还可以将其用作控制台上 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

这将为登录用户启动 twin 会话。我不建议将其用于多用户系统,但对于个人桌面来说非常酷。并且,通过使用 twattachtwdisplay,您可以从本地 GUI 或远程桌面访问该会话。

我认为 twin 非常酷。它有一些粗糙的地方,但基本功能已经存在,并且它有一些非常好的文档。此外,它满足了我对现代操作系统上类似 DESQview 体验的渴望。我期待随着时间的推移不断改进,我希望您像我一样喜欢它。

接下来阅读什么
标签
User profile image.
Kevin Sonney 是一位技术专业人士、媒体制作人和播客。作为 Linux 系统管理员和开源倡导者,Kevin 在 IT 行业拥有超过 25 年的经验,在开源领域拥有超过 15 年的经验。他目前在 elastic 担任 SRE。

5 条评论

哇!这太棒了。您的文章一直很精彩。每天您都让我看到一些新的东西。

感谢您的文章!我正在考虑将我的桌面环境迁移到 CLI,以便能够以全功能 DE 提供的相同舒适度远程控制我的机器。

我已经习惯了 tmux,我已经切换到 mpd 和 nncmpp 用于音乐,lazygit... 我甚至不再需要通过 VNC 连接了。^_^

在浮动/平铺窗口管理器(如 i3 或 bspwm)中使用 twin 而不是 Screen/tmux 有什么优势吗?

这非常棒,但由于某种原因,箭头键似乎不起作用。我会弄清楚的,但是没有箭头键使用 nvlc 真的是一种痛苦

我找到了一种方法,通过使用菜单上的“执行”并选中“在终端中运行”来运行应用程序

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.