快轉到主要內容

Windows 11 WSL2跑Linux桌面環境與圖形程式的方法,使用WSLg XWayland

Linux系統 虛擬機與容器技術 Windows Subsystem for Linux KDE Plasma GNOME
✍ 切換正體/簡體字
Ivon Huang
作者
Ivon Huang
目錄

Read this article in English

本文讓Ivon解說如何在Windows WSL跑Linux桌面環境和播放音訊,並將Linux環境中文化。

WSL支援透過WSLg跑圖形程式。例如在WSL內安裝firefox套件,輸入firefox指令,就會在Windows打開一個Firefox獨立視窗,可吃到GPU硬體加速。

更進一步說,你還可以用WSL跑GNOME、XFCE、KDE、LXQT、Cinnamon等桌面環境,體驗使用Linux電腦的感覺。

比方說下圖是WSL Ubuntu跑KDE桌面的樣子,你可以在Windows與Ubuntu之間無縫切換,效能比虛擬機好。

影片版示範

請注意WSL內的桌面功能跟Linux實機有差距,也可能出現各種詭異bug。

想體驗完整Ubuntu桌面的話,我還是建議你安裝Ubuntu到實體機器上,例如 Windows 11與Ubuntu雙重開機

1. 環境 #

  • Windows 11 22H2
  • WSL 2.0.9.0
  • WSL Ubuntu 22.04

WSL預設是按照你電腦的RAM切一半給Linux用。若要跑圖形環境可能會比較吃資源,建議至少要留4GB RAM給Linux。你可以調整 wslconfig讓WSL分配到多一點硬體資源。

2. 說明 #

請看Microsoft提供的WSLg架構圖

為什麼不直接使用WSLg顯示Linux桌面呢?嗯…它使用Wayland顯示協定,已經有自己的視窗管理器,只能啟動文章一開始提到的Firefox這類「單一窗口」的程式,不能啟動新的桌面環境。

當你啟動Firefox的時候,視窗會被WSLg「搶走」。但我希望開一個桌面環境的視窗後,所有的程式都待在該視窗內。

所以跑一個獨立的X伺服器比較好。所有X程式都跑在同一個視窗裡。

X伺服器的選擇有三個:

  1. WSL外面跑VcXsrv、X410這類獨立的X伺服器程式
  2. WSL內跑Xephyr
  3. WSL內跑XWayland

我選擇跑WSL內跑Xephyr或XWayland。這樣等同在WSL的Walyand裡面再跑一個X伺服器。

音效部分,因為Windows要單獨跑Pulse Aduio伺服器很麻煩,我們就利用WSLg內建的音訊伺服器來播WSL的音效吧。

那由於WSLg使用Wayland,下面我們將透過環境變數,指定所有Linux程式使用X而非Wayland顯示,即可防止啟動程式的時候跑到WSLg那邊。

3. 安裝桌面環境套件 #

登入WSL Ubuntu,用APT開始安裝套件。

四擇一,你要全裝也可以。裝完套件後先不要急著啟動。

KDE #

Kubuntu的桌面,華麗度不輸GNOME。

套件名稱:kubuntu-desktopplasma-desktop

啟動指令:dbus-run --exit-with-session startplasma-x11

XFCE #

Xubuntu的桌面,很輕量,預設狀態有點醜。

套件名稱:xubuntu-desktopxfce4 xfce4-goodies

啟動指令:dbus-run --exit-with-session startxfce4

LXQT #

Lubuntu的桌面,跟XFCE一樣輕量的桌面。

套件名稱:lubuntu-desktoplxqt

啟動指令:dbus-run --exit-with-session startlxqt

GNOME #

Ubuntu系統的預設桌面。注意GNOME我不確定能開起來,因為會牽扯到systemd的問題。

目前WSL2 1.2.5需要額外裝指令稿,參閱 WSL 2 GNOME Desktop - Github gist

4. 啟動桌面環境 #

  1. 安裝WSL Ubuntu,登入WSL
wsl
  1. 儲存環境變數到~/.profile,告訴程式全數使用X渲染。如果你不這樣做,在X伺服器視窗開的Linux程式可能會跑到視窗外面。
echo "export XDG_SESSION_TYPE=x11" >> ~/.profile
echo "export GDK_PLATFORM=x11" >> ~/.profile
echo "export GDK_BACKEND=x11" >> ~/.profile
echo "export QT_QPA_PLATFORM=xcb" >> ~/.profile
echo "export WAYLAND_DISPLAY=" >> ~/.profile

source ~/.profile
  1. 啟動X伺服器(二擇一),指定解析度為1600x900。啟動後會彈出一個新視窗。
# Xephyr的指令,視窗可縮放
Xephyr -br -ac -noreset -resizeable -screen 1600x900 :1 &

# XWayland的指令,視窗無法縮放 (XWalyand 23.0以上版本才可以使用geometry引數,Ubuntu 22.04得手動編譯新版XWayland)
Xwayland -ac -decorate -geometry 1600x900 -host-grab :1 &
  1. 接著,在終端機啟動桌面環境,例如KDE。我在指令末尾加了&表示在背景執行,這樣我們才可以繼續使用終端機
export DISPLAY=:1
dbus-launch --exit-with-session startplasma-x11 &
  1. 幾秒鐘後X視窗就會看到KDE桌面了

  2. 要關閉桌面環境,登出WSL,將其關機

exit
wsl --shutdown

5. 調整Ubuntu語言與輸入法 #

中文語言可以從KDE介面設定,或者使用以下指令產生:

sudo apt install locales
sudo locale-gen zh_TW.UTF-8
sudo update-locale LANG=zh_TW.UTF-8

輸入法部分,請在Linux端安裝 Fcitx5 + 新酷音。如果開啟桌面環境後Fcitx5沒有跳出來,請點選應用程式列表的「Fcitx5」圖示手動啟動。

按CTRL+SHIFT可在X伺服器的視窗擷取鍵盤組合鍵。

如果要在Linux與Windows之間同步剪貼簿,可以在兩邊系統裝 KDE Connect,配對後剪貼簿就會自動同步了。

6. 一些程式小問題 #

VLC播放影片莫名很卡,改用MPV吧。

MPV播放影片可以加上--vo=x11的引數,強制使用X11。

mpv video.mp4 --vo=x11

Snap版Firefox沒有聲音,建議移除,改裝Mozilla ppa提供的Firefox ESR:

sudo snap remove firefox
sudo add-apt-repository ppa:mozillateam/ppa
sudo apt update
sudo apt install firefox-esr

部分Flatpak程式在X11環境下開不起來,目前找不到辦法解決。

7. 如何將一切回復原狀 #

~/.profile檔案內強制使用X11的5個環境變數註解或移除掉。下次登入WSL,應用程式就會恢復從WSLg開啟的模式了。

參考資料 #

相關文章

Ubuntu 22.04如何連接Apple Airpods Pro藍牙耳機並查看電量
Linux系統 Linux使用技巧 GNOME Ubuntu KDE Plasma
如何編譯與更換WSL核心 (custom WSL kernel)
Linux系統 虛擬機與容器技術 Linux Windows Subsystem for Linux
蝦密?Linux系統竟然有開關機音效
Linux系統 Linux使用技巧 Ubuntu GNOME KDE Plasma

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要登入Github帳號才能留言。支援markdown語法,方便您張貼程式碼,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。無論有無登入皆可留言。此處留言只有本站參與者看得到。若您選擇以訪客身份匿名留言,就不會收到後續回覆通知。