我使用哪種終端類型?

我使用哪種終端類型?

我已經用 Ubuntu 12.04 和 Debian 7 對此進行了測試。

echo $TERM

我明白了

xterm

但如果我使用下拉式選單“幫助”>“關於”,那麼它會顯示gnome terminal 3.4.1.1

這是否意味著我只使用 gnome-terminal ?或只是xterm?還是 gnome-terminal 是 xterm 的擴充?我很困惑。

答案1

$TERM為了什麼?

$TERM變數供應用程式使用以利用該終端的功能。

例如,如果程式想要顯示彩色文本,它必須先找出您使用的終端是否支援彩色文本,然後如果支持,則如何顯示彩色文字。

其工作原理是系統保留已知終端及其功能的庫。在大多數系統上/usr/share/terminfo(還有 termcap,但它是遺留的,不再使用了)。

假設您有一個程式想要顯示紅色文字。它基本上會呼叫 terminfo 庫,上面寫著“給我我必須為 xterm 終端發送紅色文字的位元組序列「。然後它只需要這些位元組並將它們列印出來。
您可以透過執行以下操作自己嘗試tput setf 4; echo hi。這將獲得setfterminfo 功能並向其傳遞一個參數4,這是您想要的顏色。


為什麼 gnome 終端會說謊:

現在假設您有一些剛發布的閃亮的新終端模擬器,並且系統的 terminfo 庫還沒有它的定義。當您的應用程式去尋找如何執行某些操作時,它會失敗,因為終端未知。

你的終端解決這個問題的方法是謊報它是誰。所以你的 gnome 終端顯示“我是 xterm」。

Xterm 是一個非常基本的終端,自 X11 誕生以來就已經存在,因此大多數終端模擬器都支援它所支援的功能。因此,透過 gnome 終端機說它是一個 xterm,它更有可能在 terminfo 庫中有一個定義。

謊報終端類型的缺點是終端實際上可能支援比 xterm 更多的功能(例如,許多新終端支援 256 種顏色,而舊終端僅支援 16 種顏色)。因此,您需要進行權衡,是獲得更多功能,還是擁有更多相容性。大多數終端會選擇更高的兼容性,因此選擇將自己宣傳為xterm.

如果您想覆蓋此設置,許多終端將提供某種配置該行為的方法。但你也可以這樣做export TERM=gnome-terminal

答案2

環境TERM變數表示終端類型,不是終端應用TERM有一個特定的目的:它告訴在該終端中運行的應用程式如何與終端互動。

應用程式透過編寫轉義序列與終端進行交互,轉義序列是包含不可列印字元的字元序列,具有移動遊標、擦除部分螢幕、更改當前顏色等效果。功能。因此,作業系統維護終端類型及其特徵的資料庫。傳統的資料庫是術語帽(“終端能力”);許多現代系統和應用程式已經轉向術語訊息。這兩個資料庫均按終端類型名稱進行索引,應用程式使用TERM環境變數中的終端類型名稱來查詢它們。

如今,大多數終端都使用標準轉義序列集具有一些常見的擴展集,因此您不會看到許多不同的TERM.大多數 GUI 終端仿真器都相容xterm,傳統的X終端(仍在使用和維護)。

與 xterm 不同的終端模擬器可能會以自己的名稱將自己的條目新增至終端資料庫。然而,這與遠端 shell 並不能很好地配合。一個程式在A機上運行,但在B機上顯示,例如從B到A是透過ssh啟動的,需要查詢A機上的終端資料庫TERM。資料庫也有A 上的價值用戶的TERM=xterm條目時,這才有用。

總的來說,終端之間的差異並不在於應用程式與它們互動的方式,而是在於終端與使用者互動以及適應其環境的方式。例如,Gnome Terminal 在 Gnome 上看起來不錯,並提供選項卡和其他細節; Konsole 在 KDE 上看起來不錯,並提供選項卡和其他細節; urxvt 的記憶體需求較小; Console2 在 Windows 上運作; screen 和 tmux 提供可以附加到不同父終端機的會話;等等。由於這些功能都不會影響終端中運行的應用程序,因此大多數終端模擬器都使用TERM=xterm.

若要找出 shell 正在哪個終端運行(假設 shell 直接在終端機中執行),請查看 shell 的父級:

ps -p$PPID

答案3

環境變數 TERM 並不代表您正在使用的終端。

引用 gnu.org:

環境變數 TERM 包含文字視窗功能的識別碼。您可以使用 > 'infocmp' 命令來取得這些功能的詳細列表,並使用 'man 5 terminfo' 作為參考。

當產生帶有嵌入顏色指令的文字時,msgcat 會查看 TERM 變數。如今的文字視窗通常至少支援 8 種顏色。然而,文字視窗通常支援 16 種或更多顏色,即使 TERM 變數設定為僅表示 8 種支援顏色的識別碼。在這些情況下,值得將 TERM 變數設定為不同的值:

xterm在大多數情況下,它支援 16 種顏色。它還可以支援 88 或 256 色(但不能同時支援兩者)。您可以嘗試將 TERM 設定為 xterm-16color、xterm-88color 或 xterm-256color。接收值

接收值通常支援 16 種顏色。您可以嘗試將 TERM 設定為 rxvt-16color。主機

主機Too 通常支援 16 種顏色。您可以嘗試將 TERM 設定為 konsole-16color 或 xterm-16color。

設定 TERM 後,您可以透過呼叫“msgcat --color=test”來驗證它並查看輸出是否看起來像合理的顏色圖。環境變數 TERM 包含文字視窗功能的識別碼。您可以使用「infocmp」指令來取得這些功能的詳細列表,並使用「man 5 terminfo」作為參考。

答案4

我認為值得注意的是,您可以透過運行找到您最初問題的答案ps -p $$,即了解當前pid的進程是什麼。範例輸出為:

    PID TTY          TIME CMD
3045221 pts/17   00:00:00 bash

這很清楚它是什麼終端。

相關內容