Linux 上的 Wayland 是什麼?它與 X 有何不同?

已發表: 2023-07-17
在 System76 Gazelle 筆記本電腦上打開文件管理器
漢娜·史賽克 / 極客指南
Wayland 是 Linux 發行版的替代窗口系統。 它取代了老化的 X11 標準。 由於它需要修改應用程序才能使用它,因此迄今為止採用速度很慢。 在撰寫本文時,增強的安全性是相對於 X11 的主要優勢。

X11 或 X Window 系統可讓您的圖形桌面環境顯示和控制窗口。 Wayland 是 X11 的替代品。 它的設計速度更快、更安全。 以下是您需要了解的有關它們的信息。

目錄

什麼是韋蘭?
X的眾多名字
X11 的工作原理
Wayland 的工作原理
Wayland 被應用程序採用的速度緩慢
您使用的是 Wayland 還是 X11?
您應該使用 Wayland 還是 X11?

什麼是韋蘭?

Wayland 是 X11 的現代替代品,幾十年來 X11 一直是 Linux 上的默認窗口系統。 Wayland 是一種通信協議,定義 X Window 顯示服務器和客戶端應用程序之間的消息傳遞。 Wayland 項目提供了客戶端和服務器庫,使應用程序能夠使用該協議。

Wayland 項目由紅帽開發人員於 2008 年啟動。

X的眾多名字

X Window System 是一個窗口系統,由麻省理工學院於 1984 年首次針對 Unix 操作系統發布。應用程序可以基於窗口系統提供的功能來生成用戶界面。

到 1987 年,X Window 系統已達到版本 11,並被稱為 X11。 它現在由 X.Org 基金會管理。 儘管自 1987 年以來已經出現了許多較小的版本,但它仍處於版本 11。截至撰寫本文時,當前的穩定版本是 X11R7.7。

名稱中的“X”並不表示羅馬數字中的“10”,也不表示“Xtra”、“Xtending”或類似的意思。 以前的窗口系統被稱為“W”,代表“windows”,當他們開始新項目時,他們只是簡單地移動到字母表中的下一個字母。

您會聽到 X Window 系統被稱為“X”、“X11”、“Xorg”、“X Windows”和“X Window System”。

X11 的工作原理

X Window 系統處理低級事件和原語,例如與鼠標交互以及繪製和移動窗口。 應用程序處理視覺效果和界面設計。 窗口的外觀、它們有哪些按鈕以及這些按鈕的位置是應用程序程序員做出的選擇。 X Window 系統將最終的設計繪製到屏幕上。

X11 提供了在工作的 X Window 系統的各個組件之間必須傳遞的通信的定義。 這種通信是必需的,因為啟用 X 的應用程序用來繪製其窗口和界面元素的代碼不在應用程序內部。 該工作由 X 服務器和窗口管理器共享。

應用程序是 X 服務器的客戶端。 窗口管理器是一種特殊類型的客戶端。 X 服務器負責管理資源、執行繪圖請求以及將按鍵和鼠標單擊等事件編組到適當的應用程序。

它還充當窗口管理器和應用程序之間通信的中間人,在它們之間來回代理消息。 窗口管理器維護應用程序已打開的窗口列表、它們在屏幕上的位置、它們的大小、它們是否重疊等等。

合成窗口管理器為每個窗口維護一個離屏緩衝區。 它將這些緩衝區合成為一個圖像,該圖像代表最頂層的窗口(代表整個桌面)並寫入屏幕。

所有現代圖形桌面環境,包括 GNOME 和 KDE,都使用合成窗口管理器。

Wayland 的工作原理

Wayland 旨在解決 X11 的問題。 X11 架構需要大量消息傳遞。 X 服務器位於客戶端和窗口管理器之間。 它還位於所有東西和(通過內核)圖形硬件之間。 消息量過大可能會導致延遲和滯後、跳躍的視覺體驗。

還有一個龐大的代碼庫。 有服務器應用程序、窗口管理器應用程序和客戶端使用的 X11 庫。 您的代碼庫越大(且越舊),維護起來就越困難,並且您將更加難以處理遺留代碼。

通過改變架構,Wayland 實現了代碼庫的現代化和簡化,帶來了性能優勢並提高了安全性。

實際上,他們已將服務器和窗口管理器合併到一個應用程序中。 他們刪除了執行現在由內核執行的功能的所有代碼。 他們沒有重複工作,而是利用了內核的功能。

使用 Wayland,合成器和客戶端應用程序可以直接通信。 合成器維護其內部映射,其中包括哪些窗口在桌面上的位置、它們的大小和狀態。它代理鍵盤、鼠標和窗口更改事件,並將它們發送到擁有這些窗口的應用程序。

應用程序相應地更新用戶界面。 主要區別在於渲染是在應用程序本身內部使用鏈接的 Wayland 庫執行的。

應用程序要么更新用於保存窗口的緩衝區,要么創建一個新緩衝區並丟棄舊緩衝區。 然後,客戶端應用程序向合成器發送通知,告訴它更新其窗口映射並使用新的或更新的視頻緩衝區。

這種簡化的架構和現代代碼設計提供了性能改進,尤其是窗口大小調整和拖動,顯得平滑流暢。

Wayland 被應用程序採用的速度緩慢

Wayland 是 Debian 10 及更高版本、Fedora 34 或更高版本、Ubuntu 18.04 或更高版本以及其他發行版(例如 Arch Linux)中的默認窗口系統。 儘管如此,Wayland 通常運行 X11 應用程序。

有一個名為 XWayland 的兼容層,允許 X11 應用程序在 Wayland 下運行。 這是必需的,因為大多數 X11 應用程序尚未修改並移植到 Wayland。

在提供 Wayland 合成器的桌面環境(例如 GNOME)上,GNOME 文本編輯器和地圖、文件和日曆等官方應用程序都是 Wayland 原生應用程序。 但絕大多數 X11 應用程序仍然是未受影響的、原生的 X11 應用程序。

Nvidia 發布開源 Linux GPU 驅動程序,但有一個問題
相關Nvidia 發布開源 Linux GPU 驅動程序,但有一個問題

XWayland 中間件通常工作得很好,但某些執行低級屏幕相關功能(例如屏幕錄製)的 X11 應用程序可能會出現問題。 將 Wayland 與 NVIDIA 一起使用可能與與 X11 一起使用一樣痛苦,儘管我在日常驅動程序中將其與 NVIDIA GeForce GT 1030 GPU 一起使用時沒有遇到任何問題。

X11 應用程序的一些作者可能希望他們的應用程序能夠與 XWayland 一起正常工作,並且他們可以避免將它們重新加工到 Wayland 應用程序中。 如果到 Wayland 的採用和遷移過程漫長而緩慢,新應用程序採用它,但大多數現有 X11 應用程序保持原樣,將希望寄託在 XWayland 上,請不要感到驚訝。

相關: Ubuntu 21.04“Hirsute Hippo”的新增功能

您使用的是 Wayland 還是 X11?

如果您正在使用主要的 Linux 發行版之一,那麼您很可能已經在使用 Wayland。 您可以通過發出以下命令進行檢查。

 回顯$XDG_SESSION_TYPE

在使用 Wayland 的系統上,輸出將是:

在運行 X Window 系統的系統上,您將看到:

極少數情況下,未設置XDG_SESSION_TYPE環境變量。 在這種情況下,您可以改用此命令:

 loginctl show-session $(loginctl show-user $(whoami) -p 顯示 --value) -p 類型 --value

內部嵌套的loginctl命令使用show-user命令來顯示指定用戶的屬性。 whoami命令為我們提供當前用戶的名稱。 -p (屬性)選項將loginctl的輸出限制為有關“顯示”設置的信息,我們使用--value選項僅返回值。 我們不希望在loginctl的響應中包含“Display=”字符串。 所有這些都為我們提供了一個會話 ID。

我們將會話ID傳遞給外部loginctl ,並使用show-session命令顯示會話的屬性。 我們使用-p (屬性)選項將輸出限制為有關會話類型的信息,並使用--value選項顯示不帶“Type=”標籤的值。

在使用 Wayland 的計算機上,您將看到:

在 Fedora Linux 上使用 loginctl 命令來確定正在使用 Wayland 還是 X11

如果您運行的是 X Window 系統,​​您將看到:

在 Manjaro inux 上使用 loginctl 命令來確定是否正在使用 Wayland 或 X11

您應該使用 Wayland 還是 X11?

除非您遇到問題,否則您最好堅持使用已經使用的內容。 但是,如果您注意到不穩定或屏幕更新不穩定,您可以嘗試轉向您不使用的任何一個。

在 GNOME 上,如果您想切換並嘗試其他系統,請在登錄屏幕上單擊您的用戶名,然後單擊顯示屏右下角的齒輪圖標。

GNOME 中的下拉菜單允許您選擇基於 Wayland 或 X11 的桌面體驗

菜單將為您提供不同版本的 GNOME。 提到“Xorg”的選項使用 X Window 系統,​​而那些不使用 Wayland 的選項。

相關:如何列出 Linux 上的環境變量