WSLG是Linux GUI的Windows子系统的缩写,该项目的目的是在完全集成的桌面体验中支持Windows在Windows上运行Linux GUI应用程序(X11和Wayland)的支持。
WSLG为开发人员,科学家或爱好者提供了一种集成的体验,这些体验更喜欢或需要在其PC上运行Windows,但还需要能够运行在Linux环境中运行最佳或专门工作的工具或应用程序。虽然用户今天可以使用多个系统设置来完成此操作,但单个PC专用于Windows和Linux,托管Windows或Linux的虚拟机,或在Windows上运行并投影到WSL上的XServer,WSLG提供了一个更加集成,用户友好和富有成效的,选择。
WSLG致力于使Linux GUI应用在窗户上使用本地和自然。从集成到开始菜单的启动到出现在任务栏中,alt-tab体验都可以在Windows和Linux应用程序中进行剪切/粘贴,WSLG启用了无缝的桌面体验以及Windows和Linux应用程序的工作流程。
Windows 11和Windows 10都支持WSLG。Windows 10用户必须通过访问Windows更新并安装所有可用更新,确保其Windows 10安装完全最新。
WSLG可以作为Windows 11 WSL收件箱支持的一部分以及通过Microsoft Store的Linux的Windows子系统提供的一部分。强烈建议使用Microsoft Store版本的WSL,该版本支持Windows 10和Windows 11,并包含WSL和WSLG的最新版本。
确保将您的图形驱动程序更新为GPU制造商网站可用的最新驱动程序,以便在WSL环境中受益于GPU加速。
从具有管理员特权的命令提示符中,运行命令wsl --install -d Ubuntu
,然后重新启动(如果提示)。
重新启动后,安装将继续。您将被要求输入用户名和密码。这些将是您的Linux凭据,它们可以是您想要的任何东西,而不必匹配您的Windows凭据。
瞧! WSL和WSLG已安装并准备好使用!
如果您没有WSLG的现有WSL安装,并且想更新到包括WSLG在内的最新版本的WSL,请从高架命令提示符中运行命令wsl --update
。
请注意,WSLG仅与WSL 2兼容,并且对在WSL 1模式下工作的WSL分布不起作用。验证您的Linux发行版是否配置为在WSL 2模式下运行,如果不切换到WSL 2。虽然您可以在安装WSLG之后继续在WSL 1模式下运行Linux Diveslo,但如果您愿意,则可以在WSL 1模式下配置以在WSL 1模式下运行。将无法与WSLG通信,也无法运行GUI应用程序。
您可以列出当前安装的发行版,以及它们配置的WSL版本,用于使用高架命令提示符中的以下命令。
wsl -- list - v
如果在版本1模式下运行,请切换到版本2。这可能需要一段时间。
wsl -- set-version _distro_name_ 2
通过从高架命令提示符运行此命令,重新启动WSL,请确保首先保存所有待处理的工作:
wsl -- shutdown
要更新到最新版本的WSL和WSLG发布的预览,只需从高架命令提示符或PowerShell运行wsl --update
更新即可。
您需要重新启动WSL才能生效。您可以通过从高架命令提示符中运行wsl --shutdown
来重新启动WSL。如果WSL当前正在运行,它将关闭,请确保首先保存任何正在进行的工作!下次您启动WSL应用程序或终端时,WSL将自动重新启动。
如果您根据以下说明安装了Ubuntu
Linux发行版,则在开始菜单中找到一个Ubuntu
图标,请启动它。这将启动WSL 2 VM,在该VM中启动Ubuntu WSL发行版,并为您提供与之互动的终端。瞧!您正在Windows上运行Linux!
如果您想探索为WSL构建的其他Linux发行版,则可以使用高架命令提示符中的wsl --list --online
命令来列举系统的可用发行版列表。您可以在WSL中安装多个Linux发行版,它们会愉快地并存,因此不要害怕尝试并尝试一下。
恭喜您完成了,准备使用GUI应用程序!
如果您想开始使用一些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 https: // dl.google.com / 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 " " https://teams.microsoft.com/downloads/desktopurl?env=production&plat=linux&arch=x64&download=true&linuxArchiveType=deb "
sudo apt install . / teams.deb - y
# # Microsoft Edge Dev Browser
sudo curl https: // packages.microsoft.com / repos / edge / pool / main / m / microsoft - edge - dev / microsoft - edge - dev_118. 0.2060 . 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
用户发行版本质上是您用于Linux工作的WSL分发。您可以使用高架Windows命令提示符中的命令wsl --list --online
列出系统上可用的WSL分布。您可以并排运行多个用户发行版,他们将和平并存,因此不要害怕尝试新的发行版。每个用户发行版将与系统发行版的唯一实例配对,但是您仍然可以通过在不同的用户发行中的GUI应用程序进行互动,例如它们之间的剪切/粘贴。各种用户空间的基础容器化应该对您不可见。
特定Windows用户的所有用户和系统发行版都在同一WSL虚拟机中运行,以与Linux内核的单个实例一起运行。 PC上的不同Windows用户具有自己的VM和WSL实例。您的Linux环境可以始终是您自己的,并且不会与同一PC上的其他Windows用户共享。
系统发行版是所有魔术发生的地方。系统发行版是一个容器化的Linux环境,WSLG XServer,Wayland Server和Pulse Audio Server正在运行。这些服务器中的每个服务器的通信插座都被投影到用户发行版中,以便客户端应用程序可以连接到它们。我们预先配置了用户发行式环境变量显示,wayland_display和pulse_server默认将这些服务器引用这些服务器,因此WSLG从开箱即用。
想要使用与WSLG提供的服务器不同的服务器可以更改这些环境变量。用户还可以选择通过在其.wslconfig
文件中添加以下条目(位于c:usersMyUser.wslconfig
)来完全关闭系统发行版。这将关闭WSL中GUI应用程序的支持。
[wsl2]
guiApplications=false
系统发行版基于Microsoft CBL-Mariner Linux。这是一个最小的Linux环境,足以运行各种WSLG。有关如何构建和部署私人系统发行版的详细信息,请参阅我们的构建说明。
每个WSL 2用户发行版都与自己的系统发行版配对。系统发行版以与用户发行的ns/pid/uts名称空间相比,部分与用户发行版进行了部分隔离,但共享其他名称空间(例如IPC),以允许在整个边界上进行共享内存优化。
虽然用户可以将终端输入系统发行版,但系统发行版本并非用户直接使用。系统发行版的每个实例都是从其备份VHD中读取的。当WSL重新启动时,有效地丢弃了针对系统发行版的内存实例(例如安装新软件包或创建新文件)的任何修改。我们这样做的原因是为系统发行版启用一个维修模型,在该模型中,我们将旧的模型替换为新旧模型,而不必担心迁移其中包含的任何用户数据。我们使用仅阅读映射,使用户在任何更改上都会获得众所周知的丢弃行为,每次重新启动WSL时,就不会在维修WSL时会感到惊讶。
尽管Microsoft以仅阅读的方式发布了WSLG系统发行版,但我们确实希望鼓励人们修改它和实验。尽管我们希望很少有人真正需要或想要这样做,但是我们在贡献页面上分享了有关如何构建和部署系统发行版的私人版本的详细说明。大多数只想在WSL中使用GUI应用程序的用户不必担心这些细节。
WSLGD是初始化后启动的第一个过程。 WSLGD启动了Weston (与Xwayland), Pulseaudio ,并通过在静音模式下在主机上启动MSTSC.EXE来建立RDP连接。 RDP连接将保持活动状态,并准备显示新的GUI应用程序正在暂时发行,而无需任何连接延迟。然后, WSLGD会监视这些过程,如果它们通过错误退出(例如崩溃),则会自动重新启动它们。
韦斯顿(Weston)是Wayland Project Reference Compositor,也是WSLG的心脏。对于WSLG,我们扩展了Libweston现有的RDP后端,以教给它如何远程应用程序而不是监视/桌面。我们还为其添加了各种功能,例如对多监测器,剪切/粘贴,音频入口的支持,等等...
应用程序集成是通过称为Rail(本地远程应用程序)和VAIL(本地集成的虚拟化应用程序)来实现的。铁路和Vail之间的主要区别是如何从RDP服务器向RDP客户端运输像素。在铁路中,假定服务器和客户端正在通过网络通信的不同物理系统运行,因此需要在RDP传输上复制像素。在Vail中,可以理解,服务器和客户端在同一物理系统上,并且可以在访客/主机VM边界上共享内存。我们已经在Libweston RDP后端增加了对铁路和Vail的支持,尽管对于WSLG,只有Vail支持才能有效使用。在构建WSLG时,我们首先实施了轨道,同时可以并联开发向Vail开关的必要部件。我们决定保留该支持,因为它可以在WSLG之外的其他有趣场景中重复使用,例如,用于从运行Linux的PI远程应用程序。为了在Linux Guest和Windows主机之间共享内存,我们使用Virtio-fs。
韦斯顿(Weston)是模块化的,如今有各种外壳,例如桌面外壳,全屏外壳(又称售货亭)和自动壳。对于WSLG,我们引入了一个名为Rail Shell的新外壳。轨道外壳的目的是帮助将单个窗户从Linux到Windows远程远程,因此外壳非常简单,并且不涉及任何实际的小部件或外壳拥有的像素。
Weston利用FreerDP实施其后端RDP服务器。 FREERDP用于编码从RDP服务器(韦斯顿)到RDP客户端(Windows上的MSTSC)的所有通信,根据RDP协议规范。它还用于将RDP客户端的所有流量解码为RDP服务器。
对于(麦克风)和out(扬声器/耳机)WSLG的音频,运行pulseaudio服务器。 WSLG使用一个接收器插件进行音频,以及用于音频的源插件。这些插件有效地将音频样本传输到PulsEserver和Weston RDP服务器之间。音频流由Weston RDP服务器合并到RDP传输上,有效地在所有方案(包括WSLG)(包括WSLG)的所有方案(桌面/Rail/Vail Style eroting)中有效地启用了Weston RDP后端的音频。
WSLG利用Weston RDP服务器和在Windows主机上运行的MSTSC RDP客户端之间的自定义RDP虚拟通道。 Weston使用此通道来枚举所有Linux GUI应用程序(即具有GUI类型的桌面文件条目)以及其启动命令行和图标。开源WSLDVCPLUGIN处理通过此频道发送的Linux GUI应用程序列表,并在Windows Start菜单中为其创建链接。
虽然WSLG在有或没有虚拟GPU支持的情况下使用,但如果您打算运行图形密集型应用程序(例如Blender或Gazebo),则最好在具有GPU和可以支持WSL的GPU和驱动程序的系统上运行。我们的VGPU体系结构的概述以及Linux应用程序如何使WSL中的GPU访问GPU成为可能。
通过我们的D3D团队与Collabora和Mesa社区创建D3D12炮驱动器所做的工作,可以使OpenGL加速渲染的支持成为可能。
对Linux的支持,包括对WSLG的支持,一直是Mesa 21.0版本的上游和一部分。为了利用此加速度,您需要更新用户发行版中安装的台面版本。它还要求您的发行版供应商选择将新的D3D12炮驱动器构建并发布到其包装存储库中。我们正在与各种WSL发行商合作,以告知他们这些更改。
请注意,对于WSLG的首次发布,VGPU通过系统内存与Weston Compositor交流。如果在离散的GPU上运行,则有效地意味着在将WSLG中的Compositor提交给Compositor之前,将渲染的数据从VRAM复制到系统内存,并再次上传到Windows侧的GPU。结果,绩效处罚与表现率成正比。在离散GPU上的600fps等帧速率下,开销的高度可能高达50%。在较低的帧速率或集成的GPU上,可以根据工作量来实现更接近本地的性能。尽管使用了V1限制,但使用VGPU仍然提供了使用软件渲染器的非常重要的性能和经验改进。
WSLG建立在Linux社区的出色工作基础上,并利用大量开源项目。大多数组件都是从上游版本中使用的,并且不需要任何更改才能在WSLG中点亮。 WSLG中心的某些组件,尤其是Weston,FreerDP和Pulseaudio,需要更改以实现丰富的WSLG集成。这些变化尚未上游。 Microsoft正在与社区合作,将这些贡献与每个项目分享,以便随着时间的推移,可以直接从上游组件构建WSLG,而无需任何WSLG特定的修改。
所有这些机上贡献都保留在Microsoft Mirror Repos中。我们将这些镜子保持在上游版本的最新状态,并在这些存储库中进行WSLG的变化。 WSLG作为内部人士WSLG预览版本的一部分,从这些镜像存储库中拉出并构建代码。这些镜子是公开的,每个人都可以使用。奇怪的开发人员可以通过查看这些镜子中的代码在我们的贡献的早期阶段进行窥视,请记住,一旦贡献达到上游项目,代码的最终版本可能会有所不同,并根据反馈收到的适用各种项目所有者。我们所有的镜子都遵循相同的型号。有一个主分支,对应于我们上一个同步点的上游分支。我们会不时更新主要分支,以从上游项目中选择更新。还有一个工作分支,其中包含我们所有飞行的变化。 WSLG是使用每个镜像项目的工作分支建造的。
WSLG维护镜子的项目随着飞行的贡献的发展而随着时间的流逝而变化。一旦某些贡献在上游,可能不再需要维护镜子,此时将被删除,WSLG将开始直接利用组件的上游版本。当我们在WSLG中点亮新功能时,可能会引入新的镜子以对新组件的阶段贡献。因此,期望镜子列表会更改加班。
在此时间点,我们为当前机上贡献提供了以下项目镜子。
项目 | 上游回购 | WSLG镜子 |
---|---|---|
韦斯顿 | https://github.com/wayland-project/weston | https://github.com/microsoft/weston-mirror |
freerdp | https://github.com/freerdp/freerdp | https://github.com/microsoft/freerdp-mirror |
脉冲 | https://github.com/pulseaudio/pulseaudio | https://github.com/microsoft/pulseaudio-mirror |
以下是对这些镜子中包含的每个项目的当前机上贡献的高级概述。
WSLG利用Weston作为Wayland Compositor使用RDP技术桥接Linux和Windows Worlds,以远程应用程序内容。韦斯顿已经有了RDP后端,但仅限于单人监测到远程。我们已经大大提高了RDP后端,包括高级功能,例如多监视器支持,用于复制/粘贴的剪贴板集成以及In/Out In/Out。我们启用了称为Rail(本地集成的远程应用程序)和Vail(本地集成的虚拟应用程序)的新的远程模式,在此,远离单个应用程序而不是台式机/监视器。这些变化不是WSLG的特定。它们为现有的RDP后端增加了功能,并且在其他方案中也可以重复使用(即使用新的Weston RDP后端到Raspberry Pi上运行的远程应用程序到运行RDP客户端的另一个设备)。
为了启用WSLG中丰富的集成,我们还为WSLG的RDP后端添加了一个小插件。在韦斯顿,该插件负责连接到用户发行版并搜索已安装的应用程序(又称桌面文件)。该插件向Windows主机发送了所有应用程序及其启动命令和图标的列表。在Windows主机上,WSLG项目的开源MSTSC插件部分使用该信息为Windows Start菜单创建这些Linux应用程序的快捷方式。
我们还修复了影响各种应用程序的几个错误。通常,这些问题在所有模式下都影响了韦斯顿,并且并非特定于WSLG。
Weston目前使用FreerDP进行RDP后端。 WSLG继续利用FreerDP,我们为新的RDP协议/渠道提供了支持,以启用Vail优化的方案以及对WSLG插件的支持。我们还修复了影响与MSTSC交易的各种错误或导致不稳定性。
对于Pulseaudio,我们的贡献集中在水槽和源插件上,该插件将pulseaudio和Weston RDP后端之间的音频数据调整,以便可以将音频数据集成到RDP连接到主机上。在添加这些新插件之外,Pulseaudio的核心没有变化。
如果您想修改或为WSLG贡献或贡献WSLG,请参阅我们的贡献页面以获取详细信息,包括如何构建和运行私人版本的WSLG版本。
对于非安全性相关的问题,例如报告错误或为新功能提出建议,请使用此项目的问题跟踪器。
要报告WSLG或任何其他Microsoft产品的安全问题,请按照此处详细介绍的说明。
该项目可能包含用于项目,产品或服务的商标或徽标。 Microsoft商标或徽标的授权使用受到了Microsoft的商标和品牌准则的约束。在此项目的修改版本中使用Microsoft商标或徽标不得引起混乱或暗示Microsoft赞助。任何使用第三方商标或徽标都遵守这些第三方政策。