X Window System 的本質#

X Window System(簡稱 X11 或 X)是 Linux 圖形介面的底層架構。與一般直覺不同,它採用的是 Client-Server 架構,而且角色定義是「反過來」的。

X Server 與 X Client#

X Server#

X Server 負責管理硬體——螢幕、鍵盤、滑鼠。它接收來自 X Client 的繪圖請求,並在螢幕上呈現。

X Client#

X Client 是應用程式——瀏覽器、文字編輯器、終端機。它不直接操作螢幕,而是將繪圖指令傳送給 X Server。

這裡的「Server/Client」容易混淆:在你面前的電腦運行的是 X Server(提供硬體資源),而應用程式是 X Client(請求使用硬體)。這與一般「Server 在遠端」的直覺相反。但如果你想成「螢幕是服務提供者,應用程式是服務請求者」,就很合理了。

遠端顯示#

X 的 Client-Server 分離架構帶來了一個強大的特性:X Client 和 X Server 可以在不同的機器上。你可以在遠端伺服器上執行圖形應用程式(X Client),讓它的畫面顯示在你本地的螢幕(X Server)上。

這就是 SSH X11 Forwarding(ssh -X)的原理。

Window Manager#

**Window Manager(視窗管理器)**是一個特殊的 X Client,負責管理所有視窗的:

  • 外觀(標題列、邊框)
  • 行為(移動、縮放、最小化、最大化)
  • 工作區(虛擬桌面)

常見的 Window Manager:Mutter(GNOME)、KWin(KDE)、i3(平鋪式)。

Display Manager#

Display Manager 提供圖形化的登入畫面,負責:

  • 使用者身份驗證
  • 啟動使用者的桌面環境
  • 管理多個顯示會話

常見的 Display Manager:GDM(GNOME)、SDDM(KDE)、LightDM。

X 的啟動流程#

  1. startx 腳本偵測環境並呼叫 xinit
  2. xinit 啟動 X Server
  3. X Server 初始化硬體(顯示卡、螢幕解析度)
  4. 啟動 Window Manager 和桌面環境
  5. 使用者的 X Client 應用程式開始運行

系統可以同時運行多個 X 的實例,每個佔用一個不同的 display(:0:1 等)。這在多使用者共用一台機器時有用。

X 的設定#

X 的設定檔 /etc/X11/xorg.conf 包含多個區段:

  • Device:顯示卡設定
  • Monitor:螢幕參數
  • Screen:Device + Monitor 的組合,定義解析度與色深
  • InputDevice:鍵盤與滑鼠設定
  • Module:載入的擴充模組
  • Files:字型路徑

在現代 Linux 中,X 通常能自動偵測硬體並正確設定,不需要手動編輯 xorg.conf。只有在自動偵測結果不理想(如多螢幕配置、特殊解析度)時才需要手動調整。

Wayland:X 的繼承者#

X Window System 的設計始於 1984 年,已經超過 40 年。Wayland 是為了取代 X 而開發的新一代顯示協議:

  • 架構更簡潔:Compositor 同時扮演 Server 和 Window Manager 的角色
  • 更好的安全性:應用程式無法竊聽其他視窗的輸入
  • 更好的效能:減少不必要的中間層

許多現代發行版(Fedora、Ubuntu)已經預設使用 Wayland。但 X11 的相容性仍然很重要——許多舊的應用程式和遠端顯示場景仍需要 X11。XWayland 提供了在 Wayland 環境中運行 X11 應用的相容層。