启用WSL以包括对Wayland和X服务器相关方案的支持

2021-04-26 16:53:36

WSLG对于Linux GUI的Windows子系统非常短,项目的目的是在完全集成的桌面体验中支持在Windows上运行Linux GUI应用程序(X11和Wayland)。

WSLG为更倾向于或需要在PC上运行Windows的开发人员,科学家或爱好者提供综合体验,但也需要能够在Linux环境中运行最佳或仅适用于最佳的工具或应用程序。虽然用户可以使用多个系统设置完成此目前,但使用专用于Windows和Linux的单个PC,托管Windows或Linux的虚拟机,或在Windows上运行的XServer并投影到WSL中,WSLG提供更集成的,用户友好和富有成效选择。

WSLG努力使Linux GUI应用程序感到含有本地和自然的窗户。从集成到启动菜单中为启动时出现在任务栏中,Alt-Tab体验到在Windows和Linux应用程序中启用剪切/粘贴,可以实现无缝桌面体验和利用Windows和Linux应用程序的工作流程。

WSLG将与即将发布的Windows一起使用。为了访问WSLG的预览,您' ll需要加入Windows Insider程序,并从DEV通道运行Windows 10 Insider预览版本。

它建议在为WSL启用虚拟GPU(VGPU)的系统上运行WSLG,因此您可以从硬件加速OpenGL渲染中受益。您可以在下面的每个合作伙伴中找到支持WSL的预览驱动程序。

从具有管理员权限的命令提示符,运行命令wsl --install -d ubuntu,然后在提示时重启。

重新启动后,安装将继续。您'请将LL要求输入用户名和密码。这些将是您的Linux凭证,他们可以成为您想要的任何东西,并且不必匹配您的Windows凭据。

如果您有没有WSLG的现有WSL安装,并且希望更新到包含WSLG的最新版本的WSL,请从提升的命令提示符运行命令WSL -Update。

请注意,WSLG仅与WSL 2兼容,不适用于配置为在WSL 1模式下工作的WSL分布。验证您的Linux发行版是否配置为在WSL 2模式下运行,如果不切换到WSL 2。如果您在安装WSLG之后,可以继续在WSL 1模式下运行Linux发行版,如果您如此希望,则配置为在WSL 1模式下运行的发行版将无法与WSLG通信,并无法运行GUI应用程序。

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

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

通过从高升命令提示符运行此命令重新启动WSL,请务必先保存任何待处理的工作:

要更新到已释放的最新版本的WSL和WSLG以进行预览,只需从高升命令提示符或PowerShell运行WSL -Update。

您' ll需要重新启动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应用程序,可以从Linux终端运行以下命令下载并安装一些流行的应用程序。如果您使用的是与Ubuntu不同的分发,则它可能使用不同的包管理器。

##更新你的诈骗者中的所有包装更新## geditsudo apt安装gedit -y ## gimpsudo apt安装gimp -y ## nautilussudo apt安装nautilus -y ## vlcsudo apt安装vlc -y ## x11 appssudo apt安装x11 - apps -y ## google chromecd / tmpsudo wget https:// dl.google.com / linux / direct / google -chrome -stable_current_amd64.debsudo dpkg -i google -chrome -stable_current_amd64.deb sudo apt安装--fix -broken - ysudo dpkg -i google -chrome -stable_current_amd64.deb ## Microsoft teamscd / tmpsudo curl -l -o" ./ teams.deb" " https://teams.microsoft.com/downloads/desktopurl?env = production& plat = linux& arch = x64& download = true& linuxarchiveType = deb" sudo apt安装。 /teams.deb -y ## Microsoft Edge Browsersudo Curl https://包.microsoft.com / repos /边缘/池/ main / m / microsoft --dedge -dev / microsoft -edge -dev_91。 0.852。 0 -1_amd64.deb -o / tmp /edge.debsudo apt安装/ tmp /edge.deb -y

一旦安装了这些应用程序,您' ll在发行名称下的开始菜单中找到它们。例如Ubuntu - > 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:\ Users \ MyUser \ .wslconfig)中。这将关闭对WSL中的GUI应用程序的支持。

系统发行版基于Microsoft CBL-Mariner Linux。这是一个最小的Linux环境,足以运行各种WSLG。有关如何构建和部署私有系统的详细信息,请参阅我们的构建说明。

每个WSL 2用户发行版都与其系统发行的系统实例配对。系统发行部分部分地从其与其配对的用户发行,在其上' s自己的ns / pid / uts命名空间,但与其他命名空间(如IPC)共享,以允许跨越边界的共享内存优化。

虽然用户可以将终端获取到系统发行版,但系统发行版并不意味着用户直接使用。系统发行的每个实例都是从IT'支持VHD的Read-only。对系统发行版的内存实例(例如安装新软件包或创建新文件)的任何修改都在重新启动WSL时有效丢弃。我们这样做的原因是为系统发行的系统提供服务模型,其中我们用新的系统替换旧的一个,而无需担心迁移其中包含的任何用户数据。我们使用一个只读映射,使得用户在任何更改时获得众所周知的丢弃行为,每次重新启动WSL时,而不是在服务WSL时令人意外。

虽然Microsoft将WSLG系统发布为只读,但我们确实希望鼓励人们用它和实验进行修补。虽然我们预计很少有人实际需要或想要这样做,但我们在如何在如何构建和部署系统发行版本的贡献页面上共享详细说明。只想在WSL Don&#39中使用GUI应用程序的大多数用户需要担心这些细节。

WSLGD是初始化后第一个启动的过程。 WSLGD推出Weston(带Xwayland),Pulseaudio并通过在静默模式下在主机上启动MSTSC.exe来建立RDP连接。 RDP连接将保持活动状态,并准备显示新的GUI应用程序正在启动时&#39的通知,没有任何连接建立延误。然后,WSLGD监视这些进程,如果它们退出错误(例如由于崩溃的结果),它会自动重新启动它们。

Weston是Wayland项目参考作曲家和WSLG的核心。对于WSLG,我们' VE扩展了Libweston的现有RDP后端,以教授如何远程应用程序而不是监视器/桌面。我们还为它添加了各种功能,例如支持多显示器,剪切/粘贴,音频进出/输出等......

通过RDP技术通过名为Rail(Liment Instockinally)和Vail(本地集成的虚拟应用程序)的RDP技术实现了应用集成。轨道和vail之间的主要区别是像素如何从RDP服务器传输到RDP客户端。在轨道中,假设服务器和客户端正在通过网络通信的不同物理系统上运行,因此需要通过RDP传输复制像素。在Vail中,据了解,服务器和客户端位于相同的物理系统上,并且可以在客户/主机VM边界上共享内存。我们' VE为Libweston RDP后端添加了对轨道和Vail的支持,尽管对于WSLG,只有有效地使用Vail支持。在构建WSLG的同时,我们首先实现了导轨,而是通过并行开发开关到Vail的必要作品。我们决定保留在WSLG之外的其他有趣的场景中重用它的支持,例如用于从运行Linux的PI遥控的应用程序。要在Linux Guest和Windows主机之间共享内存,我们使用Virtio-FS。

Weston是模块化的,今天有各种炮弹,如台式壳,全屏壳(AKA亭)和自动壳。对于WSLG,我们推出了一个名为Rail Shell的新壳。 Rail Shell的目的是帮助将个体窗口从Linux重新发送到Windows,因此shell非常简单,并且不涉及任何实际的小部件或shell拥有的像素。

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

对于音频(麦克风)和OUT(扬声器/耳机)WSLG运行PulseAudio服务器。 WSLG使用Audio Out的水槽插件,以及用于音频的源插件。这些插件有效地在PulsErever和Weston RDP服务器之间传输音频样本。音频流由Weston RDP Server合并到RDP传输,在Weston RDP后端(桌面/ Rail / Vail Style Remoting)中有效地启用威斯顿RDP后端的音频IN / OUT,包括WSLG。

WSLG在Weston RDP服务器和Windows主机上运行的MSTSC RDP客户端之间使用自定义RDP虚拟通道。该频道由WESTON使用,以枚举所有Linux GUI应用程序(即,具有桌面文件条目的桌面文件输入)以及其启动命令行和图标。开源WSLDVCPLUGIN处理在此通道中发送的Linux GUI应用程序列表,并在Windows Start菜单中创建链接。

虽然WSLG适用于或没有虚拟GPU支持,但如果您打算运行闪信或凉亭等图形密集型应用程序,最好在具有GPU和驱动程序的系统上运行,该系统可以支持WSL。我们的VGPU架构以及我们如何使Linux应用程序在WSL中访问GPU的概述,可在我们的DirectX博客中获得。

支持OpenGL加速渲染是可能的,我们的D3D团队与Collabora和Mesa社区在创建D3D12镓司机上完成了我们的工作。

对Linux的支持,包括对WSLG的支持,一直是upstream和mesa 21.0发布的一部分。要利用此加速度,请' ll需要更新用户发行版中安装的MESA版本。它还要求您的发行版供应商选择建立并将新的D3D12镓驱动程序发布到其包存储库。我们与各种WSL Distro Publishers一起工作以通知他们这些更改。

请注意,对于WSLG的第一个版本,VGPU通过系统内存与Weston Compositor遇到。如果在离散GPU上运行,则有效地意味着渲染数据在呈现给WSLG内的编译器之前将从VRAM复制到系统内存,并在Windows侧再次上传到GPU上。因此,与演示率相比,表现罚款比例。在离散GPU上的非常高的帧速率(例如600fps),开销可以高达50%。在较低的帧速率或集成的GPU上,可以根据工作量来实现更接近本机的性能。尽管此V1限制,使用VGPU仍然提供了非常显着的性能和通过软件渲染器的经验改进。

WSLG建立了Linux社区的伟大工作,并利用了大量的开源项目。大多数组件都是从他们上游版本和#39; t需要任何更改在WSLG中点亮。 WSLG核心的某些组件,特别是Weston,FreeRDP和Pulseaudio,必需的变化,以实现丰富的WSLG集成。这些变化areN' t尚未上游。 Microsoft正在与社区一起与每个项目一起分享这些贡献,使得加班时间WSLG可以直接从上游组件构建,而无需任何WSLG特定的修改。

所有这些在线贡献都保存在Microsoft Mirror Repos中。我们将这些镜像持续到最新版本和阶段,我们的WSLG在那些Repos中的变化。作为我们Insider WSLG预览版本的一部分,WSLG从这些镜像Repos中提取并构建代码。这些镜子是公开的,并且每个人都可以访问。好奇的开发人员可以通过在这些镜子中查看代码来窥视我们的早期阶段,并记住,一旦贡献到达上游项目,就可以看出代码的最终版本可能看起来不同,并且基于反馈接收各个项目所有者。我们所有的镜子都遵循相同的型号。有一个主分支对应于我们上次同步点的上游分支。我们不时更新主要分支以从上游项目中选择更新。还有一个工作分支,其中包含所有飞行中的变化。 WSLG使用来自每个镜像项目的工作分支构建。

WSLG维护镜像的项目将随着时间的推移而变化而变化。一旦上游贡献,可能不再需要维护镜像,此时它将被移除,并且WSLG将开始直接利用上游版本的组件。随着我们在WSLG中亮起新功能,可以将新镜像引入到新组件的阶段贡献。因此,期望镜像列表更改加班。

在此时,我们有以下项目镜子目前的飞行贡献。

以下是当前在这些镜子内包含的每个项目的飞行中贡献的高级概览。

WSLG利用Weston作为Wayland Compositor,使用RDP技术弥合Linux和Windows Worlds以远程应用程序内容。 Weston已经有了RDP后端,但它仅限于单监视器桌面遥感。我们大大增强了RDP后端包括高级功能,例如多显示器支持,复制/粘贴的剪贴板集成,以及音频IN / OUT。 We'已启用名为Rail(本地远程应用程序)和Vail(本地虚拟应用程序)的vail(本地虚拟应用程序)的新的远程处理模式,其中单独的应用程序而不是桌面/显示器。这些变化并不特定于WSLG;它们为现有的RDP后端添加功能并在其他方案中可重用(即,使用新的Weston RDP后端到Raspberry PI上运行的远程应用程序运行RDP客户端的其他设备)。

为了实现WSLG的丰富集成,我们还向WSLG的RDP后端添加了一个小插件。在Weston中,该插件负责将用户发送到用户发行并搜索已安装的应用程序(AKA桌面文件)。插件发送Windows主机与其启动命令和图标一起找到的所有应用程序的列表。在Windows主机上,WSLG项目的开源MSTSC插件部分使用该信息将这些Linux应用程序的快捷方式创建到Windows Start菜单。

我们还修复了影响各种应用的几个错误。通常,这些是影响所有模式的韦斯顿的问题,并且没有特定于WSLG。

Weston目前使用FreeRDP为其RDP后端。 WSLG继续利用FreerDP,我们已为新的RDP协议/通道添加支持,以启用Vail优化方案以及支持WSLG插件。我们还修复了遇到MSTSC的各种漏洞或导致不稳定。

对于PulseAudio,我们的贡献集中在汇聚器和源插件上,即在Pulseaudio和Weston RDP后端之间洗牌音频数据,使得音频数据可以通过RDP连接集成回主机。在添加这些新插件之外的Pulseaudio的核心没有变化。

如果您想修补或贡献WSLG,请查看我们的贡献页面以获取详细信息,包括如何构建和运行私人版本的WSLG。

对于非安全相关问题,例如报告错误或向新功能提出建议,请使用此项目' s问题跟踪器。 要报告WSLG或任何其他Microsoft产品的安全问题,请按照详细说明。 该项目可能包含项目,产品或服务的商标或标识。 授权使用Microsoft商标或徽标须遵守,并必须遵循Microsoft' s商标& 品牌指南。 在修改后的版本中使用Microsoft商标或徽标不得导致混淆或意味着Microsoft赞助。 使用第三方商标或徽标的任何使用都会受到第三方和#39的策略。