当前位置: 首页 > 科技观察

WSLG微软的开源Windows子系统GUI增强

时间:2023-03-21 12:38:53 科技观察

WSL是一个很棒的系统,可以直接在Windows内核上运行Linux镜像,避免了通过虚拟机运行Linux。从而高效地搞交互式解决windows下运行linux的问题。但是WSL的图形交互功能不是很好,对于Windows用户来说显得有些生疏。为了解决这个问题,微软今年开源了WSLG系统(WindowsSubsystemforLinuxGUI),目的是在Windows上运行Linux桌面应用程序,具有完全集成的桌面体验。这篇文章,请与虫虫一起了解WSLG系统。概述WSLG支持需要在Windows环境下在Linux上运行自己的桌面工具或应用程序的开发人员、科学家或爱好者,提供友好的交互和高效的体验。WSLG努力使LinuxGUI应用程序在Windows上使用起来感觉自然。在任务栏、剪切/粘贴中可用,WSLG支持Windows和Linux桌面应用程序以实现无缝体验工作流程。系统架构WSLG是基于WSL虚拟机,通过Xwayland和Pulseaudioserver将Linux桌面上的一个原生APP继承到Weston系统,再通过FreeRDP和WSLDVCWindows插件(mstsc.exe)与Windows交互.架构图如下:UserReleaseUser这些发行版都针对同一个WSL虚拟机中的Linux内核的单个实例运行。PC上的不同用户有自己的VM和WSL实例。它的Linux环境是用户级的,不能与其他Windows用户共享。系统分发WSLG系统分发整个架构的核心和交互中心,本质上是一个容器化的Linux环境。系统分发基于MicrosoftCBL-MarinerLinux,这是一个用于运行WSLG各个部分的最小Linux环境。该容器运行WSLGXServer、Wayland服务器和Pulse音频服务器。它们通过套接字相互通信并与用户分布通信。环境变量DISPLAY、WAYLAND_DISPLAY和PULSE_SERVER已在用户分发中预设,以应用这些组件服务来开箱即用地实施WSLG。用户可以通过将以下方法添加到c:\users\MyUser\.wslconfig来关闭系统分发:[wsl2]guiApplications=false每个WSL2用户分发都与其系统分发实例配对。系统分布与其成对的用户分布部分隔离,在NS/PID/UTS命名空间中运行,但共享其他命名空间,例如IPC以允许跨边界共享内存优化。系统分发的每个实例都从其支持VHD以只读方式加载。当WSL重新启动时,对系统分发的内存中实例所做的任何修改(例如安装新包或创建新文件)都将被丢弃。WSLGdWSLGd是init之后启动的第一个进程。WSLGd启动Weston(使用XWayland)、PulseAudio,并通过主机上的mstsc.exe在静默模式下建立RDP连接。RDP连接将保持活动状态并准备好显示正在启动的新GUI应用程序,没有任何连接建立延迟。WSLGd守护这些进程并防止它们因错误而退出。WestonWeston是Wayland项目的参考合成器,是WSL的核心。在WSLG中扩展libweston现有的RDP后端以实现远程应用程序。WSLG还为其新增了多显示器支持、剪切/粘贴、音频输入/输出等功能。应用程序集成是通过称为RAIL(远程应用程序本地集成)和VAIL(虚拟化应用程序本地集成)的RDP技术实现的。RAIL和VAIL之间的主要区别在于像素如何从RDP服务器传输到RDP客户端。在RAIL中,假定服务器和客户端运行在通过网络通信的不同物理系统上,因此需要通过RDP传输复制像素。在VAIL中,Server和Client位于同一个物理系统上,可以跨Guest/HostVM边界共享内存。RAIL-ShellWSLG还引入了RAILShell来帮助将单个窗口从Linux映射到Windows,该shell非常简单,不涉及shell拥有的任何实际小部件或像素。FreeRDPWeston利用FreeRDP作为其后端RDP服务器。FreeRDP用于根据RDP协议规范对从直接RDP服务器到RDP客户端(Windows上的mstsc)的所有通信进行编码。它还用于解码从RDP客户端到RDP服务器的所有流量。Pulse音频插件对于音频输入(麦克风)和输出(扬声器/耳机),WSLG运行Pulse音频服务器。WSLG使用两个RDP插件来接收音频输出和音频输入,这些插件有效地在PulseServer和WestonRDP服务器之间传输音频样本。WestonRDP服务器将音频流合并到RDP传输上,从而在所有场景(桌面/RAIL/VAIL样式远程处理)中有效地启用WestonRDP后端中的音频输入/输出。WSLDVCPluginWSLG在WestonRDP服务器和Windows主机上运行的mstscRDP客户端之间使用自定义虚拟通道。Weston使用此通道枚举所有LinuxGUI应用程序(即具有Gui类型桌面文件条目的应用程序)及其启动命令行和图标。WSLDVCPlugin处理通过此通道发送的LinuxGUI应用程序列表,并在Windows开始菜单中为它们创建一个链接。安装先决条件Windows10InsiderPreviewbuild21362+WSLG将在即将发布的Windows版本中普遍可用。要访问WSLG的预览版,您需要加入预览体验并从测试版或开发频道运行Windows10预览版。建议在为WSL启用虚拟GPU(vGPU)的系统上运行WSLG,以便可以从硬件加速OpenGL渲染。可以在下面找到来自合作伙伴的支持WSL的预览驱动程序。使用管理员权限从命令提示符运行命令wsl--install-dUbuntu并在出现提示时重新启动。现有的WSL安装对于已经安装了WSL并希望更新到包含WSLG的最新版本WSL的用户,他们可以运行命令wsl–update注意WSLG仅与WSL2兼容,不适用于WSL1中的发行版模式。您可以从命令提示符查询当前发行版和WSL版本。wsl--list-v如果处于WSL1模式,则需要切换到WSL2:wsl--set-version_distro_name_2从管理员模式命令提示符运行此命令以重新启动WSL,确保首先保存所有待处理的作业:wsl-shutdownUpdateWSL+WSLG要更新到最新版本的WSL和WSLG发布预览,只需从管理员模式命令提示符或powershell运行wsl--update需要重新启动WSL才能使更改生效,需要重新启动WSL运行wsl-shutdown桌面应用程序如果您安装了Ubuntu,请按照Linux发行版的这些说明进行操作,您将在Ubuntu开始菜单中找到一个图标,启动它。这将启动WSL2VM,在该VM中启动UbuntuWSL发行版,并为您提供一个终端进行交互。对于Linux发行版,可以使用wsl--list--online命令从提升的命令提示符中选择可用的发行版。安装和运行GUI应用程序您可以通过Linux终端运行以下命令来下载和安装一些流行的应用程序(以Ubuntu为例)。更新可用包列表##Updatelistofavailablepackagessudoaptupdate##Geditsudoaptinstallgedit-y##GIMPsudoaptinstallgimp-y##Nautilussudoaptinstallnautilus-y##VLCsudoaptinstallvlc-y##X11appssudoaptinstallx11-apps-y##GoogleChromecd/tmpsudowgettablegoogle/lin_amdirect4.debsudodpkg-igoogle-chrome-stable_current_amd64.debsudoaptinstall--fix-broken-ysudodpkg-igoogle-chrome-stable_current_amd64.deb##MicrosoftTeamscd/tmpsudocurl-L-o"./teams.deb""teams.microsoft.com/downloads/desktopurl?env=production&plat=linux&arch=x64&download=true&linuxArchiveType=deb"sudoaptinstall./teams.deb-y##MicrosoftEdgeBrowserssudocurlpackages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-dev/microsoft-edge-dev_93.0.946.1-1_amd64.deb-o/tmp/edge.debsudoaptinstall/tmp/edge.deb–y安装这些应用程序后,可以在开始菜单的发行版名称下找到它们。例如Ubuntu->MicrosoftEdge。你也可以使用命令从终端窗口启动这些:xcalc,xclock,xeyesgimpgedit~/.bashrcnautilusvlcgoogle-chrometeamsmicrosoft-edge不熟悉LinuxShell的朋友抛出友好的橄榄枝,让他们以更熟悉的方式使用和学习Linux。项目开源不到半年,其Github仓库(github/microsoft/wslg)已经获得5.8kstar,可见其人气。我希望你能尝试一下,你也可以提交一个PR来贡献它。