Linux 控制台

出自 Arch Linux 中文维基

根據維基百科

Linux 控制台Linux 內核內部的一個系統控制台。Linux 控制台為內核和其他進程提供了一種向用戶發送文本輸出並接收用戶文本輸入的方式。用戶通常用計算機鍵盤輸入文本,並在計算機顯示器上閱讀輸出的文本。Linux 內核支持虛擬控制台——在邏輯上獨立的控制台,但它們訪問相同的物理鍵盤和顯示器。

本文介紹了 Linux 控制台的基礎知識以及如何配置字體顯示。/Keyboard configuration 子頁面中描述了鍵盤配置。

實現[編輯 | 編輯原始碼]

與大多數直接與用戶交互的服務不同,控制台是在內核中實現的。這與終端仿真軟件形成鮮明對比,如 Xterm,它是一個在用戶空間實現的普通的應用程序。控制台一直是發布的 Linux 內核的一部分,但在其歷史上經歷了一些變化,最明顯的是過渡到使用 framebuffer 以及對 Unicode 的支持。

雖然對控制台進行了許多改進,但它對舊硬件完全的向後兼容性意味着與圖形終端仿真器相比它是受限的。

虛擬控制台[編輯 | 編輯原始碼]

控制台以一系列虛擬控制台的形式呈現給用戶。這些虛擬控制台給人的印象是幾個獨立的終端在同時運行;每個虛擬控制台可以用不同的用戶登錄,運行自己的 shell,並有自己的字體設置。每個虛擬控制台都使用一個 /dev/ttyX 設備,可以通過按 Alt+Fx(其中 x 是虛擬控制台編號,從 1 開始)在它們之間切換。/dev/console 設備會被自動映射到活動的虛擬控制台。

另請參閱 chvt(1)openvt(1)deallocvt(1)

文本模式[編輯 | 編輯原始碼]

由於 Linux 最初是適用於 PC 硬件的內核,所以控制台是使用標準 IBM CGA/EGA/VGA圖形開發的,當時所有 PC 都支持這種圖形。圖形在 VGA 文本模式下運行,它提供了一個簡單的 16 色 80x25 字符顯示。這種傳統模式類似於專用文本終端的功能,例如 DEC VT100 系列。如果系統硬件支持的話,仍可以文本模式啟動,但幾乎所有的現代發行版(包括 Arch Linux)都使用 framebuffer 控制台來代替。

Framebuffer 控制台[編輯 | 編輯原始碼]

隨着 Linux 被移植到其他非 PC 架構上,需要一個更好的解決方案,因為其他架構不使用兼容 VGA 的圖形適配器,而且可能根本不支持文本模式。framebuffer 控制台的實現是為了在所有平台上提供一個標準的控制台,因此無論底層的圖形硬件如何,都會呈現相同的 VGA 風格界面。因此,Linux 控制台不是一個終端模擬器,它本身就是一個終端。它使用終端類型 linux,並與 VT100 基本兼容。

鍵盤快捷鍵[編輯 | 編輯原始碼]

鍵盤快捷鍵 描述
Ctrl+Alt+Del 重新啟動系統(由符號鏈接 /usr/lib/systemd/system/ctrl-alt-del.target 指定)
Alt+F1F2F3…… 切換到第 n 個虛擬控制台
Alt+ ← 切換到上一個虛擬控制台
Alt+ → 切換到下一個虛擬控制台
Scroll Lock 當 Scroll Lock 被激活時,輸入/輸出被鎖定
Ctrl+c 殺死當前任務
Ctrl+d 插入 EOF
Ctrl+z 暫停當前任務

參見 console_codes(4)

字體[編輯 | 編輯原始碼]

注意: 這部分是關於 Linux 控制台。有關提供更多功能的替代控制台解決方案(完整的 Unicode 字體、現代圖形適配器等),請參閱 KMSCON 或類似項目。

虛擬控制台默認使用內核的內置字體,其包含 CP437 字符集[1],但這個設置很容易改變。

Linux 控制台默認使用 UTF-8 編碼, 但是由於使用的是標準的兼容 VGA 的 framebuffer,終端字體限定為 256 或 512 個字形。如果字體超出了 256 個字形, 那麼顏色的數量就會從 16 減少到 8。為了為給定的 Unicode 值分配正確的符號來顯示,需要一個特殊的翻譯映射,通常稱為 unimap。現在,大多數控制台字體都內置了 "unimap";在歷史上,它必須被單獨加載。

kbd 包提供改變虛擬控制台字體和字體映射的工具。可用的字體存儲在 /usr/share/kbd/consolefonts/ 目錄中,以 .psfu.psfu.gz 結尾的字體內置 Unicode 翻譯映射。

鍵盤映射是按鍵和計算機使用的字符的對應關係,位於 /usr/share/kbd/keymaps/ 的子目錄中,詳情請參閱 /Keyboard configuration

注意: 替換字體可能會導致需要標準 VGA 樣式字體的程序出現問題,例如使用線條繪圖圖形的程序。
提示:對於用拉丁/希臘字母書寫的歐洲語言,可以使用 eurlatgr 字體,它包括廣泛的拉丁/希臘字母變化以及特殊字符[2]

預覽和測試[編輯 | 編輯原始碼]

提示:這裡有一個整理過的預覽影像數據庫:Linux 控制台字體截圖
$ showconsolefont

顯示字體可用字形與字符的列表。

如果指定(/usr/share/kbd/consolefonts/ 中的)字體名稱,setfont 將暫時改變字體:

$ setfont lat2-16 -m 8859-2

字體名稱區分大小寫。如果不加參數,setfont 會將控制台字體重設為默認字體。

因此,要使用一個 小的 8x8 字體,在安裝字體後,使用類似如下所示的命令:

$ setfont -h8 /usr/share/kbd/consolefonts/drdos8x8.psfu.gz

如果要使用更大的字體,Terminus 字體 (terminus-font) 有多種尺寸可供選擇,例如 ter-132n 就很大。

提示:所有更改字體的命令都可以「盲打」。
注意: setfont 只作用於當前正在使用的控制台。其它終端無論活躍與否都不受影響。

持久性配置[編輯 | 編輯原始碼]

/etc/vconsole.conf 中的 FONT 變量可用於在啟動時設置字體,這對於所有控制台都具有持久性作用。詳情請參見 vconsole.conf(5)

要顯示 Č, ž, đ, šŁ, ę, ą, ś 之類的字符,請使用 lat2-16.psfu.gz 字體:

/etc/vconsole.conf
...
FONT=lat2-16
FONT_MAP=8859-2

這代表使用 ISO/IEC 8859 字符的第二部分,尺寸設置為 16。可以使用其它值來更改字體尺寸(如 lat2-08)。可以在 zhwp:ISO/IEC 8859#各種ISO 8859字符集 查詢 8859 規範定義的區域。

若要在早期的用戶空間中使用指定字體,請在 /etc/mkinitcpio.conf 中使用 consolefont 鈎子。詳情請參見 Mkinitcpio#鈎子(HOOKS)

如果啟動時字體沒有變化,或只暫時變化,則最可能是因為初始化圖形驅動時字體被復位,然後控制台切換到 framebuffer。提早加載圖形驅動可避免此問題。若要在應用 /etc/vconsole.conf 前設置 framebuffer,參見 Kernel mode setting#KMS 早啟動[3] 或其它方式。

HiDPI[編輯 | 編輯原始碼]

參見 HiDPI#Linux 控制台

Audible tones[編輯 | 編輯原始碼]

參見 PC 揚聲器#Beep

參見[編輯 | 編輯原始碼]