Linux

Linux 的顯示是如何工作的?

  • March 14, 2021

Linux 的顯示系統使用多種技術、協議、擴展、應用程序、伺服器(守護程序)、驅動程序和概念來實現視窗系統,例如:

Xorg、Wayland、X11、OpenGL、RandR、XrandR、螢幕解析度、DPI、顯示伺服器、等等

當我們沒有全貌時,這群人可能會讓人不知所措或令人困惑。Linux 顯示系統的每一面都有多個文件,但在全球範圍內它是如何工作的呢?

Linux顯示

Linux 的顯示系統,使用多種技術、協議、擴展、應用程序、伺服器(守護程序)、驅動程序和概念來實現視窗系統,例如:Xorg、Wayland、X11、OpenGL、RandR、XrandR、螢幕解析度、DPI、顯示伺服器等。這可能很難完全理解,但它的每一面都是為了特定的目的,它們不會同時使用。

X 協議

X 視窗系統,X11(X 版本 11)是點陣圖顯示的視窗系統,常見於類 Unix 作業系統,X 提供了 GUI 環境的基本框架:在顯示設備上繪製和移動視窗以及與滑鼠和鍵盤互動。X 不強制要求使用者界面,這是由單獨的程序處理的。因此,基於 X 的環境的視覺樣式變化很大。不同的程序可能會呈現截然不同的界面。X 起源於 1984 年麻省理工學院 (MIT) 的雅典娜計劃。自 1987 年 9 月以來,X 協議的版本為 11(因此為“X11”)。X.Org 基金會領導 X 項目,目前的參考實現, X.Org Server,在 MIT 許可和類似許可許可下作為免費和開源軟體提供。

X 實施

大多數 Linux 發行版使用X.Org Server,它是由 X.Org Foundation 管理的 X Window System (X11) 顯示伺服器的免費和開源實現。單獨的 Xorg/X 不支持多個提供的功能,如縮放或渲染,因為Xorg使用擴展,如XFixesRandR(RandR 由**xrandr它管理,例如設置平移、解析度或縮放)、GLX(OpenGL 擴展)、渲染複合這會導致視窗層次結構的整個子樹被渲染到螢幕外緩衝區,然後應用程序可以獲取該緩衝區的內容並做任何他們喜歡的事情,螢幕外緩衝區可以自動合併到父視窗中由外部程序合併,稱為合成管理器,可以像某些**視窗管理器**一樣自行進行合成;例如 Compiz、Enlightenment、KWin、Marco、Metacity、Muffin、Mutter 和 Xfwm。對於其他“非合成”視窗管理器,可以使用獨立的合成管理器,例如:PicomXcompmgrUnagiXorg 支持的擴展可以通過以下方式列出:xdpyinfo -display :0 -queryExtensions | awk '/^number of extensions:/,/^default screen number/'.

另一方面,Wayland旨在作為 Xorg/X11 的更簡單替代品,更易於開發和維護,但截至 2020 年,除了 Gnome 之外,桌面對 Wayland 的支持尚未完全準備好(例如KDE Kwin 和 Wayland 支持);在發行版方面,Fedora預設使用 Wayland。請注意,Wayland 和 Xorg可以同時工作,這取決於使用的​​配置。XWayland是 X.Org 伺服器程式碼庫上的一系列更新檔,它們實現了在 Wayland 協議上執行的 X 伺服器。這些更新檔由 Wayland 開發人員開發和維護,以便在過渡到 Wayland 期間與 X11 應用程序兼容,並在 2014 年的 X.Org 伺服器 1.16 版中進行了主線化。當使用者在 Weston 中執行 X 應用程序時,它會呼叫XWayland 為請求提供服務。

整個範圍

           

顯示伺服器或視窗伺服器是一個程序(如 Xorg 或 Wayland),其主要任務是協調其客戶端與作業系統的其餘部分、硬體以及彼此之間的輸入和輸出。顯示伺服器通過顯示伺服器協議與其客戶端進行通信,該協議是一種通信協議,可以是網路透明的或簡單的網路能力的。例如 X11 和 Wayland 是顯示伺服器通信協議。

如圖所示,視窗管理器是桌面環境的另一個重要元素,它是一種系統軟體,用於控製圖形使用者界面中視窗系統內視窗的放置和外觀。大多數視窗管理器旨在幫助提供桌面環境。它們與為圖形硬體、指針設備和鍵盤提供所需功能支持的底層圖形系統一起工作,並且通常使用小元件工具包編寫和創建。KDE 使用KWin作為視窗管理器(截至 2020 年,它對 Wayland 的支持有限),類似地,Gnome 2 使用Metacity,Gnome 3 使用Mutter作為視窗管理器。

視窗管理器的另一個重要方面是合成器或合成視窗管理器,它是一個視窗管理器,為應用程序提供每個視窗的螢幕外緩衝區。視窗管理器將視窗緩衝區合成為代表螢幕的圖像,並將結果寫入顯示記憶體。合成視窗管理器可以對緩衝視窗執行額外的處理,應用 2D 和 3D 動畫效果,例如混合、淡入淡出、縮放、旋轉、複製、彎曲和扭曲、洗牌、模糊、重定向應用程序,以及將視窗轉換為多個顯示之一和虛擬桌面。電腦圖形技術允許實時渲染視覺效果,例如投影、實時預覽和復雜的動畫。由於螢幕是雙緩衝的,在更新過程中不會閃爍。最常用的合成視窗管理器包括:Linux、BSD、Hurd 和 OpenSolaris-Compiz、KWin、Xfwm、Enlightenment 和 Mutter。每個都有自己的實現,例如 KDE 的KWin 合成器具有許多功能/設置,如動畫速度、防撕裂 (vsync)、視窗縮略圖、縮放方法,並且可以使用OpenGLv2/OpenGLv3 或XRender作為渲染後端以及 Xorg。(XRender/Render不要與XRandR/RandR混淆)。

**OpenGL(開放圖形庫)**是一種跨語言、跨平台的應用程序程式介面(API),用於渲染 2D 和 3D 矢量圖形。API 通常用於與圖形處理單元 (GPU) 互動,以實現硬體加速渲染。OpenGL 是一個渲染庫,可以與 Xorg、Wayland 或任何實現它的應用程序一起使用。OpenGL 安裝可以用glxinfo | grep OpenGL.

電腦監視器或顯示設備的顯示解析度或顯示模式是每個維度上可以顯示的不同像素的數量。通常引用為寬×高,單位為像素:例如,1024×768表示寬度為1024像素,高度為768像素。xrandr可用於添加渲染/模擬新的顯示解析度。

DPI代表每英寸的點數,是空間列印/顯示的量度,特別是在 1 英寸(2.54 厘米)的跨度內可以排成一行的單個點的數量。電腦的螢幕沒有點,但有像素,密切相關的概念是每英寸像素或 PPI,因此 DPI 是用 PPI 概念實現的。預設96DPI 測量意味著 96x96 垂直和水平。此外,X DPI(每英寸點數)設置是否僅用於文本縮放?QA 資訊量很大。

筆記

一些 KDE 的 gui 工具: systemsettings5 > 顯示kcmshell5 xserverkinfocenter.

參考

連結和來源: 123456789101112

引用自:https://unix.stackexchange.com/questions/596894