Run Wayland applications on X server.
有程式限制Wayland-only,但Wayland的bug好多,不想開Wayland桌面環境執行,那麼不妨使用巢狀Wayland工作階段的解決方案吧!
巢狀Wayland工作階段 (nested Wayland session) 意即在X11工作階段跑一個Wayland合成器,也就是Wayland on X Server!剛好跟XWayland反過來,現在是WaylandX!
通常作法是跑一個大視窗,讓所有Wayland程式跑在視窗裡面,不受外界影響,還可以吃到Linux的GPU加速呢!
有了巢狀Wayland工作階段,可以方便你評估應用程式在Wayland下的表現。
有什麼程式是一定要Wayland的?目前我想到的就是 Waydroid,需要Wayland才能顯示Android畫面,還有一些測試新興技術的玩意!
1. 選擇Wayland合成器#
說到可以在X11下跑的Wayland合成器(compositor),你有以下選擇。
Weston:Wayland官方參考實作,所有新特性都會加入到這裡,例如RDP遠端桌面協定。Microsoft WSLg也有採用Weston做顯示Linux圖形程式之用。由於是參考實作,功能有限,不像Sway那樣適合當桌面環境使用,僅適合執行單一程式。
Gamescope:Valve專為Steam玩遊戲打造的迷你合成器,可以縮放內容,以及讓部份Steam遊戲支援HDR。僅適合執行單一程式。
此外,Cage、Sway、Hyperland、Kwin、Gnome Mutterl應該也能用巢狀方式執行,不過他們的設計複雜容易出問題,所以還是用較簡單的Weston吧。
2. 安裝Weston#
許多Linux發行版套件庫都有收,例如Ubuntu
sudo apt install weston
若要體驗最新功能,需要參考 開發者指示手動編譯。
3. Weston啟動方式#
Weston支援多種圖形渲染後端,當它在X伺服器環境啟動的時候,就會變成X伺服器的客戶端。
- 確認你目前的工作階段是為X11
echo $XDG_SESSION_TYPE
- 從Linux終端機啟動weston
weston
然後會跳出一個大視窗。Weston是極簡的合成器,內部只有幾個Wayland範例程式。
開啟Weston內的終端機,檢查目前的工作階段環境變數
echo $XDG_SESSION_TYPE
- 如果不是顯示"wayland"就強制指定。
export XDG_SESSION_TYPE=wayland
- 因為Weston內部沒有應用程式選單的組件,所以你得從終端機用指令啟動程式。
# 以Wayland模式啟動Firefox
MOZ_ENABLE_WAYLAND=1 firefox
- 如此一來,Weston視窗內的所有程式都會認為自己跑在Wayland環境了。
目前沒有在Weston貼上剪貼簿的方法。
4. 調整Weston啟動時的設定檔#
檔案寫在~/.config/weston.ini
設定檔格式:每個區塊都是用中括號包起來,並在下面填寫選項。
如果有的程式只支援X11,加入該選項可以允許程式跑在XWayland
[core]
xwayland=true
設定不要自動鎖定螢幕
[core]
idle-time=0
此選項可設定桌布
[shell]
background-image=/home/user/Pictures/background.png
background-type=scale-crop
設定縮放係數,至於預設視窗的長寬,得附加在指令後面作為引數:weston --width 1024 --height 768
[output]
scale=2
順帶一提,Weston安裝後會自動註冊在顯示管理器(GDM、SDDM、LightDM)欄位,成為可以登入的桌面工作階段。不過正如上面所說的,Weston功能太少不適合當桌面環境使用。
這個檔案位於/usr/share/wayland-sessions/weston.desktop