WSL是个非常棒的系统,可以在Windows内核上直接运行Linux镜像,避免了通过虚拟机方式运行Linux。从而高效搞交互解决windows下运行Linux的问题。但是WSL图形交互功能不是很好,这对Windows用户来说这个显得略显生疏。为了解决这个问题,微软今年开源了WSLG系统 (Windows Subsystem for Linux GUI) 的,其目的是Windows上以完全集成的桌面体验运行Linux 桌面应用程序。 本文请和虫虫一起来学习一下WSLG系统。
概述
WSLG支持在Windows环境下需要运行在 Linux自己桌面工具或应用程序的开发人员、科学家或爱好者提供友好的交互和高效体验。
WSLG 致力于让Linux GUI应用程序在Windows上使用起来感觉原生和自然。可以任务栏中、剪切/粘贴,WSLG支持Windows和 Linux桌面应用程序的无缝体验的工作流程。
系统架构
WSLG基于WSL虚拟机,Linux桌面个原生APP通过Xwayland,Pulse音频服务器,继承到Weston系统,再通过FreeRDP,WSLDVC Windows插件(mstsc.exe)和Windows交互,其架构图如下:
用户发行版
用户发行版都在同一个 WSL 虚拟机中针对Linux内核的单个实例运行。PC上的不同用户拥有自己的VM和WSL实例。其Linux 环境是用户级的是无法与其他 Windows用户共享。
系统发行版
WSLG系统发行版整个架构的核心和交互中心,其实质是一个容器化的Linux环境,系统发行版基于 Microsoft CBL-Mariner Linux,一个最小的Linux环境,用于以运行WSLG的各个部分。容器中运行WSLG XServer、Wayland 服务器和Pulse音频服务器。他们之间以及和用户发行版通过Soket进行通讯交互。用户发行版中预设了环境变量 DISPLAY、WAYLAND_DISPLAY 和 PULSE_SERVER用于应用这些组件服务,实现WSLG 开箱即用。
用户可以通过在c:\users\MyUser\.wslconfig中添加以下方法来关闭系统发行版:
- [wsl2]
- guiApplications=false
每个WSL 2用户发行版都与其系统发行版实例配对。系统发行版与其配对的用户发行版部分隔离,在NS/PID/UTS命名空间中运行,但共享其他命名空间,例如 IPC允许跨边界共享内存优化。
系统发行版的每个实例都从其支持的VHD中以只读方式加载。当WSL重新启动时,对系统发行版的内存实例所做的任何修改(例如安装新包或创建新文件)都会被丢弃。
WSLGd
WSLGd是在init之后启动的第一个进程。 WSLGd启动Weston (使用 XWayland)、 PulseAudio 并通过mstsc.exe主机上以静默模式建立RDP连接。 RDP连接将保持活动状态并准备好显示正在启动的新GUI应用程序,没有任何连接建立延迟。 WSLGd以守护进程凡事监听这些进程,避免他们由于错误退出。
Weston
Weston 是Wayland项目的参考合成器,WSL的核心。在WSLG中对其扩展libweston 现有RDP后端,实现远程应用程序。WSLG还在其新增加了多显示器支持、剪切/粘贴、音频输入/输出等功能。
应用程序集成是通过名为RAIL(本地远程应用程序集成)和VAIL(本地集成虚拟化应用程序)的RDP技术实现的。RAIL和VAIL之间的主要区别在于像素如何从RDP服务器传输到 RDP 客户端。在RAIL中,假设服务器和客户端运行在通过网络通信的不同物理系统上,因此需要通过 RDP 传输复制像素。在VAIL中,Server 和Client位于同一个物理系统上,可以跨 Guest/Host VM边界共享内存。
RAIL-Shell
WSLG中还引入了RAIL Shell用于帮助将单个窗口从Linux映射到 Windows,该 shell 非常简单,不涉及任何实际的小部件或shell拥有的像素。
FreeRDP
Weston 利用FreeRDP来实现其后端RDP服务器。FreeRDP用于根据RDP协议规范直线RDP 服务器到RDP客户端(Windows 上的 mstsc)的所有通信进行编码。 它还用于解码从RDP客户端到RDP服务器的所有流量。
Pulse音频插件
对于音频输入(麦克风)和输出(扬声器/耳机),WSLG 运行 Pulse音频服务器。WSLG 使用两个RDP插件的用于接收音频输出和音频输入,插件有效地在 Pulse Server和Weston RDP服务器之间传输音频样本。音频流由Weston RDP服务器合并到RDP传输上,从而有效地在所有场景(桌面/RAIL/VAIL 风格远程处理)中启用Weston RDP后端中的音频输入/输出。
WSLDVCPlugin
WSLG在Weston RDP 服务器和Windows主机上运行的mstsc RDP客户端之间使用自定义虚拟通道。Weston 使用该通道枚举所有Linux GUI应用程序(即具有Gui 类型的桌面文件条目的应用程序)及其启动命令行和图标。 WSLDVCPlugin 处理通过此通道发送的Linux GUI应用程序列表,并在Windows开始菜单中为其创建链接。
安装
先决条件
Windows 10 Insider Preview内部版本 21362+
WSLG 将与即将发布的Windows一起普遍可用。要访问 WSLG 的预览版,需要加入预览体验并从测试版或开发频道运行Windows 10预览版本。
建议在为WSL启用虚拟 GPU (vGPU) 的系统上运行 WSLG,以便可以从硬件加速OpenGL渲染。可以在下面找到合作伙伴提供的支持 WSL的预览驱动程序。
从具有管理员权限的命令提示符运行命令
- wsl --install -d Ubuntu
然后在出现提示时重新启动。
已有WSL安装
对于已经安了WSL的用户,并且想要更新到包含WSLG的最新版本的WSL,可以运行命令
- wsl –update
注意,WSLG仅与WSL 2兼容,并且不适用WSL 1模式下的发行版。可以从通过命令提示符查询当前使用发行版和WSL版本。
- wsl --list -v
如果为WSL 1模式,需要切换到WSL 2:
- wsl --set-version _distro_name_ 2
通过管理员模式命令提示符运行此命令来重新启动WSL,确保首先保存所有挂起的工作:
- wsl -shutdown
更新WSL + WSLG
要更新到为预览发布的最新版本的WSL和WSLG,只需从管理员模式命令提示符或powershell运行
- wsl --update
需要重新启 WSL才能使更改生效,需要重启WSL
- wsl -shutdown
运行桌面应用
如果已经安装了Ubuntu按照这些说明进行 Linux 发行版,会找到一个Ubuntu开始菜单中的图标,启动它。这将启动WSL 2 VM在该VM中启动 Ubuntu WSL发行版,并为提供一个与之交互的终端。
对于 Linux 发行版,可以使用 wsl --list --online命令从提升的命令提示符选择的可用的发行版。
安装和运行 GUI 应用程序
可以通过Linux终端运行以下命令来下载和安装一些流行的应用程序(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
安装这些应用程序后,就可以在开始菜单中的发行版名称下找到它们。例如 Ubuntu -> Microsoft Edge。
终端中启动
也可以使用命令从终端窗口启动这些:
- xcalc, xclock, xeyes
- gimp
- gedit ~/.bashrc
- nautilus
- vlc
- google-chrome
- teams
- microsoft-edge
总结
WSLG作为对微软子系统的图形增强工具,可以实现高效搞交互的Linux桌面应用使用,对不熟悉Linux Shell用户提供友好的橄榄枝,让其可以以更加熟悉的方式进行Linux使用和学习。该项目开源不到半年,其Github仓库(github/microsoft/wslg)就已经收获5.8k的星星,其受欢迎程度可见一斑,希望大家尝试,也可以对其提交PR参与贡献。