這篇文章Ivon想討論Linux系統「X視窗系統」與「Wayland」的發展狀況,討論Wayland的優缺點,讓你決定要不要切換到Wayland。最後面附上能夠最快體驗到最新Wayland技術的Linux發行版。
事情正在起變化。Linux社群常常討論說要不要放棄X11,切換到Wayland工作階段,那麼,什麼是X11?什麼是Wayland?
X視窗系統是決定你的Linux電腦畫面要如何顯示的一組軟體,但是它太老了問題很多,現在有採用Wayland協定的軟體,要用現代的程式碼取代這個老舊的軟體。不過由於Wayland問題重重,儘管越來越多Linux系統採用,但發展10年了到現在X視窗系統仍然無法被完全取代。下面我們來探討原因。
撰文當下測試的環境資訊:
- 系統:Arch Linux
- Linux核心版本:6.7.9
- 桌面環境:KDE Plasma 6.0.2 (Wayland)
- 顯示卡:Intel UHD Graphics
1. 改變的契機:X11與Wayland的比較#
X視窗系統和Wayland都是負責顯示Linux畫面的一組軟體。關於二者底層原理比較的部份,才疏學淺不獻醜了,網路上已經有很多資料了,文末的「延伸閱讀」處有許多有趣的文章可以詳讀。此處簡述我的個人理解。
X視窗系統(X Window System),簡稱X,誕生時間早於Linux。X視窗系統在1987年出現,用於顯示圖形環境之用。當時還是Unix的時代呢!到現在已經有30年以上歷史了。
為什麼Linux需要「裝」X視窗系統才有畫面?因為Linux核心真的沒有顯示畫面的軟體。
當初設計者只有制定X的通訊協定(protocol)標準,沒有詳細規範X的實作方式(implementation),所以有各家的X視窗軟體出現。2000年左右,X.org組織開發的X.org軟體取代XFree86,逐漸成為公認的標準,API什麼的都他們訂好的,由各大桌面環境採用。由於X.org採用的X通訊協定為X11版,所以他們家研發的X伺服器也稱作X11。
X視窗系統之所以會被人稱作伺服器(server),就是因為它可以接受多個X客戶端(client)同時連線,即「主從式架構」,呼應以前大型機時代的需要,並且透過網路透明性(Network Transparency)進行通訊。原理參考下圖。
網路透明性為何?透過X伺服器,你可以把另一台電腦的視窗,透過網路傳輸,顯示在你的電腦上。這樣就可以很多人同時連線到同一台主機工作啦。
並且X視窗系統在個人電腦上也是遵循主從式架構進行通訊的,每個軟體的視窗都是一個X客戶端,與你電腦上的X伺服器溝通,進而顯示畫面。
關於桌面的視窗要長怎樣,X視窗系統的協定沒有詳細規定,這就給了桌面環境開發者很大的操作空間。開發者可透過合成器(compositor)來決定視窗的外貌,包括打叉按鈕位置、標題列、動畫效果等等。所以才有Compiz這類酷酷的3D動畫桌面出現。
主從式架構是X視窗系統設計的優點也是缺點,優點是遠端工作很方便,且彈性很大。
缺點就是這樣安全性不高。誰說「伺服器」一定是在遠端執行的?X伺服器在你的電腦上也是維持著主從式架構的關係,程式之間的傳輸沒有加密,可以輕易被其他程式攔截,例如鍵盤側錄。而且客戶端跟伺服端頻繁的傳輸,會造成圖形效率不佳,導致畫面撕裂。
儘管撕裂問題大部分桌面環境和GPU驅動程式都想辦法迴避掉了,但Nvidia仍然擺爛,因為他們驅動不開源,常常出問題。
X視窗系統的問題應該有更好的解決方案才對…於是就有了Wayland,於2008年出現,由曾經參與過X11專案的開發者發起。
Wayland要徹底改變X視窗系統的主從式架構,讓程式可以更有效率的利用圖形硬體。Wayland本身是一個通訊協定規範,實際負責繪製視窗的軟體叫做Wayland compositor (合成器)
這即是說,Wayland開發者只規定通訊協定的規範,對合成器要怎麼實作並無詳細規範,他們只推出了一個叫做"Weston"的參考實作而已。
這邊是Wayland的原理圖,可以看到X伺服器不見了,一切都由合成器負責,整個通訊過程簡化了許多,網路透明性也被砍掉了。
那「X」Wayland又是什麼呢?為了防止一堆X伺服器下的舊程式不能用,Wayland開發者就提出了XWayland的過度方案,在Wayland下跑一個X伺服器,讓那些舊程式能夠在Wayland下運作。儘管如此,XWayland不保證能100%相容舊有的X程式,一些古怪的API可能無法使用,開發者最好還是把程式重寫,修改成原生Wayland程式較好。
Wayland出來了,那X11怎麼辦呢?要知道X11已經基本停止開發了,Linux世界很多新功能都改往Wayland那邊發展了,比如支援HDR內容的程式碼。
根據 Phoronix的報導,近年來X11的開發速度已達到歷史新低,基本上沒在動了。
你知道為什麼嗎?聽說全世界只有三個人能看懂X視窗系統的全部程式碼,你知道我知道,但獨眼龍不知道。連獨眼龍都不知道的東西,開發者也無從下手,修改陳年X伺服器的程式碼。很多X伺服器的設計在現代已經不符時代需求,是時候得拋棄X了,所以開發者乾脆做個新的東西出來。
但由於各式各樣的問題,一直到撰文當下的2024年,Wayland還是沒辦法取代X。
2. 為什麼要用Wayland?#
Wayland比較明顯的優點如下:
- 無論GNOME還是KDE,Wayland的動畫看起來就是比X11順暢許多。
- 圖形效能更好。徹底解決畫面撕裂問題,讓Nvidia用戶受惠。
- 支援非整數螢幕縮放、不同螢幕使用不同解析度、HDR、HiDPI、VRR動態更新率等現代化的圖形功能
- 瀏覽器支援雙指放大
- 對觸控手勢支援更好,GNOME和KDE的手勢都只有Wayland下才可以使用
- 可善用PipeWire和XDG Desktop Portal技術,統一螢幕截圖、螢幕錄影、音訊處理、分享螢幕、遠端桌面、選取檔案的路徑。
- 增強系統安全性,杜絕鍵盤側錄程式
現階段,即使你不喜歡Wayland,也可以在登入界面(Display Manager)隨時切換回X11工作階段,二者可以共存。
3. 為什麼不要用Wayland?#
講到Wayland缺點就講不完了。
聽說在Linux社群放這張會被打。
最粗暴的理由:Wayland缺乏殺手級應用程式,幾乎沒有程式「非要Wayland」不可。
probonopd(AppImage格式的提倡者)寫的這篇文章總結得很好,把Wayland尚未解決的問題一條條列出來,即時更新。每天都有人在下面吵架XD
我記得最早這篇文章的標題叫做"Boycott Wayland. It breaks everything." 一開始叫人家抵制Wayland,後來改成了採用Wayland前務必三思。
他裡面講的東西如果你是Linux日常使用者鐵定會遇到。
我講比較實在的問題,Chromium系列的瀏覽器(Chrome、Brave、Edge、Vivaldi、Opera),目前v121版對Wayland支援度還是不好,Chromium在Wayland下預設還是跑在XWayland模式的!導致效能不彰。
如果在chrome://flags
強制開啟Ozone進入純Wayland模式,你猜怎麼著?Fcitx5就無法輸入中文了!根據開發者說法,需要再加上--gtk-version=4
參數啟動才會正常。嗯,問題是我加了還是沒用啊,原來還有個--enable-wayland-ime
參數呀!就算Chromium真給你設定好純Wayland模式了,可它竟然不支援VA-API硬體加速?這功能到2024年1月才修好。
善意提醒:很多用Electron寫的程式也會受到Chromium的影響喔,Chromium的bug同樣也會反映在Electron程式上,比如Visual Studio Code。如果開發者死不更新Electron核心版本那麼這個問題只會更嚴重。
拿另外一個程式來說,有時候OBS Studio在Wayland下的視窗分享擷取有問題,KDE彈出視窗選擇的時候還是一片黑,可能要用什麼workround才能正常作業。
此外,Wayland下許多遠端桌面軟體都會出問題。雖然有WayVNC和WayPipe出現但是效能不太行。只有RustDesk和Sunshine有加入Wayland支援。
負責轉譯Windows程式的Wine(就是Steam Deck Proton的上游專案)在今年的最新9.0版本才加入了實驗性的Wayland驅動程式。現在Steam即使是原生的遊戲很少有支援Wayland的,許多遊戲依然是用XWayland跑的,導致Wayland環境玩遊戲效能會出問題。
Wayland雖然改善了HiDPI螢幕的問題,可以任意指定縮放係數,但是舊版XWayland程式不會跟著縮放。若強制縮放XWayland程式就會模糊。
就連KDE 6自家的程式,到現在都還會爆出GWenview視窗變超巨大、Kate彈出莫名浮動視窗的詭異bug。KDE字體檢視器到現在還不支援Wayland。
X11下行之有年的色彩管理系統,Wayland也還沒實現,要到KDE 6才有。
唉呦我的媽。
如果程式在Wayland下需要使用者手動弄一堆東西才可以正常使用,就代表Wayland根本還沒準備好吧!
啊你可以推給KDE開發者的錯吧,誰叫他們合成器沒寫好。
對!標準不一就是Wayland的一個最大問題!
這張圖解釋得不錯:
Wayland其實並不是X11的直接替代品,幾乎是不一樣的東西了!很多舊有的協定在Wayland上都沒有對應的東西,必須等開發者逐一實現。
對軟體開發者而言,他們也得適應Wayland的變化,或者講白點,程式整個重寫
過去大家使用的是X.org的X視窗系統實作,有統一的API可以遵循,各家依此開發視窗合成器。但進入Wayland後,X伺服器不見了,各家要自行想辦法做出Wayland合成器。
Linux世界沒有中心化開發這檔事,這就導致了各家標準不一的狀況。前面說過Wayland開發者只規定通訊協定,對合成器要怎麼實作並無詳細規範。現在Wayland合成器少說有10種以上了吧,GNOME的Mutter有Mutter的實現,KDE的Kwin有kwin的實現,Hyprland也有自己的實現。
雖然開源組織之間會協調標準,GTK和QT這類知名的函式庫也跟進支援Wayland,把系統底層的東西抽象化減少開發者負擔,但總有些標準沒有辦法統一。
Fcitx5的開發者 在Blog抱怨過這個問題,他為了支援各大桌面環境,實現了4種輸入法協定,甚至還向KDE提交PR改進他們的合成器。
即使程式跑在XWayland模式,也不是100%完美的解決方案。它會導致應用程式效能下降,且縮放模糊,有的甚至無法分享剪貼簿,或是拖拉貼上。但因為Wayland開發不完美,一堆開發者仍選擇這種折衷的解決方法,不開發原生的Wayland程式,反而使用XWayland擺爛。
綜上所述,如果真的去細究Wayland的問題,最終,你會變成半個Linux開發者。
如果有天份的話,你可能還會發現名為 wlroots的函式庫,著手撰寫自己的Wayland合成器!加入Sway、Hyprland、river、Wayfire等一眾開發者的行列。
4. 但是,Wayland依然是未來趨勢#
事情正在起變化,Wayland就像Systemd、PulseAudio、PipeWire、Avahi一樣,剛出來罵聲連連,但他們最後都逐漸為大眾接受了。
這是為什麼?上面講的Wayland缺點,bug,缺陷,未來會慢慢解決。這篇文章提到Wayland的問題,可能幾個月後就不見了。
堪薩斯合唱團的歌曲告訴過你了:CARRY ON MY WAYLAND SON!
各大Linux發行版都逐漸把Wayland作為預設選項了。
商業公司RedHat、Caonocial、SUSE大力推動Wayland作為預設選項,RedHat甚至 準備在RHEL 10完全移除X.org。
Valve和AMD合作讓Steam Deck上的Wayland支援HDR,連驅動死不開源的Nvidia也逐漸改善Wayland支援度了,更多新特性正在路上。
在未來幾年,GNOME可能就會徹底砍掉X11的登入選項,變成純Wayland環境,連帶的GTK也會正式放棄支援X11。但是我這裡講的是滾動發行版的排程,像Ubuntu LTS和Debian Stable這類穩定更新的發行版可能要更久才會進入純Wayland環境。
X11要花幾年才會死透?我預估再等個十年吧。等到Debian Stable和Ubuntu LTS「預設」也用上Wayland那才是真正成熟了。目前Ubuntu 24.04預設仍是使用X11工作階段。
5. 如何切換到Wayland?#
如上所述,Wayland不是單一的軟體,是由桌面環境個別實作的。
最大的考量因素,永遠是你的Linux發行版更新速度,還有桌面環境對Wayland的支援度。
如何知道你在用X11還是Wayland?開啟終端機,輸入以下指令便可知一二。
echo $XDG_SESSION_TYPE
如果要在X11與Wayland之間切換,通常系統登入畫面(Display Manager)都會有選項讓你選。
撰文當下各桌面環境的Wayland支援狀況:
- GNOME 46:Linux界的桌面老大哥,自GNOME 42之後支援良好,幾乎沒有bug了。
- KDE Plasma 6.0:越來越好了。至於KDE 5以前版本嘛,戒慎恐懼。儘管KDE最早在5.4版就支援Wayland了,我還是不太敢用,破圖、工作列崩潰樣樣來。
- XFCE 4.18:2024年宣佈將支援Wayland
- Cinnamon 6.0:2023年Linux Mint開發者宣佈將支援Wayland
- LXQT 1.4:2024年宣佈將支援Wayland
- i3wm、dwm等平鋪視窗管理器:沒辦法移植,可用Sway、Hyprland取代。會用這類桌面環境的高手應該不用我講你自己就會判斷合不合適了。
如果你想切換到Wayland環境,就優先試試搭載「GNOME」桌面環境的Linux發行版吧。GNOME是Linux桌面環境的老大哥,Wayland支援度是最佳的。
至於Linux發行版部分,如果想要趕快收到Wayland更新和錯誤修正,那麼滾動發行版(Arch Linux、Fedora、openSUSE Tumbleweed、Debian Sid、Gentoo)用戶比較吃香,穩定發行版(Debian Stable、Ubuntu LTS、openSUSE Leap、Rocky Linux)用戶要等比較久。
延伸閱讀#
- Wayland環境尚未解決的問題: Think twice about Wayland. It breaks everything!
- KDE開發者寫的週記: Does Wayland really break everything?
- 揮棒成功寫的文章,生動講解X視窗系統的原理: 【心得】Linux 出專欄啦! (14):桌面環境系列=〉x11 和 wayland ,談技術債與財源問題(厲害吧!!)
- 用HTML5讓你理解何為X11: Explanations - X Window System Basics
- Wayland在FreeDeskop.org的官方頁面: https://wayland.freedesktop.org