DomTerm:一款為 Linux 打造的終端模擬器

2021-02-15 Linux愛好者

(給Linux愛好者加星標,提升Linux技能)

英文:Per Bothner,翻譯:Linux中國/Liwen Jiang

linux.cn/article-10819-1.html

了解一下 DomTerm,這是一款終端模擬器和復用器,帶有 HTML 圖形和其它不多見的功能。

DomTerm 是一款現代化的終端模擬器,它使用瀏覽器引擎作為 「GUI 工具包」。這就支持了一些相關的特性,例如可嵌入圖像和連結、HTML 富文本以及可摺疊(顯示/隱藏)命令。除此以外,它看起來感覺就像一個功能完整、獨立的終端模擬器,有著出色 xterm 兼容性(包括滑鼠處理和 24 位色)和恰當的 「裝飾」 (菜單)。另外它內置支持了會話管理和副窗口(如同 tmux 和 GNU Screen 中一樣)、基本輸入編輯(如在 readline 中)以及分頁(如在 less 中)。

圖 1: DomTerminal 終端模擬器。

在以下部分我們將看一看這些特性。我們將假設你已經安裝好了 domterm (如果你需要獲取並構建 Dormterm 請跳到本文最後)。開始之前先讓我們概覽一下這項技術。

前端 vs. 後端

DomTerm 大部分是用 JavaScript 寫的,它運行在一個瀏覽器引擎中。它可以是像例如 Chrome 或者 Firefox 一樣的桌面瀏覽器(見圖 3),也可以是一個內嵌的瀏覽器。使用一個通用的網頁瀏覽器沒有問題,但是用戶體驗卻不夠好(因為菜單是為通用的網頁瀏覽而不是為了終端模擬器所打造),並且其安全模型也會妨礙使用。因此使用內嵌的瀏覽器更好一些。

目前以下這些是支持的:

qdomterm,使用了 Qt 工具包 和 QtWebEngine

一個內嵌的 Electron(見圖 1)

atom-domterm 以 Atom 文本編輯器(同樣基於 Electron)包的形式運行 DomTerm,並和 Atom 面板系統集成在一起(見圖 2)

一個為 JavaFX 的 WebEngine 包裝器,這對 Java 編程十分有用(見圖 4)

之前前端使用 Firefox-XUL 作為首選,但是 Mozilla 已經終止了 XUL

圖 2:在 Atom 編輯器中的 DomTerm 終端面板。

目前,Electron 前端可能是最佳選擇,緊隨其後的是 Qt 前端。如果你使用 Atom,atom-domterm 也工作得相當不錯。

後端伺服器是用 C 寫的。它管理著偽終端(PTY)和會話。它同樣也是一個為前端提供 Javascript 和其它文件的 HTTP 伺服器。domterm 命令啟動終端任務和執行其它請求。如果沒有伺服器在運行,domterm 就會自己來服務。後端與伺服器之間的通訊通常是用 WebSockets(在伺服器端是libwebsockets)完成的。然而,JavaFX 的嵌入既不用 Websockets 也不用 DomTerm 伺服器。相反 Java 應用直接通過 Java-Javascript 橋接進行通訊。

一個穩健的可兼容 xterm 的終端模擬器

DomTerm 看上去感覺像一個現代的終端模擬器。它處理滑鼠事件、24 位色、Unicode、倍寬字符(CJK)以及輸入方式。DomTerm 在 vttest 測試套件 上工作地十分出色。

其不同尋常的特性包括:

展示/隱藏按鈕(「摺疊」): 小三角(如上圖 2)是隱藏/展示相應輸出的按鈕。僅需在提示符中添加特定的轉義字符就可以創建按鈕。

對於 readline 和類似輸入編輯器的滑鼠點擊支持: 如果你點擊輸入區域(黃色),DomTerm 會向應用發送正確的方向鍵按鍵序列。(可以通過提示符中的轉義字符啟用這一特性,你也可以通過 Alt+點擊 強制使用。)

用 CSS 樣式化終端: 這通常是在 ~/.domterm/settings.ini 裡完成的,保存時會自動重載。例如在圖 2 中,設置了終端專用的背景色。

一個更好的 REPL 控制臺

一個經典的終端模擬器基於長方形的字符單元格工作的。這在 REPL(命令行)上沒問題,但是並不理想。這裡有些通常在終端模擬器中不常見的 REPL 很有用的 DomTerm 特性:

一個能「列印」圖片、圖形、數學公式或者一組可點擊的連結的命令: 應用可以發送包含幾乎任何 HTML 的轉義字符。(HTML 會被剔除部分,以移除 JavaScript 和其它危險特性。)

圖 3 顯示了來自 gnuplot 會話的一個片段。Gnuplot(2.1 或者跟高版本)支持 DormTerm 作為終端類型。圖形輸出被轉換成 SVG 圖片,然後被列印到終端。我的博客帖子在 DormTerm 上的 Gnuplot 展示在這方面提供了更多信息。

圖 3:Gnuplot 截圖。

Kawa 語言有一個創建並轉換幾何圖像值的庫。如果你將這樣的圖片值列印到 DomTerm 終端,圖片就會被轉換成 SVG 形式並嵌入進輸出中。

圖 4:Kawa 中可計算的幾何形狀。

富文本輸出: 有著 HTML 樣式的幫助信息更加便於閱讀,看上去也更漂亮。圖片 1 的下面面板展示 dormterm help 的輸出。(如果沒在 DomTerm 下運行的話輸出的是普通文本。)注意自帶的分頁器中的 PAUSED 消息。

包括可點擊連結的錯誤消息: DomTerm 可以識別語法 filename:line:column 並將其轉化成一個能在可定製文本編輯器中打開文件並定位到行的連結。(這適用於相對路徑的文件名,如果你用 PROMPT_COMMAND 或類似的跟蹤目錄。)

編譯器可以偵測到它在 DomTerm 下運行,並直接用轉義字符發出文件連結。這比依賴 DomTerm 的樣式匹配要穩健得多,因為它可以處理空格和其他字符並且無需依賴目錄追蹤。在圖 4 中,你可以看到來自 Kawa Compiler 的錯誤消息。懸停在文件位置上會使其出現下劃線,file: URL 出現在 atom-domterm 消息欄(窗口底部)中。(當不用 atom-domterm 時,這樣的消息會在一個浮層的框中顯示,如圖 1 中所看到的 PAUSED 消息所示。)

點擊連結時的動作是可以配置的。默認對於帶有 #position 後綴的 file: 連結的動作是在文本編輯器中打開那個文件。

結構化內部表示:以下內容均以內部節點結構表示:命令、提示符、輸入行、正常和錯誤輸出、標籤,如果「另存為 HTML」,則保留結構。HTML 文件與 XML 兼容,因此你可以使用 XML 工具搜索或轉換輸出。命令 domterm view-saved 會以一種啟用命令摺疊(顯示/隱藏按鈕處於活動狀態)和重新調整窗口大小的方式打開保存的 HTML 文件。

內建的 Lisp 樣式優美列印: 你可以在輸出中包括優美列印指令(比如,grouping),這樣斷行會根據窗口大小調整而重新計算。查看我的文章 DomTerm 中的動態優美列印以更深入探討。

基本的內建行編輯,帶著歷史記錄(像 GNU readline 一樣): 這使用瀏覽器自帶的編輯器,因此它有著優秀的滑鼠和選擇處理機制。你可以在正常字符模式(大多數輸入的字符被指接送向進程);或者行模式(通常的字符是直接插入的,而控制字符導致編輯操作,回車鍵會向進程發送被編輯行)之間轉換。默認的是自動模式,根據 PTY 是在原始模式還是終端模式中,DomTerm 在字符模式與行模式間轉換。

自帶的分頁器(類似簡化版的 less):鍵盤快捷鍵控制滾動。在「頁模式」中,輸出在每個新的屏幕(或者單獨的行,如果你想一行行地向前移)後暫停;頁模式對於用戶輸入簡單智能,因此(如果你想的話)你無需阻礙交互式程序就可以運行它。

多路復用和會話

標籤和平鋪: 你不僅可以創建多個終端標籤,也可以平鋪它們。你可以要麼使用滑鼠或鍵盤快捷鍵來創建或者切換面板和標籤。它們可以用滑鼠重新排列並調整大小。這是通過 GoldenLayout JavaScript 庫實現的。圖 1 展示了一個有著兩個面板的窗口。上面的有兩個標籤,一個運行 Midnight Commander;底下的面板以 HTML 形式展示了 dormterm help 輸出。然而相反在 Atom 中我們使用其自帶的可拖拽的面板和標籤。你可以在圖 2 中看到這個。

分離或重接會話: 與 tmux 和 GNU screen 類似,DomTerm 支持會話安排。你甚至可以給同樣的會話接上多個窗口或面板。這支持多用戶會話分享和遠程連結。(為了安全,同一個伺服器的所有會話都需要能夠讀取 Unix 域接口和一個包含隨機密鑰的本地文件。當我們有了良好、安全的遠程連結,這個限制將會有所放鬆。)

domterm 命令 類似與 tmux 和 GNU screen,它有多個選項可以用於控制或者打開單個或多個會話的伺服器。主要的差別在於,如果它沒在 DomTerm 下運行,dormterm 命令會創建一個新的頂層窗口,而不是在現有的終端中運行。

與 tmux 和 git 類似,dormterm 命令有許多子命令。一些子命令創建窗口或者會話。另一些(例如「列印」一張圖片)僅在現有的 DormTerm 會話下起作用。

命令 domterm browse 打開一個窗口或者面板以瀏覽一個指定的 URL,例如瀏覽文檔的時候。

獲取並安裝 DomTerm

DomTerm 可以從其 Github 倉庫獲取。目前沒有提前構建好的包,但是有詳細指導。所有的前提條件在 Fedora 27 上都有,這使得其特別容易被搭建。

看完本文有收穫?請分享給更多人

關注「Linux 愛好者」加星標,提升Linux技能

好文章,我在看❤️

相關焦點

  • 回顧最佳的9款Linux終端模擬器
    終端模擬器使您能夠訪問內核,並釋放系統的真正力量。儘管大多數用戶對Linux發行版的默認終端仿真器感到滿意,但是可以選擇嘗試不同的終端模擬器並使用它來解決問題。在這裡,我將為初學者和高級Linux用戶分享9個最佳的Linux終端模擬器的通用列表讓我從Gnome桌面的默認設置開始。Gnome終端模擬器是針對Linux Gnome桌面環境的最佳Linux終端仿真器之一。
  • 4 個獨特的 Linux 終端模擬器 | Linux 中國
    這四個不同的終端模擬器 —— 不僅可以完成工作,還可以增加一些樂趣。讓我們面對現實,如果你是 Linux 管理員,那麼你要用命令行來工作。為此,你將使用終端模擬器(LCTT 譯註:常簡稱為「終端」,與終端本身的原意不同)。最有可能的是,你選擇的發行版預先安裝了一個可以完成工作的默認終端模擬器。但這是有很多選擇可供選擇的 Linux,所以這種思想自然也適用於終端模擬器。
  • Linux系統管理員不容錯過的七款開源終端模擬器
    而要想從系統的圖形界面當中獲取對應shell,我們必須要藉助終端模擬器的力量。系統管理員不容錯過的七款開源終端模擬器通過認真比較,我收集到了各款終端在默認配置條件下運行htop時的屏幕截圖。當然,每款終端應用程式都或多或少允許我們在多種角度下對其進行自定義,因此這些模擬器在我這臺設備上的運行效果並不代表著其在各個設備上的實際效果。
  • 12 款 Linux 終端推薦
    我這裡搜集了一些非常有趣的終端軟體,可以用來替代debian系的Linux原生終端。Tilda這是一款可配置的雷神之錘風格的終端工具,也就是說,當用戶敲擊配置好的熱鍵(預設是F1)時,這個終端會從屏幕的頂端滑出,就跟雷神之錘遊戲中的效果一樣。
  • Terminix:一個很贊的基於 GTK3 的平鋪式 Linux 終端模擬器
    現在,你可以很容易的找到大量的 Linux 終端模擬器[1],每一個都可以給用戶留下深刻的印象。
  • 打造一款個性化的Windows終端
    打造一款個性化的Windows終端摘錄一段官網上的介紹:Cmder is a software
  • Guake 終端:一個靈感來自於 FPS 遊戲的 Linux 終端 | Linux 中國
    https://linux.cn/article-13187-1.html作者:Ankush Das譯者:geekpiGuake 終端:GNOME 桌面中自上而下終端Guake 是一款為 GNOME 桌面量身定做的終端模擬器,採用下拉式設計。它最初的靈感來自於一款 FPS 遊戲(Quake)中的終端。
  • 10 個常見的 Linux 終端仿真器
    因此,在這篇文章中,你可以了解 Linux 用戶有哪些優秀的終端仿真器可以選擇。1、Terminator這個項目的目標是創造一個能夠很好排列終端的有用工具。它受到一些如 gnome-multi-term、quadkonsole 等程序的啟發,重點是以網格的形式排列終端。
  • 系統管理員不容錯過的七款開源終端模擬器
    而要想從系統的圖形界面當中獲取對應shell,我們必須要藉助終端模擬器的力量。系統管理員不容錯過的七款開源終端模擬器通過認真比較,我收集到了各款終端在默認配置條件下運行htop時的屏幕截圖。當然,每款終端應用程式都或多或少允許我們在多種角度下對其進行自定義,因此這些模擬器在我這臺設備上的運行效果並不代表著其在各個設備上的實際效果。
  • 認識eDEX-UI,這是一款受科幻啟發的Linux終端模擬器,具有一些很酷的功能
    eDEX-UI是一個開放原始碼的跨平臺終端仿真器,可為您提供受科幻啟發的外觀以及有用的一些功能。它最初的靈感來自不再維護的DEX UI項目。即使eDEX-UI更加注重終端的外觀和未來派主題,它也可以兼作Linux的系統監視工具。如何做到?因為它在您在終端上工作時會在邊欄中顯示系統統計信息。實際上,開發人員提到打算將其改進為可用的sysadmin工具。
  • 無需 root 實現在 Android 設備上運行 Linux | Linux 中國
    編譯自 | https://www.ostechnix.com/termux-run-linux-android-devices-no-rooting-required
  • 打造你的超級手機,Termux 高級終端安裝使用配置教程
    Termux 是一個 Android 下一個高級的終端模擬器,開源且不需要 root,支持 apt 管理軟體包,十分方便安裝軟體包,完美支持 Python、 PHP、 Ruby、 Nodejs、 MySQL等。隨著智能設備的普及和性能的不斷提升,如今的手機、平板等的硬體標準已達到了初級桌面計算機的硬體標準,用心去打造 DIY 的話完全可以把手機變成一個強大的極客工具。
  • 基於Termux打造Android手機滲透神器
    作者:blackwolfsec地址:http://blackwolfsec.cc/2016/12/10/termux/0x00前言    Termux是一款開源且不需要root,運行在Android終端上極其強大的linux模擬器,支持apt管理軟體包,完美支持python,ruby,go
  • Linux上安裝使用最快的 GPU 加速的終端仿真器Alacritty
    作者:Linux迷連結:https://www.linuxmi.com/7-linux-gpu-jiankong.html這個簡單的教程展示了如何通過
  • 又一款受Vi/Vim啟發的Linux終端文本編輯器
    Amp是一個輕量級,功能齊全的受Vi/Vim啟發的文本編輯器,適用於Linux終端,用Rust編寫。
  • 海量的超讚 Linux 軟體
    BlueJ - 一款為新手設計的免費 Java 開發環境,世界範圍內數百萬人使用。 Clion - 一款強大的跨平臺 C 以及 C++ IDE。Code::Blocks - Code::Blocks 是一款為滿足大部分用戶需求構建的免費的 C,C++ 以及 Fortran IDE。
  • 打造windows下的linux子系統並美化終端
    由於每次滲透測試,都需要開kali,所以覺得比較麻煩,剛好趁著重新安裝作業系統,把C盤的空間給大一點,直接利用linux的windows子系統,安裝一個kali,內存消耗也小。安裝linux子系統需要先啟用「適用於 Linux 的 Windows 子系統」可選功能,然後才能在 Windows 上安裝 Linux 分發。
  • 10 個常見的 Linux 終端仿真器 | Linux 中國
    主要亮點:Terminator 是一款非常流行的終端仿真器,目前仍在維護中(從 Launchpad 移到了 GitHub)。它基本上是在一個窗口中為你提供了多個 GNOME 終端。主要亮點:如果你不是特別想找一款可以幫助你更快的完成工作的終端仿真器,那麼 eDEX-UI 絕對是你應該嘗試的。對於科幻迷和只想讓自己的終端看起來獨特的用戶來說,這絕對是一款漂亮的終端仿真器。
  • 讓你的 Linux 終端變得酷炫復古 | Linux 中國
    那就安裝復古終端應用程式 cool-retro-term 吧 —— 顧名思義,它既酷又復古。你還記得那個到處都是 CRT 顯示器,終端屏幕經常閃爍的年代嗎?你不需要那麼老,就能見證它的存在。如果你看上世紀九十年代初的電影,你會看到大量的 CRT 顯示器和綠色/黑白的命令提示符。那種極客的光環,讓它感覺很酷。
  • 海量的超讚 Linux 軟體(上)
    BlueJ - 一款為新手設計的免費 Java 開發環境,世界範圍內數百萬人使用。 Clion - 一款強大的跨平臺 C 以及 C++ IDE。Code::Blocks - Code::Blocks 是一款為滿足大部分用戶需求構建的免費的 C,C++ 以及 Fortran IDE。