在 Build 2020 上,微软介绍了将 Linux GUI 应用程序引入 Windows 子系统的计划。Windows 10 Insider Preview Build 21364 终于带来了此功能的第一个预览版本。此项目被命名为 WSLg ,下面我们来了解一下,你可以使用此功能做什么,如何安装它,以及它的工作原理。
WSL 是什么?
Windows Subsystem for Linux(简称WSL)是一个在Windows 10上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。WSL 2 是体系结构的一种新版本,它支持适用于 Linux 的 Windows 子系统在 Windows 上运行 ELF64 Linux 二进制文件。
WSLg 什么是?
WSLg 是 Linux 的 Windows 子系统对 Wayland 和 X server 相关场景支持的简称。
WSLg 为开发人员、科学家或爱好者提供集成体验,他们需要在 PC 上运行 Windows,但也需要在 Linux 环境中运行一些工具或应用程序。虽然今天可以通过安装多系统或虚拟机满足此要求,但 WSLg 提供了一个更友好、更高效的替代方案。
WSLg 使 Linux GUI 应用程序在 Windows 上的使用体验更加接近原生,更加自然。从 集成到开始菜单 到 任务栏中显示,从 alt-tab 体验 到实现 Windows 和 Linux 应用程序上无缝复制/粘贴,WSLg 实现了 Windows 和 Linux 应用程序的无缝桌面体验和工作流程。
全新安装 WSL2 和 WSLg
WSL2 仅适用于 Windows 10 版本 18917 或更高版本,WSLg 仅适用于 Windows 10 版本 21362 或更高版本
打开 控制面板-程序-程序和功能-启用或关闭Windows功能
勾选 适用于Linux的Windows子系统 和 虚拟机平台
也可以使用命令,通过在 PowerShell 中通过管理员权限运行以下命令来执行此操作
wsl --install
接下来确定,重启,打开微软商店搜索WSL,选择你喜欢的发行版本安装即可。
使用命令来安装你喜欢的发行版本
你可以使用此命令来查看当前 WSL 可用的发行版本
wsl --list --online
接下来使用管理员权限执行此命令来安装你喜欢的发行版本。
wsl --install -d <Distro>
将 Distro 替换为你的发行版的实际名称,例如:
wsl --install -d Ubuntu
启用 WSL2
WSL1 是 WSL 默认的体系结构,如果要使 WSL2 成为你的默认体系结构,可以通过此命令执行该操作
wsl --set-default-version 2
执行此命令之后,所有安装的发行版本都会以 WSL2 的方式运行
如果只想将某个以安装的发行版本转换为 WSL 可以使用此命令
wsl --set-version <Distro> 2
并且确保将 Distro 替换为你的发行版的实际名称。 (可使用以下命令找到这些内容:wsl -l)。 可以随时更改回 WSL 1,方法是运行与上面相同的命令,但将“2”替换为“1”。
最后使用管理员权限运行此命令重新启动 WSL
wsl --shutdown
到此 WSL 和 WSLg 就已经安装成功并且可用了。
已经安装了 WSL2 如何启用 WSLg
如果你已经安装了一个没有 WSLg 版本的 WSL,可以使用管理员权限运行此命令来更新 WSL
wsl --update
请注意,WSLg 仅与 WSL2 兼容
你可以使用此命令来查看 WSL 的体系结构。
wsl -l -v
如果你使用的发行版本以 WSL1 模式运行,请使用此命令切换到 WSL2,具体见上方 启用 WSL2 部分
wsl --set-version <Distro> 2
最后使用管理员权限运行此命令重新启动 WSL
wsl --shutdown
到此 WSLg 就已经安装成功并且可用了。
安装并运行 GUI 应用
现在,你可以在 WSL 中运行以下命令来安装一些流行的 Linux GUI 应用程序。如果您使用的发行版本并不是 Ubuntu,则包管理器有可能不同。
## Update all packages in your distro
sudo apt update
## Gedit
sudo apt install gedit -y
## GIMP
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
安装完成后,你可以在开始菜单中找到它们。
下面是微软的一些示例
在 WSL 中运行 gedit 和 gvim 来编辑 Linux 文件。
在 WSL 中运行 TestCafe Studio 并通过在 Linux 中安装的 Microsoft Edge 浏览器进行一些 Web 测试。
构建、测试和使用支持音频或麦克风功能的 Linux 应用程序。
使用 GPU 加速 3D 图形的支持来运行 Linux 应用程序。
WSLg 如何工作
从上面的示例中可以看出,我们不需要手动启动 X server,WSLg 将自动启动所需的一切,包括 Wayland、X Server、PulseAudio,以及 Linux GUI 应用程序与 Windows 通信所需的一切。使用完 GUI 应用程序并终止 WSL 后,系统也会自动结束其会话。
和 WSL 管道的其余部分一样,WSLg 其实也是一个运行在 WSL 中的子系统,为了使 WSLg 可以有无缝的使用体验,这个子系统对用户是不可见的,使用 wsl -l -v
命令并不可以看到这个发行版本,WSLg 采用了微软的 CBL Mariner 发行版本,CBL Mariner 是一个内部 Linux 发行版本,被用于微软的云基础设施、边缘产品和服务,下图展示了 WSLg 的体系结构。
如果想要更深入的了解 WSLg 的技术细节,可以查看微软的这篇博客《WSLg Architecture》,或访问 WSLg 的 Github 仓库。
关闭 WSL 对 GUI 应用程序的支持
用户可以通过创建此条目 C:\Users\MyUser.wslconfig 来关闭 WSL 对 GUI 应用程序的支持。
[wsl2]
guiApplications=false