Running nested X11 sessions under Wayland.
「XWayland」為Wayland相容舊式X11程式的手段。
Linux以前的程式都是為X11顯示協定撰寫,近十年以來Linux桌面環境主流逐漸切換到Wayland,但總有程式沒有尬廣跟上,那麼該怎麼辦呢?
如果你在使用Wayland協定的Linux桌面開啟專為X11設計的舊版程式,Wayland會自動生一個X伺服器出來,讓X11的程式可以跑在Wayland環境,這個X伺服器即XWayland。這是Wayland能相容許多舊X11程式的原理,開發者不用急著將程式改寫成原生Wayland程式也能繼續使用。
圖例:Firefox (X11) 執行於KDE Wayland
不過,XWaylnad預設行為通常都是一個程式一個視窗,沒有母視窗,這稱之為「XWayland Rootless Mode」,背後執行的指令為Xwayland -rootless
。
如果你想要在Wayland環境下開一個母視窗,在那個視窗裡面專門跑多個X11的程式,那麼你就會需要用到「Xwayland Rootful Mode」。此即為巢狀X11工作階段。
1. Xwayland Rootful有何好處?#
Xwayland Rootful Mode可以把X11程式關在一個視窗內,宛如一個完整的工作階段。這樣,你就能在該視窗啟動X視窗管理器(例如i3wm),並讓程式以為自己跑在真正的X伺服器環境下。
這樣有望解決部分程式在Wayland下運作詭異的現象,比如選單消失、螢幕閃爍、無法共享螢幕的問題。
2. Xwayland Rootful指令使用方式#
請使用Xwayland 23以上版本
如果使用Wayland協定的桌面環境,此套件應該已經安裝。
sudo apt install xwayland
下述指令,開一個1280x720解析度的新視窗(之後可以用xrandr指令調整),DISPLAY設定為10
Xwayland -geometry 1280x720 -decorate -retro -host-grab :10
這樣會跳出新視窗,按CTLR+SHIFT關閉滑鼠擷取模式
這樣只要設定環境變數,就可以在那個DISPLAY開啟X11程式了。例如我要在這個視窗啟動Firefox,這裡加上MOZ_ENABLE_WAYLAND=
是要強制關閉Firefox的Wayland模式。
DISPLAY=:10 MOZ_ENABLE_WAYLAND='' firefox
XWayland下的Firefox畫面,跑的是X11模式
我們甚至可以在Xwayland的視窗跑一個X視窗管理員或者桌面環境,例如i3wm:
DISPLAY=:10 i3
如此一來XWayland視窗內的使用體驗就會更加完整,視窗外觀會帶上裝飾。
3. 類似XWayland Rootful的軟體#
其他合成器也有巢狀X11的功用
- xwayland-run:輔助指令稿,簡化Xwayland Rootful指令的複雜度
- Steam Gamescope:玩遊戲專用
- Xephyr
- Xnest