Wayland是一個通訊協定,規定了顯示伺服器與其客戶機之間的通訊方式,而使用這個協定的顯示伺服器稱為Wayland Compositor。它由Kristian Høgsberg於2008年發起,目標是用更簡單的現代化視窗系統取代X Window System。Wayland協定的參考實現稱為Weston,由Wayland專案組使用C語言開發。[4]
![Thumb](http://upload.wikimedia.org/wikipedia/commons/thumb/c/c2/Linux_Graphics_Stack_2013.svg/640px-Linux_Graphics_Stack_2013.svg.png)
![Thumb](http://upload.wikimedia.org/wikipedia/commons/thumb/7/7b/Free_and_open-source-software_display_servers_and_UI_toolkits.svg/640px-Free_and_open-source-software_display_servers_and_UI_toolkits.svg.png)
Wayland與X Window System的最大不同在於,它規定由客戶機自身負責窗口邊框和裝飾的繪製,並且客戶機能夠通過EGL以及一些Wayland特定的EGL擴充元件直接在顯示記憶體中算繪自己的緩衝區。視窗管理員簡化成顯示管理服務,專門負責算繪那些螢幕上的程式。這比X Window System中的視窗管理員要更簡單、高效。[5][6]
Wayland專案的原始碼使用MIT特許條款釋出。現有的Compositor例如Compiz,KWin和Mutter對Wayland都有着不同程度的支援。
歷史
Wayland的創始人Kristian Høgsberg是X.Org Server開發者,曾參與過AIGLX和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還僅僅只能在Intel、Nvidia和AMD的開源驅動上執行。
設計
此條目翻譯質素不佳。 |
![Thumb](http://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/Wayland_display_server_protocol.svg/640px-Wayland_display_server_protocol.svg.png)
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](http://upload.wikimedia.org/wikipedia/commons/thumb/0/06/X-architecture.png/320px-X-architecture.png)
在X中:
- 內核擷取滑鼠點擊事件並行送給X server。
- X server會計算該把這一事件傳送給哪個窗口(事實上,窗口位置是由Compositor控制的,X server並不能夠正確的計算Compositor做過特效變化之後的按鈕的正確位置)。
- 應用程式對此事件進行處理(將引發按鈕更新動作)。但是,在此之前它得向X server傳送繪製請求。
- X server接收到這條繪製請求,然後把它發給影片驅動來彩現。X還計算了更新區域,並且這條「垃圾資訊」傳送給了Compositor。
- 這時,Compositor知道它必須要重新合成螢幕上的一塊區域。當然,這還是要向X server傳送繪製請求的。
- 開始繪製。但是X server還會去做一些不必要的本職工作(窗口重疊計算、窗口剪裁計算等)。
![Thumb](http://upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Wayland-architecture.png/220px-Wayland-architecture.png)
在Wayland中:
- 內核擷取滑鼠點擊事件並行送給Wayland Compositor。
- 由於是直接發給Wayland Compositor的,所以Wayland Compositor會正確地計算出按鈕的位置。同時它會把這一事件傳送給按鈕所在的應用程式來處理。
- 應用程式直接彩現,無需向Wayland Compositor請求。只需在繪製完成之後向Wayland Compositor傳送一條資訊表明這塊區域被更新了。
- 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本身不具有Wayland。但實際上,安裝 Enlightenment 或 KDE 等桌面環境時,可以選用Wayland安裝作為顯示伺服器。
馬克·沙特爾沃思於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 25整合了GNOME桌面最新版本 3.22,並將GNOME桌面的版本的顯示後端切換至預設為Wayland。
RHEL 8整合了Wayland。
Qt 5.x提供了QtWayland模組以支援Wayland協定[24],藉由-platform命令列選項,Qt應用程式可以在運行時切換圖形後端,如X與Wayland[25]。2011年1月,Wayland支援進入上游Qt版本庫的Lighthouse分支[26]。
KWin,KDE的視窗管理器加入支援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]。
Compiz開發者們已經把它對X的依賴部分變成了一個可選外掛程式。同時,Canonical正在為Compiz添加OpenGL ES的支援。眾所周知,目前Wayland正是使用OpenGL ES,這使將得Compiz能夠更容易遷移到Wayland。 註:compiz此項目的主要作者已經離開Canonical,使得此項目進入停止開發的狀態,當然遷移到wayland的計劃也就更遙遙無期。
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 是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 是一個圖形 shell,被寫為 Weston 的外掛程式,就像 GNOME Shell 被寫為 Mutter 的外掛程式一樣。
Raspberry Pi 基金會與 Collabora 合作發佈了 Maynard,致力於提高效能和降低記憶體消耗。
工具包
參見
參考資料
外部連結
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.