WSLg是什么?如何安装使用WSLg

Windows 11 Pro ISO文件在哪下载最新版?如何下载原装纯净版Win11 ?点击进入   持续更新!

WSLg是Windows Subsystem for Linux GUI的缩写,该项目的目的是在完全集成的桌面体验中支持在Windows上运行Linux GUI应用程序(X11和Wayland)。

WSLg为喜欢或需要在PC上运行Windows但又需要能够在Linux环境中运行最佳或唯一的工具或应用程序的开发人员,科学家或发烧友提供集成的体验。尽管用户现在可以使用多种系统设置来完成此任务,包括专用于Windows和Linux的个人PC,托管Windows或Linux的虚拟机或运行在Windows上并投影到WSL的XServer,WSLg提供了更加集成,用户友好和高效的功能选择。

WSLg致力于使Linux GUI应用程序在Windows上自然而自然地使用。从集成到要启动的“开始”菜单到出现在任务栏中,alt-tab体验到在Windows和Linux应用程序之间启用剪切/粘贴,WSLg都可以利用Windows和Linux应用程序提供无缝的桌面体验和工作流。

WSLg_IntegratedDesktop

安装WSLg

先决条件

安装说明(新安装-之前没有安装WSL)

在具有管理员权限的命令提示符下,运行命令wsl --install -d Ubuntu,然后在出现提示时重新引导。

重新启动后,安装将继续。系统将要求您输入用户名和密码。这些将是您的Linux凭据,它们可以是您想要的任何内容,而不必与Windows凭据匹配。

瞧!WSL和WSLg已安装并准备使用!

安装说明(现有的WSL安装)

如果您有不带WSLg的现有WSL安装,并且想更新到包括WSLg的WSL的最新版本,请wsl --update从提升的命令提示符下运行命令。

请注意,WSLg仅与WSL 2兼容,并且不适用于配置为在WSL 1模式下工作的WSL分发。验证是否已将Linux发行版配置为以WSL 2模式运行,如果未切换到WSL2。虽然您可以根据需要在安装WSLg之后继续以WSL 1模式运行Linux发行版,但将发行版配置为以WSL 1模式运行将无法与WSLg通信,也将无法运行GUI应用程序。

您可以从提升的命令提示符下列出以下命令,以列出当前安装的发行版以及它们配置的WSL版本。

 wsl --list -v

如果以版本1模式运行,请切换到版本2。这可能需要一段时间。

wsl --set-version _distro_name_ 2

通过从提升权限的命令提示符运行此命令来重新启动WSL,请确保首先保存所有待处理的工作:

    wsl --shutdown

更新WSL + WSLg

要将WSL和WSLg更新到最新版本以进行预览,只需wsl --update从提升的命令提示符或Powershell运行。

您需要重新启动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应用

如果要开始使用某些GUI应用程序,则可以从Linux终端运行以下命令来下载并安装一些流行的应用程序。如果您使用与Ubuntu不同的发行版,则可能使用了不同的软件包管理器。

## Update all packages in your distro
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 Browser
sudo curl https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-dev/microsoft-edge-dev_91.0.852.0-1_amd64.deb -o /tmp/edge.deb
sudo apt install /tmp/edge.deb -y

安装这些应用程序后,您将在发行版名称下的“开始”菜单中找到它们。举个例子Ubuntu -> Microsoft Edge。您也可以使用以下命令从终端窗口启动这些命令:

  • xcalcxclockxeyes
  • gimp
  • gedit ~/.bashrc
  • nautilus
  • vlc
  • google-chrome
  • teams
  • microsoft-edge

WSLg体系结构概述

WSLg_ArchitectureOverview-1

用户发行

用户发行版实质上是您用于Linux工作的WSL发行版。您可以wsl --list --online从提升的Windows命令提示符下使用该命令来列出系统上可用的WSL发行版。您可以并行运行多个用户发行版,它们将和平共处,因此不必担心尝试新发行版。每个用户发行版都将与系统发行版的唯一实例配对,但是您仍然可以跨不同用户发行版中运行的跨GUI应用程序进行无缝交互,例如它们之间的剪切/粘贴。各种用户空间的基础容器化应该对您不可见。

特定Windows用户的所有用户和系统发行版都在同一WSL虚拟机中针对Linux内核的单个实例运行。PC上的不同Windows用户具有自己的VM和WSL实例。确保您的Linux环境始终是您自己的,并且不会与同一PC上的其他Windows用户共享。

WSLg系统发行版

系统发行版是发生所有魔术的地方。系统发行版是一个容器化的Linux环境,其中正在运行WSLg XServer,Wayland服务器和Pulse Audio服务器。这些服务器中每一个的通信套接字都投影到用户发行版中,以便客户端应用程序可以连接到它们。我们预先配置了用户发行版环境变量DISPLAY,WAYLAND_DISPLAY和PULSE_SERVER来默认引用这些服务器,因此WSLg开箱即用。

希望使用与WSLg提供的服务器不同的服务器的用户可以更改这些环境变量。用户还可以通过在.wslconfig文件中添加以下条目(位于c:\users\MyUser\.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

WSLGdinit之后启动的第一个过程。WSLGd通过以静默方式在主机上启动mstsc.exe来启动Weston(与Xwayland),PulseAudio并建立RDP连接。RDP连接将保持活动状态,并随时显示新的GUI应用程序正在启动,而没有任何连接建立延迟。WSLGd然后监视这些进程,如果它们因错误退出(例如由于崩溃而退出),它将自动重新启动它们。

韦斯顿

Weston是Wayland项目参考合成器,也是WSLg的核心。对于WSLg,我们扩展了libweston的现有RDP后端,以教会它​​如何远程应用程序而不是监视器/桌面。我们还为其添加了各种功能,例如支持多显示器,剪切/粘贴,音频输入/输出等。

通过称为RAIL(本地集成远程应用程序)和VAIL(本地集成虚拟化应用程序)的RDP技术实现应用程序集成。RAIL和VAIL之间的主要区别在于,如何将像素从RDP服务器传输到RDP客户端。在RAIL中,假定服务器和客户端运行在通过网络进行通信的不同物理系统上,因此需要通过RDP传输复制像素。在VAIL中,可以理解,服务器和客户端位于同一物理系统上,并且可以跨越来宾/主机VM边界共享内存。我们为libweston RDP后端增加了对RAIL和VAIL的支持,尽管对于WSLg仅有效地使用了VAIL支持。在构建WSLg时,我们首先实施了RAIL,同时并行开发了一些必要的组件,这些组件使得能够切换到VAIL。我们决定保留该支持,因为它可以在WSLg之外的其他有趣场景中重用,例如,从运行Linux的Pi远程处理应用程序。要在Linux guest虚拟机和Windows主机之间共享内存,我们使用virtio-fs。

轨道壳

Weston是模块化的,并且具有各种外壳,例如台式机外壳,全屏外壳(又名信息亭)和自动化外壳。对于WSLg,我们引入了一个称为RAIL Shell的新Shell。RAIL Shell的目的是帮助将单个窗口从Linux迁移到Windows,因为这样的Shell非常简单,并且不涉及任何实际的小部件或Shell拥有的像素。

FreeRDP

Weston利用FreeRDP来实现其后端RDP服务器。FreeRDP用于根据RDP协议规范对从RDP服务器(在Weston中)到RDP客户端(在Windows上为mstsc)进行的所有通信进行编码。它还用于解码从RDP客户端到RDP服务器的所有流量。

脉冲音频插件

对于音频输入(麦克风)和音频输出(扬声器/耳机),WSLg运行PulseAudio服务器。WSLg使用接收器插件进行音频输出,并使用源插件进行音频输入。这些插件有效地在PulseServer和Weston RDP Server之间传输音频样本。音频流由Weston RDP服务器合并到RDP传输上,从而有效地在包括WSLg在内的所有场景(台式机/ RAIL / VAIL样式远程处理)中在Weston RDP后端中启用音频输入/输出。

WSL动态虚拟通道插件(WSLDVCPlugin)

WSLg利用Weston RDP服务器和Windows主机上运行的mstsc RDP客户端之间的自定义RDP虚拟通道。Weston使用此通道来枚举所有Linux GUI应用程序(即,桌面文件条目为gui类型的应用程序)及其启动命令行和图标。开源WSLDVCPlugin处理通过该通道发送的Linux GUI应用程序列表,并在Windows开始菜单中为其创建链接。

OpenGL在WSLg中加速渲染

尽管WSLg可以支持或不支持虚拟GPU,但如果您要运行图形密集型应用程序(例如Blender或Gazebo),则最好在具有GPU和可支持WSL的驱动程序的系统上运行。DirectX博客提供了有关vGPU架构以及如何使Linux应用程序访问WSL中的GPU的概述。

通过我们的D3D团队与Collabora和Mesa社区在创建d3d12 Gallium驱动程序方面的工作,可以支持OpenGL加速渲染。

对Linux的支持(包括对WSLg的支持)已经成为Mesa 21.0发行版的上游和一部分。要利用这种加速,您需要更新用户发行版中安装的Mesa版本。它还需要您的发行版供应商选择构建新的d3d12 Gallium驱动程序并将其发布到其软件包存储库中。我们正在与各种WSL发行商合作,以将这些更改通知他们。

请注意,对于WSLg的第一个版本,vGPU通过系统内存与Weston合成器互操作。如果在离散GPU上运行,这实际上意味着已渲染的数据从VRAM复制到系统内存,然后再呈现给WSLg中的合成器,并再次在Windows端上传到GPU。结果,存在与展示率成比例的性能损失。在非常高的帧速率下(例如在离散GPU上为600fps),该开销可能高达50%。在较低的帧速率下或在集成的GPU上,取决于工作负载,可以实现更接近本机的性能。尽管存在v1的限制,但使用vGPU仍比使用软件渲染器提供了非常显着的性能和体验改进。

WSLg代码流

WSLg建立在Linux社区的出色工作的基础上,并利用了大量的开源项目。大多数组件从其上游版本按原样使用,不需要任何更改即可在WSLg中亮起。WSLg核心的某些组件,特别是Weston,FreeRDP和PulseAudio,需要进行更改才能实现丰富的WSLg集成。这些变化还不是上游。Microsoft正在与社区合作,与每个项目共享这些贡献,以便可以直接从上游组件构建加班的WSLg,而无需进行任何WSLg特定的修改。

所有这些运行中的贡献都保存在Microsoft镜像存储库中。我们将这些镜像与上游发行版保持同步,并在这些存储库中发布我们的WSLg更改。WSLg从这些镜像存储库中提取并构建代码,这是我们的Insider WSLg Preview版本的一部分。这些镜像是公共的,每个人都可以使用。好奇的开发人员可以通过查看那些镜像中的代码来窥视我们贡献的早期阶段,请记住,一旦贡献到达上游项目并根据接收到的反馈进行修改,最终版本的代码看起来可能会有所不同。各个项目的所有者。我们所有的镜子都遵循相同的模型。在我们的最后一个同步点,有一个分支对应于上游分支。我们更新主要时不时地进行分支以从上游项目中选择更新。还有一个工作分支,其中包含我们所有的运行中更改。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
下载最新版Windows 11 Pro ISO文件:点击进入   持续更新原装纯净版Win11 

原创文章,作者:校长,如若转载,请注明出处:https://www.yundongfang.com/Yun46767.html

(0)
打赏 微信扫一扫不于多少! 微信扫一扫不于多少! 支付宝扫一扫礼轻情意重 支付宝扫一扫礼轻情意重
上一篇 2021年4月22日 上午8:24
下一篇 2021年4月23日 上午1:27

相关推荐