Linux中國

使用此開源窗口環境一次運行多個控制台

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

通過 twin 克服「一個屏幕,一個應用程序」的限制

還有人記得 DESQview 嗎?我們在 Windows、Linux 和 MacOS 中理所當然地可以在屏幕上同時運行多個程序,而 DESQview 賦予了 DOS 同樣的功能。在我運營撥號 BBS 服務的初期,DESQview 是必需的,它使我能夠讓 BBS 在後台運行,同時在前台進行其他操作。例如,當有人撥打電話時,我可能正在開發新功能或設置新的外部程序而不會影響他們的體驗。後來,在我早期做支持工作的時候,我可以同時運行我的工作電子郵件(MHS 上的 DaVinci 電子郵件)、支持單據系統和其他 DOS 程序。這是令人吃驚的!

![twin](/data/attachment/album/202002/14/193831t2wzxz9x83sfn9xz.png "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](/data/attachment/album/202002/14/193722c77hccnzcf2z5c5w.png "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](/data/attachment/album/202002/14/193731yec0g5lxeac5mn58.png "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](/data/attachment/album/202002/14/193745suzojufu1usqcfk9.png "twin")

這將為登錄的用戶啟動一個 twin 會話。我不建議在多用戶系統中使用此會話,但是對於個人桌面來說,這是很酷的。並且,通過使用 twattachtwdisplay,你可以從本地 GUI 或遠程桌面訪問該會話。

我認為 twin 真是太酷了。它還有一些細節不夠完善,但是基本功能都已經有了,並且有一些非常好的文檔。另外,它也使我可以在現代操作系統上稍解對 DESQview 式的體驗的渴望。我希望隨著時間的推移它會有所改進,希望你和我一樣喜歡它。

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

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

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


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國