WSLG微軟開源的Windows子系統(tǒng)GUI增強(qiáng)
WSL是個非常棒的系統(tǒng),可以在Windows內(nèi)核上直接運(yùn)行Linux鏡像,避免了通過虛擬機(jī)方式運(yùn)行Linux。從而高效搞交互解決windows下運(yùn)行Linux的問題。但是WSL圖形交互功能不是很好,這對Windows用戶來說這個顯得略顯生疏。為了解決這個問題,微軟今年開源了WSLG系統(tǒng) (Windows Subsystem for Linux GUI) 的,其目的是Windows上以完全集成的桌面體驗運(yùn)行Linux 桌面應(yīng)用程序。 本文請和蟲蟲一起來學(xué)習(xí)一下WSLG系統(tǒng)。

概述
WSLG支持在Windows環(huán)境下需要運(yùn)行在 Linux自己桌面工具或應(yīng)用程序的開發(fā)人員、科學(xué)家或愛好者提供友好的交互和高效體驗。
WSLG 致力于讓Linux GUI應(yīng)用程序在Windows上使用起來感覺原生和自然??梢匀蝿?wù)欄中、剪切/粘貼,WSLG支持Windows和 Linux桌面應(yīng)用程序的無縫體驗的工作流程。
系統(tǒng)架構(gòu)
WSLG基于WSL虛擬機(jī),Linux桌面?zhèn)€原生APP通過Xwayland,Pulse音頻服務(wù)器,繼承到Weston系統(tǒng),再通過FreeRDP,WSLDVC Windows插件(mstsc.exe)和Windows交互,其架構(gòu)圖如下:

用戶發(fā)行版
用戶發(fā)行版都在同一個 WSL 虛擬機(jī)中針對Linux內(nèi)核的單個實例運(yùn)行。PC上的不同用戶擁有自己的VM和WSL實例。其Linux 環(huán)境是用戶級的是無法與其他 Windows用戶共享。
系統(tǒng)發(fā)行版
WSLG系統(tǒng)發(fā)行版整個架構(gòu)的核心和交互中心,其實質(zhì)是一個容器化的Linux環(huán)境,系統(tǒng)發(fā)行版基于 Microsoft CBL-Mariner Linux,一個最小的Linux環(huán)境,用于以運(yùn)行WSLG的各個部分。容器中運(yùn)行WSLG XServer、Wayland 服務(wù)器和Pulse音頻服務(wù)器。他們之間以及和用戶發(fā)行版通過Soket進(jìn)行通訊交互。用戶發(fā)行版中預(yù)設(shè)了環(huán)境變量 DISPLAY、WAYLAND_DISPLAY 和 PULSE_SERVER用于應(yīng)用這些組件服務(wù),實現(xiàn)WSLG 開箱即用。
用戶可以通過在c:\users\MyUser\.wslconfig中添加以下方法來關(guān)閉系統(tǒng)發(fā)行版:
- [wsl2]
- guiApplications=false
每個WSL 2用戶發(fā)行版都與其系統(tǒng)發(fā)行版實例配對。系統(tǒng)發(fā)行版與其配對的用戶發(fā)行版部分隔離,在NS/PID/UTS命名空間中運(yùn)行,但共享其他命名空間,例如 IPC允許跨邊界共享內(nèi)存優(yōu)化。
系統(tǒng)發(fā)行版的每個實例都從其支持的VHD中以只讀方式加載。當(dāng)WSL重新啟動時,對系統(tǒng)發(fā)行版的內(nèi)存實例所做的任何修改(例如安裝新包或創(chuàng)建新文件)都會被丟棄。
WSLGd
WSLGd是在init之后啟動的第一個進(jìn)程。 WSLGd啟動Weston (使用 XWayland)、 PulseAudio 并通過mstsc.exe主機(jī)上以靜默模式建立RDP連接。 RDP連接將保持活動狀態(tài)并準(zhǔn)備好顯示正在啟動的新GUI應(yīng)用程序,沒有任何連接建立延遲。 WSLGd以守護(hù)進(jìn)程凡事監(jiān)聽這些進(jìn)程,避免他們由于錯誤退出。
Weston
Weston 是Wayland項目的參考合成器,WSL的核心。在WSLG中對其擴(kuò)展libweston 現(xiàn)有RDP后端,實現(xiàn)遠(yuǎn)程應(yīng)用程序。WSLG還在其新增加了多顯示器支持、剪切/粘貼、音頻輸入/輸出等功能。
應(yīng)用程序集成是通過名為RAIL(本地遠(yuǎn)程應(yīng)用程序集成)和VAIL(本地集成虛擬化應(yīng)用程序)的RDP技術(shù)實現(xiàn)的。RAIL和VAIL之間的主要區(qū)別在于像素如何從RDP服務(wù)器傳輸?shù)?RDP 客戶端。在RAIL中,假設(shè)服務(wù)器和客戶端運(yùn)行在通過網(wǎng)絡(luò)通信的不同物理系統(tǒng)上,因此需要通過 RDP 傳輸復(fù)制像素。在VAIL中,Server 和Client位于同一個物理系統(tǒng)上,可以跨 Guest/Host VM邊界共享內(nèi)存。
RAIL-Shell
WSLG中還引入了RAIL Shell用于幫助將單個窗口從Linux映射到 Windows,該 shell 非常簡單,不涉及任何實際的小部件或shell擁有的像素。
FreeRDP
Weston 利用FreeRDP來實現(xiàn)其后端RDP服務(wù)器。FreeRDP用于根據(jù)RDP協(xié)議規(guī)范直線RDP 服務(wù)器到RDP客戶端(Windows 上的 mstsc)的所有通信進(jìn)行編碼。 它還用于解碼從RDP客戶端到RDP服務(wù)器的所有流量。
Pulse音頻插件
對于音頻輸入(麥克風(fēng))和輸出(揚(yáng)聲器/耳機(jī)),WSLG 運(yùn)行 Pulse音頻服務(wù)器。WSLG 使用兩個RDP插件的用于接收音頻輸出和音頻輸入,插件有效地在 Pulse Server和Weston RDP服務(wù)器之間傳輸音頻樣本。音頻流由Weston RDP服務(wù)器合并到RDP傳輸上,從而有效地在所有場景(桌面/RAIL/VAIL 風(fēng)格遠(yuǎn)程處理)中啟用Weston RDP后端中的音頻輸入/輸出。
WSLDVCPlugin
WSLG在Weston RDP 服務(wù)器和Windows主機(jī)上運(yùn)行的mstsc RDP客戶端之間使用自定義虛擬通道。Weston 使用該通道枚舉所有Linux GUI應(yīng)用程序(即具有Gui 類型的桌面文件條目的應(yīng)用程序)及其啟動命令行和圖標(biāo)。 WSLDVCPlugin 處理通過此通道發(fā)送的Linux GUI應(yīng)用程序列表,并在Windows開始菜單中為其創(chuàng)建鏈接。
安裝
先決條件
Windows 10 Insider Preview內(nèi)部版本 21362+
WSLG 將與即將發(fā)布的Windows一起普遍可用。要訪問 WSLG 的預(yù)覽版,需要加入預(yù)覽體驗并從測試版或開發(fā)頻道運(yùn)行Windows 10預(yù)覽版本。
建議在為WSL啟用虛擬 GPU (vGPU) 的系統(tǒng)上運(yùn)行 WSLG,以便可以從硬件加速OpenGL渲染。可以在下面找到合作伙伴提供的支持 WSL的預(yù)覽驅(qū)動程序。
從具有管理員權(quán)限的命令提示符運(yùn)行命令
- wsl --install -d Ubuntu
然后在出現(xiàn)提示時重新啟動。
已有WSL安裝
對于已經(jīng)安了WSL的用戶,并且想要更新到包含WSLG的最新版本的WSL,可以運(yùn)行命令
- wsl –update
注意,WSLG僅與WSL 2兼容,并且不適用WSL 1模式下的發(fā)行版??梢詮耐ㄟ^命令提示符查詢當(dāng)前使用發(fā)行版和WSL版本。
- wsl --list -v
如果為WSL 1模式,需要切換到WSL 2:
- wsl --set-version _distro_name_ 2
通過管理員模式命令提示符運(yùn)行此命令來重新啟動WSL,確保首先保存所有掛起的工作:
- wsl -shutdown
更新WSL + WSLG
要更新到為預(yù)覽發(fā)布的最新版本的WSL和WSLG,只需從管理員模式命令提示符或powershell運(yùn)行
- wsl --update
需要重新啟 WSL才能使更改生效,需要重啟WSL
- wsl -shutdown
運(yùn)行桌面應(yīng)用
如果已經(jīng)安裝了Ubuntu按照這些說明進(jìn)行 Linux 發(fā)行版,會找到一個Ubuntu開始菜單中的圖標(biāo),啟動它。這將啟動WSL 2 VM在該VM中啟動 Ubuntu WSL發(fā)行版,并為提供一個與之交互的終端。
對于 Linux 發(fā)行版,可以使用 wsl --list --online命令從提升的命令提示符選擇的可用的發(fā)行版。
安裝和運(yùn)行 GUI 應(yīng)用程序
可以通過Linux終端運(yùn)行以下命令來下載和安裝一些流行的應(yīng)用程序(Ubuntu為例)。
更新可用包列表
- ## Update list of available packages
- sudo apt update
- ## Gedit
- sudo apt install gedit -y
- ## GIMP
- sudo apt install gimp -y
- ## Nautilus
- sudo apt install nautilus -y
- ## VLC
- sudo apt install vlc -y
- ## X11 apps
- sudo apt install x11-apps -y
- ## Google Chrome
- cd /tmp
- sudo wget google/linux/direct/google-chrome-stable_current_amd64.deb
- sudo dpkg -i google-chrome-stable_current_amd64.deb
- sudo apt install --fix-broken -y
- sudo dpkg -i google-chrome-stable_current_amd64.deb
- ## Microsoft Teams
- cd /tmp
- sudo curl -L -o "./teams.deb" " teams.microsoft.com/downloads/desktopurl?env=production&plat=linux&arch=x64&download=true&linuxArchiveType=deb"
- sudo apt install ./teams.deb -y
- ## Microsoft Edge Browser
- sudo curl packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-dev/microsoft-edge-dev_93.0.946.1-1_amd64.deb -o /tmp/edge.deb
- sudo apt install /tmp/edge.deb –y
安裝這些應(yīng)用程序后,就可以在開始菜單中的發(fā)行版名稱下找到它們。例如 Ubuntu -> Microsoft Edge。
終端中啟動
也可以使用命令從終端窗口啟動這些:
- xcalc, xclock, xeyes
- gimp
- gedit ~/.bashrc
- nautilus
- vlc
- google-chrome
- teams
- microsoft-edge
總結(jié)
WSLG作為對微軟子系統(tǒng)的圖形增強(qiáng)工具,可以實現(xiàn)高效搞交互的Linux桌面應(yīng)用使用,對不熟悉Linux Shell用戶提供友好的橄欖枝,讓其可以以更加熟悉的方式進(jìn)行Linux使用和學(xué)習(xí)。該項目開源不到半年,其Github倉庫(github/microsoft/wslg)就已經(jīng)收獲5.8k的星星,其受歡迎程度可見一斑,希望大家嘗試,也可以對其提交PR參與貢獻(xiàn)。