顯示伺服器與視窗管理器與圖形驅動程序?
我試圖整理我對 Linux 上圖形不同部分的理解,我對以下每個概念所扮演的角色感到困惑。
- 顯示伺服器
- 視窗管理器
- 顯卡驅動
我的問題:
- 圖形驅動程序是在 Linux 核心內部還是外部實現的?如果在核心之外,當網路、磁碟、文件系統都在核心內部時,為什麼要排除它們?
- X Windows、Gnome、Ubuntu Unity、KDE、Mir、Wayland 誰在顯示伺服器、視窗管理器和圖形驅動程序方面做了什麼?
我對這個問題的目標是了解哪些項目正在貢獻 Linux 圖形體驗的哪些部分?
更新 http://blog.mecheye.net/2012/06/the-linux-graphics-stack/ 有很多我正在尋找的細節。
術語“圖形驅動程序”用於指代幾種不同的事物。其中之一是核心驅動程序。核心驅動程序大多只是設置影片模式並促進向/從卡傳遞數據。它通常還將韌體下載到卡上的 GPU 中。韌體是 GPU 本身執行的程序,但不幸的是,圖形供應商僅將其作為二進制 blob 提供,因此您無法查看其原始碼。
除此之外,您通常會執行 Xorg,它有自己的驅動程序,可以將通用 X11 或 OpenGL 繪圖呼叫轉換為卡可以理解的命令,並將它們發送到卡執行。它也可以自己做一些工作,具體取決於 gpu 支持和不支持的命令。在 OpenGL 呼叫的情況下,直接渲染基礎設施允許這部分驅動程序直接在客戶端應用程序而不是 X 伺服器中實際執行,以獲得可接受的性能。由於在啟動時與 Xorg 和核心驅動程序的協調和幫助,它還允許客戶端應用程序中的驅動程序將其命令直接發送到 gpu。
Wayland 和 Mir 應該取代 Xorg 作為一種簡化類型的顯示伺服器。
Unity 既是一個外殼(提供桌面/啟動器),又是一個合成視窗管理器。
GNOME 和 KDE 是桌面環境。它們是由許多組件組成的大型項目。它們的核心是各自的應用工具包,分別是 GNOME 的 GTK 和 KDE 的 Qt。這是一個用於編寫應用程序的庫框架,並為建構其他所有內容提供了基礎。他們提供的一些基本服務是事件和對象處理、Windows、基本繪圖功能、I/O 等等。
- 圖形驅動程序被實現為必須載入到其中的核心模組。所以,基本上,它們在核心*之外。*是否可以建構核心來包含它們是由比我更有知識的人來回答的問題。我認為它們被排除在核心之外,因為如果核心是使用驅動程序建構的,
nouveau
那麼稍後載入專有的 NVIDIA 驅動程序時會發生衝突。- X Windows、Wayland 和 Mir 是顯示伺服器。
- Gnome、Ubuntu Unity 和 KDE 都是桌面環境,而不是視窗管理器。視窗管理器是桌面環境的一部分(例如 Gnome 使用
metacity
)。也就是說,您可以執行獨立的視窗管理器(沒有桌面環境),例如awesome、xmonad或openbox至於哪個組件扮演哪個角色:
- 圖形驅動程序是核心與圖形卡“對話”的方式。
- 顯示伺服器用於創建和管理顯示的視窗和其他圖形元素。
- 桌面環境或視窗管理器充當顯示伺服器的客戶端,並指示它應該如何繪製/裝飾視窗、面板……