使用此開源視窗環境一次執行多個控制檯

Kevin Sonney發表於2020-02-14

在我們的 20 個使用開源提升生產力的系列的第十四篇文章中用 twin 模擬了老式的 DESQview 體驗。

去年,我在 19 天裡給你介紹了 19 個新(對你而言)的生產力工具。今年,我換了一種方式:使用你在使用或者還沒使用的工具,構建一個使你可以在新一年更加高效的環境。

通過 twin 克服“一個螢幕,一個應用程式”的限制

還有人記得 DESQview 嗎?我們在 Windows、Linux 和 MacOS 中理所當然地可以在螢幕上同時執行多個程式,而 DESQview 賦予了 DOS 同樣的功能。在我運營撥號 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=linux。這裡指定的 TERM 變數替代了你當前 Shell 中終端變數。要啟動圖形版本,執行 twin --hw=X@$DISPLAY。在 Linux 上,twin 一般都“可以正常工作”,而在 MacOS 上,Twin 基本是隻能在終端上使用。

真正的樂趣是可以通過 twattachtwdisplay 命令接駁到正在執行的會話的功能。它們使你可以接駁到其他正在執行的 twin 會話。例如,在 Mac 上,我可以執行以下命令以接駁到演示機器上執行的 twin 會話:

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

remote twin session

通過多做一些工作,你還可以將其用作登入外殼,以代替控制檯上的 getty。這需要 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 服務設定以覆蓋 tty6 的預設設定。將內容更新為:

[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 式的體驗的渴望。我希望隨著時間的推移它會有所改進,希望你和我一樣喜歡它。


via: https://opensource.com/article/20/1/multiple-consoles-twin

作者:Kevin Sonney 選題:lujun9972 譯者:wxy 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

使用此開源視窗環境一次執行多個控制檯

訂閱“Linux 中國”官方小程式來檢視

相關文章