導(dǎo)航欄網(wǎng)站模板特效搭建一個(gè)網(wǎng)站的流程
WayLand的架構(gòu)和協(xié)議
1. Wayland簡(jiǎn)介
1.1 Wayland
是啥?為啥它這么重要?
嘿,你知道嗎?有時(shí)候咱們用電腦的時(shí)候,是不是覺得圖形界面有點(diǎn)慢、有點(diǎn)卡?那是因?yàn)槲覀冞€在用一個(gè)叫X Window System (X11)
的老伙計(jì)。這個(gè)老伙計(jì)雖然功不可沒,但畢竟年紀(jì)大了,有些力不從心啦。這時(shí)候就輪到我們的新朋友——Wayland
登場(chǎng)了!
1.2 Wayland
背后的故事:它是怎么來的?
話說2008年的時(shí)候,有個(gè)叫Kristian H?gsberg的人,他想:“為什么不能有一個(gè)更好的方式來處理圖形呢?”于是他就開始了Wayland
項(xiàng)目。經(jīng)過多年的努力,Wayland
逐漸成長(zhǎng)起來,現(xiàn)在已經(jīng)被很多主流桌面環(huán)境如GNOME
和KDE Plasma
所采用??梢哉f,Wayland
已經(jīng)成為了Linux社區(qū)的新寵兒。
1.3 Wayland
的夢(mèng)想:它想帶給我們什么?
簡(jiǎn)單來說,Wayland
想讓你的電腦圖形體驗(yàn)變得更棒!它通過簡(jiǎn)化圖形渲染流程,直接與硬件對(duì)話,減少不必要的通信層,從而提高了性能和安全性。對(duì)于開發(fā)者而言,這意味著更少的代碼維護(hù)工作;對(duì)于用戶來說,則意味著更流暢的操作體驗(yàn)。
2. Wayland架構(gòu)
2.1 X和Wayland:兩者架構(gòu)有何不同?
來聊聊X
是怎么處理輸入到顯示的
想象一下,當(dāng)你在使用基于X
的應(yīng)用時(shí),每次你點(diǎn)擊鼠標(biāo)或者敲擊鍵盤,都會(huì)觸發(fā)一系列復(fù)雜的步驟,直到最終的變化出現(xiàn)在屏幕上。這個(gè)過程有點(diǎn)像一個(gè)接力賽,每個(gè)環(huán)節(jié)都至關(guān)重要。
首先,內(nèi)核會(huì)通過evdev
輸入驅(qū)動(dòng)捕捉來自設(shè)備(如鼠標(biāo)或鍵盤)的事件,并將這些事件發(fā)送給X Server
。這里,內(nèi)核做了很多重活,它負(fù)責(zé)管理硬件并將各種特定于設(shè)備的事件協(xié)議轉(zhuǎn)換成統(tǒng)一的Linux evdev
標(biāo)準(zhǔn)格式。
接下來,X Server
要決定哪個(gè)窗口應(yīng)該接收這個(gè)事件,并將其轉(zhuǎn)發(fā)給那些已經(jīng)注冊(cè)了該類型事件監(jiān)聽的客戶端。但是,這里有個(gè)小問題——X Server
并不完全清楚窗口的實(shí)際位置和狀態(tài),因?yàn)檫@些是由合成器控制的,而合成器可能會(huì)對(duì)窗口進(jìn)行各種變換(縮放、旋轉(zhuǎn)、特效等),這些變化是X Server
所不了解的。
然后,接收到事件的客戶端根據(jù)需要更新用戶界面。比如,你可能點(diǎn)擊了一個(gè)復(fù)選框,或者鼠標(biāo)指針進(jìn)入了某個(gè)按鈕區(qū)域,這時(shí)就需要高亮顯示。因此,客戶端會(huì)向X Server
發(fā)送渲染請(qǐng)求。
當(dāng)X Server
收到渲染請(qǐng)求后,它會(huì)把任務(wù)交給顯卡驅(qū)動(dòng),讓其直接編程硬件完成渲染工作。同時(shí),X Server
還會(huì)計(jì)算出渲染影響的屏幕區(qū)域,并向合成器發(fā)送一個(gè)損壞事件(damage event),告知合成器需要重新組合那一部分屏幕內(nèi)容。
最后,合成器會(huì)通知X Server
,由它來決定是直接復(fù)制合成器的后臺(tái)緩沖區(qū)到前臺(tái)緩沖區(qū),還是執(zhí)行一次頁面翻轉(zhuǎn)(pageflip)。這一步驟對(duì)于處理窗口重疊等情況非常重要,但對(duì)于總是全屏顯示的合成器來說,就顯得多余了,因?yàn)樗肓瞬槐匾纳舷挛那袚Q。
現(xiàn)在輪到Wayland
登場(chǎng)啦!
在Wayland
的世界里,整個(gè)流程變得更加簡(jiǎn)潔高效。這里的關(guān)鍵點(diǎn)在于,合成器就是顯示服務(wù)器本身,這意味著我們可以直接從內(nèi)核獲取事件并立即傳遞給合成器,而不需要經(jīng)過額外的中間層。我們還把KMS
(模式設(shè)置)和evdev
的控制權(quán)交給了合成器,進(jìn)一步簡(jiǎn)化了架構(gòu)。
這個(gè)過程大致如下:
-
內(nèi)核依舊負(fù)責(zé)捕捉輸入事件并通過
evdev
接口發(fā)送給合成器。這部分與X
的情況相似,所以我們可以繼續(xù)利用內(nèi)核中已有的輸入驅(qū)動(dòng)。 -
合成器則會(huì)根據(jù)它的場(chǎng)景圖(scenegraph)來確定哪個(gè)窗口應(yīng)該接收事件。由于合成器掌控著所有窗口的狀態(tài)及其可能應(yīng)用的各種變換,它可以準(zhǔn)確地選擇正確的窗口,并將屏幕坐標(biāo)轉(zhuǎn)換為窗口本地坐標(biāo)。只要合成器能夠計(jì)算出針對(duì)輸入事件的逆變換,那么理論上可以對(duì)窗口施加任何類型的變換。
-
客戶端接收到事件后,就像之前一樣更新用戶界面。不過,在
Wayland
下,渲染是在客戶端這邊完成的,之后只需告訴合成器哪些區(qū)域被更新了即可。 -
合成器收集來自各個(gè)客戶端的損壞請(qǐng)求,然后重新組合屏幕內(nèi)容。這個(gè)時(shí)候,合成器可以直接調(diào)用
ioctl
命令通過KMS
安排頁面翻轉(zhuǎn),無需再經(jīng)過X Server
這一環(huán)。
這樣做的好處是減少了不必要的通信開銷,提高了系統(tǒng)的響應(yīng)速度和效率。Wayland
的設(shè)計(jì)使得每個(gè)組件都能專注于自己最擅長(zhǎng)的事情,從而構(gòu)建出了一個(gè)更加流暢且安全的圖形環(huán)境。
2.2 Wayland
的圖像渲染
在Wayland
的世界里,所有的視覺內(nèi)容都是通過緩沖區(qū)
來管理的。應(yīng)用程序想要顯示任何東西時(shí),它會(huì)在自己的內(nèi)存空間中創(chuàng)建一個(gè)或多個(gè)圖像緩沖區(qū),并將這些緩沖區(qū)提交給合成器(compositor)
。合成器
扮演著藝術(shù)家的角色,負(fù)責(zé)將這些圖像組合成最終的畫面,展示給用戶。
Wayland
利用現(xiàn)代GPU
的強(qiáng)大功能,確保無論是播放視頻還是運(yùn)行3D游戲,都能提供即時(shí)響應(yīng)的速度。所有繪圖命令都通過DMA-BUF接口發(fā)送給GPU,這保證了即使在多任務(wù)環(huán)境中也能保持高效運(yùn)作。
客戶端渲染機(jī)制
當(dāng)X Server
被移除后,傳統(tǒng)的X
客戶端渲染機(jī)制也隨之消失。但Wayland
引入了直接渲染(direct rendering
)作為替代方案,這一機(jī)制已經(jīng)在X
的DRI2
中有所體現(xiàn)。在直接渲染模式下,客戶端
和合成器
共享一塊視頻內(nèi)存緩沖區(qū)??蛻舳随溄拥饺?code>OpenGL這樣的渲染庫,該庫知道如何編程硬件,并能夠直接將內(nèi)容渲染到共享緩沖區(qū)
中。合成器
則可以將這塊緩沖區(qū)用作texture
,當(dāng)它合成桌面時(shí)就能顯示出更新的內(nèi)容。
硬件支持的重要性
為了使Wayland
能有效工作,良好的硬件支持至關(guān)重要。這包括但不限于模式設(shè)置/顯示管理和EGL/GLES2等功能。此外,Wayland
還需要一種機(jī)制來高效地在進(jìn)程間共享緩沖區(qū),這部分涉及到客戶端和服務(wù)器端兩個(gè)方面的工作。
-
客戶端實(shí)現(xiàn):定義了一個(gè)
Wayland EGL
平臺(tái),它包含了一套原生類型(如EGLNativeDisplayType
、EGLNativeWindowType
和EGLNativePixmapType
),以及創(chuàng)建這些類型的接口。這是將EGL棧及其緩沖區(qū)共享機(jī)制綁定到通用Wayland API
的膠水代碼。開源實(shí)現(xiàn)中,mesa EGL棧中的wayland-egl.c
和platform_wayland.c
文件實(shí)現(xiàn)了這一功能。 -
服務(wù)器端實(shí)現(xiàn):
Wayland
的服務(wù)器端即為合成器,它通常集成了任務(wù)切換器、應(yīng)用啟動(dòng)器、鎖屏界面等核心用戶體驗(yàn)組件。服務(wù)器運(yùn)行在一個(gè)模式設(shè)置API之上(如內(nèi)核模式設(shè)置、OpenWF Display或其他類似技術(shù)),并通過EGL/GLES2合成器和硬件疊加層(如果有的話)來組合最終用戶界面。為了讓合成器能夠處理來自客戶端的Wayland共享緩沖區(qū),必須啟用EGL_WL_bind_wayland_display
擴(kuò)展,這樣合成器就可以從任意Wayland共享緩沖區(qū)創(chuàng)建一個(gè)EGLImage對(duì)象。這個(gè)過程首先需要綁定EGL顯示到Wayland顯示,之后每當(dāng)合成器接收到客戶端發(fā)來的緩沖區(qū)(通常是通過調(diào)用eglSwapBuffers
時(shí)),它可以將wl_buffer
指針傳遞給eglCreateImageKHR
函數(shù),以EGLClientBuffer
參數(shù)的形式創(chuàng)建一個(gè)EGL圖像,用于后續(xù)作為紋理或通過模式設(shè)置代碼作為疊加平面使用。
3. Wayland協(xié)議
WayLand
協(xié)議, 是WayLand客戶端與WayLand合成器之間的通訊協(xié)議
官方提供的WayLand
協(xié)議的參考實(shí)現(xiàn)
https://gitlab.freedesktop.org/wayland/wayland
官方提供的WayLand合成器的參考實(shí)現(xiàn)
https://gitlab.freedesktop.org/wayland/weston
3.1 協(xié)議傳輸與消息格式
Wayland
協(xié)議通過UNIX
域流套接字進(jìn)行傳輸,通常情況下,該套接字的端點(diǎn)名為wayland-0
(盡管可以通過環(huán)境變量WAYLAND_DISPLAY
來更改)。從Wayland
1.15版本開始,實(shí)現(xiàn)可以選配支持位于文件系統(tǒng)任意位置的服務(wù)器套接字端點(diǎn),只需將WAYLAND_DISPLAY
設(shè)置為服務(wù)器端點(diǎn)監(jiān)聽的絕對(duì)路徑即可。
每條消息被構(gòu)造成由多個(gè)32位字組成的序列;值以主機(jī)的字節(jié)序表示。消息頭部包含兩個(gè)32位字:
- 第一個(gè)字是發(fā)送者的對(duì)象ID(32位)。
- 第二個(gè)字分為兩部分:高16位是消息大小(以字節(jié)為單位),從頭部開始計(jì)算(即最小值為8字節(jié));低16位是請(qǐng)求或事件的操作碼。
有效載荷描述了請(qǐng)求或事件的參數(shù)。每個(gè)參數(shù)總是對(duì)齊到32位邊界;如果需要填充,填充字節(jié)的值未定義。沒有前綴描述類型,而是隱式地從XML規(guī)范推斷出來。
以下是參數(shù)類型的表示方式:
-
int
,uint
- 表示32位有符號(hào)或無符號(hào)整數(shù)值。
-
fixed
- 有符號(hào)的24.8定點(diǎn)數(shù)。它是一種提供符號(hào)位、23位整數(shù)精度和8位小數(shù)精度的有符號(hào)十進(jìn)制類型。在C API中,它作為一個(gè)不透明的結(jié)構(gòu)體,并提供了轉(zhuǎn)換為雙精度浮點(diǎn)數(shù)和整數(shù)的幫助函數(shù)。
-
string
- 以一個(gè)無符號(hào)的32位長(zhǎng)度(包括空終止符)開頭,接著是字符串內(nèi)容,包含終止的空字節(jié),然后是對(duì)齊到32位邊界的填充??罩涤瞄L(zhǎng)度為0表示。
-
object
- 32位對(duì)象ID??罩涤肐D為0表示。
-
new_id
- 32位對(duì)象ID。一般情況下,新對(duì)象使用的接口可以從XML推斷出來,但在接口未指定的情況下,
new_id
之前會(huì)有一個(gè)指定接口名稱的字符串,以及一個(gè)指定版本的無符號(hào)整數(shù)。
- 32位對(duì)象ID。一般情況下,新對(duì)象使用的接口可以從XML推斷出來,但在接口未指定的情況下,
-
array
- 以32位數(shù)組大小(以字節(jié)為單位)開頭,接著是數(shù)組內(nèi)容的直接拷貝,最后是對(duì)齊到32位邊界的填充。
-
fd
- 文件描述符并不存儲(chǔ)在消息緩沖區(qū)中,而是在UNIX域套接字消息的輔助數(shù)據(jù)(msg_control)中。
Wayland
協(xié)議并未明確規(guī)定輔助數(shù)據(jù)在流中的確切位置,只規(guī)定文件描述符的順序與消息及其內(nèi)部的fd
參數(shù)在網(wǎng)絡(luò)上的順序相同。
這意味著流中的任何字節(jié),甚至是消息頭部,都可能攜帶帶有文件描述符的輔助數(shù)據(jù)。
客戶端和合成器(compositor
)應(yīng)當(dāng)排隊(duì)等待接收的數(shù)據(jù),直到他們有完整的消息可供處理,因?yàn)槲募枋龇赡軙?huì)早于或晚于對(duì)應(yīng)的數(shù)據(jù)字節(jié)到達(dá)。
3.2 核心接口概述
Wayland
協(xié)議設(shè)計(jì)了一套核心接口,用于客戶端與服務(wù)器之間的交互。這些接口提供了請(qǐng)求、事件和錯(cuò)誤(實(shí)際上也是特殊類型的事件)的功能,如前文所述。雖然具體的合成器(compositor
)實(shí)現(xiàn)可能會(huì)提供作為擴(kuò)展的自有接口,但有一些接口是預(yù)期一定會(huì)存在的。
以下是Wayland
的核心接口:
-
wl_display
- 作為核心全局對(duì)象,它充當(dāng)了客戶端與
Wayland
服務(wù)器之間通信的起點(diǎn)。通過這個(gè)接口,客戶端可以獲取其他全局對(duì)象,并發(fā)送或接收消息。
- 作為核心全局對(duì)象,它充當(dāng)了客戶端與
-
wl_registry
- 全局注冊(cè)表對(duì)象,用來枚舉當(dāng)前可用的全局對(duì)象??蛻舳耸褂么私涌趤戆l(fā)現(xiàn)并綁定到它們需要的服務(wù)。
-
wl_callback
- 回調(diào)對(duì)象通常用于異步操作的完成通知,比如幀同步。
-
wl_compositor
- 合成器(
compositor
)單例,提供創(chuàng)建surface
和其他圖形資源的方法。
- 合成器(
-
wl_shm_pool
和wl_shm
- 這兩個(gè)接口共同支持共享內(nèi)存池的創(chuàng)建和管理,使得圖像數(shù)據(jù)可以直接在客戶端和合成器(
compositor
)之間交換。
- 這兩個(gè)接口共同支持共享內(nèi)存池的創(chuàng)建和管理,使得圖像數(shù)據(jù)可以直接在客戶端和合成器(
-
wl_buffer
- 表示一個(gè)
surface
的內(nèi)容,可以由多種不同方式創(chuàng)建,包括但不限于共享內(nèi)存。
- 表示一個(gè)
-
wl_data_offer
,wl_data_source
,wl_data_device
和wl_data_device_manager
- 這組接口支持?jǐn)?shù)據(jù)傳輸功能,例如剪貼板和拖放操作。
-
wl_shell
和wl_shell_surface
- 提供了創(chuàng)建桌面風(fēng)格
surface
的方法,并為這些surface
提供了額外的元數(shù)據(jù)接口。
- 提供了創(chuàng)建桌面風(fēng)格
-
wl_surface
- 屏幕上的
surface
,是所有可視內(nèi)容的基礎(chǔ)元素。
- 屏幕上的
-
wl_seat
- 輸入設(shè)備的集合,每個(gè)
seat
代表一組輸入設(shè)備,比如鍵盤、鼠標(biāo)和觸控屏。
- 輸入設(shè)備的集合,每個(gè)
-
wl_pointer
,wl_keyboard
,wl_touch
- 分別對(duì)應(yīng)指針、鍵盤和觸摸屏等輸入設(shè)備的具體接口。
-
wl_output
- 描述合成器(
compositor
)輸出區(qū)域的信息,比如顯示器的幾何屬性和模式。
- 描述合成器(
-
wl_region
- 定義了一個(gè)不規(guī)則形狀的區(qū)域,可以應(yīng)用于
surface
以控制其可見性或其他特性。
- 定義了一個(gè)不規(guī)則形狀的區(qū)域,可以應(yīng)用于
-
wl_subcompositor
和wl_subsurface
- 支持子
surface
組合,允許將一個(gè)surface
嵌入到另一個(gè)surface
中,形成復(fù)雜的用戶界面布局。
- 支持子
上述接口構(gòu)成了Wayland
協(xié)議的基本構(gòu)建塊,確保了客戶端應(yīng)用程序能夠與合成器(compositor
)進(jìn)行高效且安全的通信。
4. Wayland對(duì)X11應(yīng)用的支持
為了讓那些還沒遷移到Wayland
上的老應(yīng)用繼續(xù)工作,Wayland
引入了一個(gè)叫做XWayland
的小幫手。它實(shí)際上就是一個(gè)小型的X Server
,可以在Wayland
環(huán)境中運(yùn)行,接受來自傳統(tǒng)X11
客戶端的連接請(qǐng)求,并將它們適配到新的顯示協(xié)議之上。這樣一來,用戶就可以在同一桌面上同時(shí)運(yùn)行兩種類型的應(yīng)用程序,無縫切換毫無壓力。
盡管Wayland
本身并不需要傳統(tǒng)的X窗口管理器
,但在某些情況下(例如通過XWayland
運(yùn)行X11
應(yīng)用時(shí)),它們?nèi)匀话缪葜匾巧4藭r(shí),Wayland
合成器會(huì)充當(dāng)“超級(jí)管理員”,負(fù)責(zé)協(xié)調(diào)不同類型的窗口行為,確保整個(gè)系統(tǒng)穩(wěn)定運(yùn)行。
4.1 X11 應(yīng)用程序的連接方式
X11
應(yīng)用程序連接到Xwayland
的方式就如同它連接到任何其他X
服務(wù)器一樣。Xwayland
負(fù)責(zé)處理所有的X11
請(qǐng)求,并且在另一端,它作為一個(gè)Wayland
客戶端連接到了Wayland
合成器(compositor
)。
4.2 X Window Manager
(XWM) 和 Wayland Window Manager
(WWM)
XWM
是Wayland
合成器(compositor
)不可或缺的一部分。它使用標(biāo)準(zhǔn)的X11
窗口管理協(xié)議來管理所有通過Xwayland
運(yùn)行的X11
窗口。重要的是,XWM
充當(dāng)了Xwayland
窗口狀態(tài)和Wayland
合成器(compositor
)的WWM
之間的橋梁。這樣,WWM
就可以統(tǒng)一管理所有類型的窗口,無論是原生的Wayland
窗口還是X11
(即Xwayland
)窗口。這對(duì)于提供一致的用戶體驗(yàn)至關(guān)重要。
4.3 Xwayland
的工作原理
由于Xwayland
依賴Wayland
進(jìn)行輸入和輸出操作,所以它不需要像Xorg
那樣使用設(shè)備驅(qū)動(dòng)程序。這意味著不會(huì)使用任何xf86-video-*
或xf86-input-*
模塊。此外,Xwayland
服務(wù)器沒有配置文件。對(duì)于可選的硬件加速渲染,Xwayland
采用了GLAMOR
庫。
4.4 單一實(shí)例的Xwayland
通常,一個(gè)Wayland
合成器(compositor
)只會(huì)產(chǎn)生一個(gè)Xwayland
實(shí)例。這是因?yàn)樵S多X11
應(yīng)用程序假設(shè)它們可以通過X
服務(wù)器與其他X11
應(yīng)用程序通信,而這需要共享同一個(gè)X
服務(wù)器實(shí)例。這也意味著,除非Wayland
合成器(compositor
)特別選擇通過為特定應(yīng)用程序生成獨(dú)立的Xwayland
實(shí)例來打破這種通信,否則Xwayland
不會(huì)保護(hù)或隔離各個(gè)X11
客戶端。值得注意的是,X11
客戶端與Wayland
客戶端之間是天然隔離的。
4.5 Xwayland
的兼容性挑戰(zhàn)
盡管Xwayland
盡可能地兼容傳統(tǒng)的X
服務(wù)器,但要達(dá)到100%的兼容幾乎是不可能的。特別是桌面環(huán)境組件中的X11
窗口管理器基本上不受支持。一個(gè)X11
窗口管理器無法識(shí)別原生的Wayland
窗口,因此它只能管理X11
窗口。然而,必須有一個(gè)XWM
來保留獨(dú)占的窗口管理角色,以便Wayland
合成器(compositor
)可以適當(dāng)?shù)仫@示X11
窗口。對(duì)于其他的桌面環(huán)境組件,如分頁器和面板,為了在WWM
中通過XWM
支持它們而添加必要的接口往往被認(rèn)為是不值得的。
4.6 窗口標(biāo)識(shí)與同步通信
在Xwayland
中,一個(gè)X11
窗口可能會(huì)對(duì)應(yīng)于Wayland
中的一個(gè)wl_surface
對(duì)象。這個(gè)wl_surface
對(duì)象用于輸入和輸出:它被輸入事件引用,并用于向Wayland
合成器(compositor
)提供X11
窗口的內(nèi)容。X11
窗口和wl_surface
存在于不同的協(xié)議流中,因此需要將它們匹配起來以使XWM
能夠正常工作。
當(dāng)Xwayland
在Wayland
上創(chuàng)建一個(gè)wl_surface
時(shí),它也會(huì)發(fā)送一個(gè)類型為原子"WL_SURFACE_ID
"的X11 ClientMessage
給對(duì)應(yīng)的X11
窗口,該消息的第一個(gè)32位數(shù)據(jù)元素?cái)y帶的是wl_surface
的Wayland
對(duì)象ID。這是XWM
關(guān)聯(lián)wl_surface
與X11
窗口的方法。需要注意的是,創(chuàng)建wl_surface
的請(qǐng)求和ID消息可能以任意順序到達(dá)Wayland
合成器(compositor
)。因此,在實(shí)現(xiàn)XWM
時(shí),需要格外小心以避免(隨機(jī))死鎖。強(qiáng)烈建議所有來自XWM
的X11
通信都應(yīng)該是異步的,因?yàn)樽C明同步或阻塞的X11
調(diào)用不會(huì)導(dǎo)致死鎖通常是極其困難的。所有Wayland
通信已經(jīng)天生就是異步設(shè)計(jì)的。
5. 總結(jié)
本文介紹了Wayland
作為新一代顯示服務(wù)器協(xié)議,旨在替代傳統(tǒng)的X Window System (X11)
,為Linux
及其他類Unix
系統(tǒng)提供更高效、安全的圖形界面體驗(yàn)。
Wayland通過簡(jiǎn)化圖形渲染流程,直接與硬件對(duì)話,減少了不必要的通信層,提高了性能。其架構(gòu)中合成器即為顯示服務(wù)器,可直接從內(nèi)核獲取事件并傳遞給合成器,避免了額外中間層,從而減少通信開銷。Wayland
利用現(xiàn)代GPU功能確保圖像內(nèi)容即時(shí)響應(yīng),通過DMA-BUF接口發(fā)送繪圖命令保持高效運(yùn)作。
在Wayland協(xié)議方面,它定義了一套核心接口,用于客戶端與服務(wù)器之間的交互,包括wl_display、wl_registry等,確保應(yīng)用程序能與合成器進(jìn)行高效安全通信。
此外,為了兼容傳統(tǒng)X11
應(yīng)用,引入了XWayland
作為小型X Server,在Wayland環(huán)境中運(yùn)行,使新舊應(yīng)用無縫共存。然而,盡管XWayland盡力兼容,仍存在一定的兼容性挑戰(zhàn),特別是對(duì)于X11窗口管理器的支持有限。