Wayland是一個通訊協定,規定了顯示伺服器與其客戶機之間的通訊方式,而使用這個協定的顯示伺服器稱為Wayland Compositor。它由Kristian Høgsberg於2008年發起,目標是用更簡單的現代化視窗系統取代X Window System。Wayland協定的參考實現稱為Weston,由Wayland專案組使用C語言開發。[4]

Quick Facts 原作者, 首次釋出 ...
Wayland
Thumb
Thumb
原作者Kristian Høgsberg
首次釋出2008年9月30日,​15年前​(2008-09-30[1]
目前版本
  • 1.23.1 (2024年8月24日;穩定版本)[2]
編輯維基數據連結
原始碼庫 編輯維基數據連結
程式語言C
作業系統類Unix系統
類型顯示服務
特許條款MIT特許條款
網站wayland.freedesktop.org
Close
Thumb
Linux:X Server與Wayland Compositor
Thumb
Wayland compositors, libwayland-client and toolkits

Wayland與X Window System的最大不同在於,它規定由客戶機自身負責窗口邊框和裝飾的繪製,並且客戶機能夠通過EGL以及一些Wayland特定的EGL擴充元件直接在顯示記憶體中算繪自己的緩衝區。視窗管理員簡化成顯示管理服務,專門負責算繪那些螢幕上的程式。這比X Window System中的視窗管理員要更簡單、高效。[5][6]

Wayland專案的原始碼使用MIT特許條款釋出。現有的Compositor例如CompizKWinMutter對Wayland都有着不同程度的支援。

歷史

Wayland的創始人Kristian Høgsberg是X.Org Server開發者,曾參與過AIGLX英語AIGLXDRI2英語DRI2的開發。他在2008年供職於紅帽時發起了Wayland作為業餘專案,目標是讓「每一個幀都完美無瑕,也就是說應用程式要能充分地控制圖形的彩現,使我們完全無法察覺任何的撕裂、延遲、重畫及閃爍」[7][8][9][10]。這一靈感浮現時他正開車經過馬薩諸塞州的韋蘭,也就由此決定了專案的名字[9][11]

2010年10月,Wayland加入了Freedesktop.org專案[12][13]。在遷移過程中,郵寄清單wayland-devel代替了原先的Google group郵件組,用於討論專案的開發。

Wayland是自由軟件,它的庫(libwayland-server和libwayland-client)以MIT License授權,範例程式和Compositor一開始以GPLv2授權。現在整個專案都是以MIT License授權。直到2010年11月份,Wayland還僅僅只能在IntelNvidiaAMD的開源驅動上執行。

設計

Thumb
The Wayland display server protocol relys on EGL

Wayland運用既有的Linux核心技術,像是Direct Rendering Manager(DRM),Kernel Mode-Setting(KMS)以及Graphics Execution Manager(GEM)以提供一個最小化的顯示管理服務。Wayland混合器(compositor)在2010年6月已從桌面常用的OpenGL改為OpenGL ES[14]。這個專案也開發支援Wayland顯示的Qt,而不需要X。大部分應用程式都有望獲得透過函式庫,無需修改程式即可支援Wayland。

近些年來,GNU/Linux桌面圖形開發者將許多與彩現有關的介面從X server移動到內核中。現在,已經有許多功能被移入內核(主記憶體管理任務排程模式設置(KMS)等等)或是程式庫(cairo、pixman、freetype、fontconfig、pango等等),所以窗口系統需要做的事情大大減少了。但是X11協定十分巨大、龐雜,並且它包括了許多已經過時的模組。雖然開發者們為了使X server適應現代化的電腦架構而開發出了XRandR、XRender、Composite等一些額外擴充,但這終究是治標不治本,同時這也會增加維護的難度。

Wayland是一款協定,但與X server不同的是,Wayland只做它必須要做的事情。下面以「滑鼠點擊按鈕引發按鈕更新動作」為例來說明一下Wayland和X server的區別:

Thumb
X架構

在X中

  1. 內核擷取滑鼠點擊事件並行送給X server。
  2. X server會計算該把這一事件傳送給哪個窗口(事實上,窗口位置是由Compositor控制的,X server並不能夠正確的計算Compositor做過特效變化之後的按鈕的正確位置)。
  3. 應用程式對此事件進行處理(將引發按鈕更新動作)。但是,在此之前它得向X server傳送繪製請求。
  4. X server接收到這條繪製請求,然後把它發給影片驅動來彩現。X還計算了更新區域,並且這條「垃圾資訊」傳送給了Compositor。
  5. 這時,Compositor知道它必須要重新合成螢幕上的一塊區域。當然,這還是要向X server傳送繪製請求的。
  6. 開始繪製。但是X server還會去做一些不必要的本職工作(窗口重疊計算、窗口剪裁計算等)。
Thumb
Wayland架構

在Wayland中

  1. 內核擷取滑鼠點擊事件並行送給Wayland Compositor。
  2. 由於是直接發給Wayland Compositor的,所以Wayland Compositor會正確地計算出按鈕的位置。同時它會把這一事件傳送給按鈕所在的應用程式來處理。
  3. 應用程式直接彩現,無需向Wayland Compositor請求。只需在繪製完成之後向Wayland Compositor傳送一條資訊表明這塊區域被更新了。
  4. Wayland Compositor收到這條資訊後,立即重新合成整個桌面。

目前,Wayland使用OpenGL ES而不是傳統的OpenGL。「從長遠來看,我們需要完整的OpenGL支援,但問題是libGL會帶來X的依賴性......」[15]另一方面,使用OpenGL ES會使得Wayland更容易支援流動裝置[16]。Wayland目前並不支援網絡透明性,但未來可能會支援[17]

媒體關注

Phoronix於2008年11月發表了一篇標題為「Wayland: A New X Server For Linux」的文章[5],披露Wayland這項新的專案。Kristian透過他的網誌對此關注作出回應,他告示大眾Wayland並非一個新的X server而是一個顯示伺服器,並聲明這個新興的專案尚處於未成熟的階段[7]

使用

Arch Linux

Arch Linux本身不具有Wayland。但實際上,安裝 Enlightenment 或 KDE 等桌面環境時,可以選用Wayland安裝作為顯示伺服器。

Ubuntu

馬克·沙特爾沃思於2010年11月4日宣佈Wayland將作為Ubuntu未來某一未定版本Unity介面的顯示伺服器[18]。但是2013年3月份,Canonical確認他們將開發一個新的顯示服務Mir而不是使用Wayland來替代X[19]。2017年4月份,Canonical宣佈放棄Unity與Mir[20],並於Ubuntu 17.10開始使用Wayland[21]。但在18.04LTS版本中因為Wayland無法支援螢幕共用,遠程桌面服務以及GNOME Shell崩潰的可恢復性更換為X.Org Server。[22][23]

Fedora

Fedora 25整合了GNOME桌面最新版本 3.22,並將GNOME桌面的版本的顯示後端切換至預設為Wayland。

RHEL

RHEL 8整合了Wayland。

Qt

Qt 5.x提供了QtWayland模組以支援Wayland協定[24],藉由-platform命令列選項,Qt應用程式可以在運行時切換圖形後端,如X與Wayland[25]。2011年1月,Wayland支援進入上游Qt版本庫的Lighthouse分支[26]

KDE

KWinKDE的視窗管理器加入支援OpenGL ES輸出[27],已在KDE SC 4.7發佈[28]。目前,KWin已經完成Wayland的初步移植[29]。在2012年1月發佈的KDE SC 4.8,KDE將支援X下執行Wayland。在2012年夏天發佈的KDE SC 4.9,將可以直接執行Wayland,主要用於支援流動裝置,也就是Plasma Active[30]

GNOME

GNOME從3.10開始支援Wayland[31]

Compiz

Compiz開發者們已經把它對X的依賴部分變成了一個可選外掛程式。同時,Canonical正在為Compiz添加OpenGL ES的支援。眾所周知,目前Wayland正是使用OpenGL ES,這使將得Compiz能夠更容易遷移到Wayland。 註:compiz此項目的主要作者已經離開Canonical,使得此項目進入停止開發的狀態,當然遷移到wayland的計劃也就更遙遙無期。

Sailfish OS

Jolla的第一款裝置搭載的Sailfish OS使用Wayland[32]

Wayland 合成器

實作 Wayland 顯示伺服器協定的顯示伺服器也稱為 Wayland 合成器,因為它們也執行合成視窗管理器的任務。

  • Hyprland – 一個用C++ 編寫的基於wlroots 的平鋪Wayland 合成器,Hyprland 值得注意的功能包括動態平鋪、選項卡式視窗、乾淨且可讀的C++ 程式碼庫以及提供視窗動畫、圓角和Dual-Kawase模糊的自訂彩現器。
  • Weston – Wayland 合成器的參考實現,實現客戶端裝飾。
  • Enlightenment - 聲稱自 0.20 版本以來完全支援 Wayland ,但目前正在進行工作以實現完整的 Wayland 合成器 。
  • KWin - 截至 2021 年,KWin 幾乎擁有完整的 Wayland 支援。
  • Mutter - Mutter 為 GNOME 3.9 的 Wayland 整合維護了一個單獨的分支(2013 年 9 月);[54] 在 2014 年的 3.13.1 版本中,Wayland 分支被合併到主儲存庫中。
  • Clayland – 使用 Clutter 的 Wayland 合成器的簡單範例。
  • Sway – 平鋪 Wayland 合成器和 X11 i3 視窗管理器的直接替代品。

Weston

Weston 是Wayland 合成器的參考實作,它也是由Wayland 專案開發的,使用C 語言編寫,並在MIT 特許條款下發佈,由於Weston 依賴Linux 作業系統的某些功能,因此Weston只提供對Linux 作業系統的官方支援。其處理依賴evdev,雖然緩衝區的處理依賴於通用緩衝區管理 (GBM),但是,2013 年宣佈了 Weston 到 FreeBSD 的原型移植。

Weston 支援高頻寬數碼內容保護 (HDCP)。

Weston 依靠 GEM 在合成器和應用程式之間共用應用程式緩衝區。對於彩現,Weston 可以使用OpenGL ES 或pixman 函式庫進行軟件彩現。支援庫作為依賴項。

Weston 的遠端存取介面由 RealVNC 員工於 2013 年 10 月提出。

Maynard

Maynard 是一個圖形 shell,被寫為 Weston 的外掛程式,就像 GNOME Shell 被寫為 Mutter 的外掛程式一樣。

Raspberry Pi 基金會與 Collabora 合作發佈了 Maynard,致力於提高效能和降低記憶體消耗。

工具包

  • Clutter 對 Wayland 已經有完整的支援。
  • EFL 對 Wayland 通常情況下有完整支援。
  • Enlightenment Foundation Libraries 對Wayland已經有完整的支援。
  • QT 5 除了對 client 有一些改動之外,對Wayland已經有完整的支援。
  • GTK+3.4.0,釋出於2012年3月26日,對 Wayland 的支援有一些缺陷。不過過隨着3.4.1更新版本的釋出,這個問題得到了緩解。
  • SDL自 2.0.2 釋出以來開始支援 Wayland,自 2.0.4 開始預設啟用。
  • GLFW 自 3.2 開始支援。
  • FreeGLUT 已開始支援。

參見

參考資料

外部連結

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.