Linux 虛擬終端 (VT) 長期無法顯示中文,根因在於 **VGA 文字模式僅支援 256 字形** 以及 **fbcon 繼承該限制**。本文深入剖析 VT 架構、硬體抽象層、CJKTTY 補丁實現細節,並展望 Wayland System Compositor 徹底解決終端國際化問題。
/dev/tty*、/dev/pts/* 介面,處理行編輯、作業控制 (Ctrl+C)、信號傳遞。drivers/tty/vt/vt.c,復用單一控制台為 63 個 VT (/dev/tty1-63),切換時重繪 vc_screenbuf。/dev/fb0,理論上可支援任意字形,但歷史相容性保留 256 字形限制。vc_screenbuf 格式沿用 VGA 文字緩衝:**每字元 2 字節 (屬性 + 字形索引)**,字形索引僅 8 位 (0-255)。fbcon_putc 以索引查找 vc_font 位圖字體,字體僅含 256 字形。memcpy vc_screenbuf → VGA 顯存 極快,改變緩衝格式會連鎖修改數百處核心代碼。vc_screenbuf 分配雙倍空間,每字元 2 字節純 Unicode 碼點,無屬性。vc_screenbuf 寫入 0xFF (左半) / 0xFE (右半) 標記,真實碼點存 vc_unicode_screenbuf。struct console_font 增加 charcount,提供覆蓋 BMP 區的 16x16 點陣字體 (數萬字形)。font_bits() 輔助函數檢測 0xFF/0xFE,從 vc_unicode_screenbuf 取碼點,從擴展字體取左右半部位圖,調用 fb_pad_aligned_buffer 塊拷貝。drivers/video/console/bitblt.c, fbcon_ccw.c, fbcon_cw.c, fbcon_ub.c 等旋轉/裝飾模式。wlr-system-compositor、systemd-consoled 提案),需社群推動。CJKTTY 是在核心限制下的巧妙妥協;Wayland System Compositor 則是將終端渲染徹底移至用戶空間的正統解法。未來的 Linux 終端,將不再受限於 1980 年代的 VGA 遺產,而是擁抱完整的國際化圖形渲染棧。