openSUSE:WSL
openSUSE for WSL
适用于 Linux 的 Windows 子系统或 WSL 是 Microsoft Windows 上的一个特殊接口,它允许在 Windows 内核之上运行 Linux 用户空间程序。在某种意义上,它类似于 chroot 或容器在 Linux 上的工作方式。WSL 可用于 Windows 10 和 11,以及 Windows Server 2019(版本 1709 及更高版本 [1])及更高版本。Windows 10 和 11 之间没有功能对等性,Microsoft 更关注最新版本。
Microsoft 商店中提供了可供安装的 openSUSE Tumbleweed 和 Leap WSL 镜像。
在 Windows 10 上启用 WSL
WSL 在 Windows 10 上默认未启用。它需要显式安装才能使 WSL 应用程序正常工作。注意:使用 wsl v2 不需要 wsl v1。v2 使用 Hyper-V 并具有更多功能,但 v1 在磁盘密集型场景中表现稍好。就我个人而言 (Scott B.),我完全使用 v2(从 https://github.com/microsoft/wsl/releases 安装),而没有安装 v1。
有两种方法可以启用 WSL
命令行
以管理员身份打开命令提示符 (cmd.exe) 并运行以下命令
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
控制面板
- 打开控制面板(开始 > Windows 系统 > 控制面板)。
- 如果您看到八到十个项目:单击“查看方式:”下拉框并选择“小图标”。
- 打开“程序和功能”。
- 单击“启用或关闭 Windows 功能”超链接。
- 在“Windows 功能”窗口中,勾选“适用于 Linux 的 Windows 子系统”。列表按字母顺序排列,因此它应该出现在底部附近。
- 单击“确定”按钮关闭“Windows 功能”窗口。
- 关闭控制面板。
- 重新启动计算机(必需)。
启用 WSL2
要启用 WSL2,您需要使用 Windows 10 版本 2004,内部版本 19041 或更高版本。
以管理员身份打开 PowerShell 并运行以下命令
wsl --set-default-version 2
您可能会看到以下警告
WSL 2 requires an update to its kernel component. For information please visit https://aka.ms/wsl2kernel
如果是这样,请按照链接下载并安装 WSL2 内核包。安装后再次运行上述命令
现有实例可以通过运行以下命令升级到 WSL 2,例如openSUSE-Tumbleweed:
wsl --set-version openSUSE-Tumbleweed 2
启用 systemd
Systemd 支持通过wsl_systemd模式提供,并且默认情况下未在 openSUSE WSL 镜像中安装。
要安装 systemd,您需要通过 zypper 安装wsl_systemd模式。通过wsl.conf的替代方法将在下面介绍。
# zypper in -t pattern wsl_systemd
实例可以通过 PowerShell 中的wsl.exe工具重新启动。
PS C:\Windows\System32\WindowsPowerShell\v1.0> wsl -l -v NAME STATE VERSION * openSUSE-Tumbleweed Running 2 PS C:\Windows\System32\WindowsPowerShell\v1.0> wsl -t openSUSE-Tumbleweed PS C:\Windows\System32\WindowsPowerShell\v1.0> wsl -d openSUSE-Tumbleweed
分步指南
以下指南将在 openSUSE Tumbleweed WSL 实例上安装 systemd。这些命令也应该适用于任何其他 SUSE/openSUSE WSL 实例。
首先,检查 systemd 是否已启用。如果是,您应该看到运行中代替离线在以下命令中
tumbleweed:/home/geeko # systemctl is-system-running offline
然后通过 zypper 安装提供的 systemd 模式
tumbleweed:/home/geeko # zypper in -t pattern wsl_systemd Loading repository data... Reading installed packages... Resolving package dependencies... The following NEW package is going to be installed: patterns-wsl-systemd The following NEW pattern is going to be installed: wsl_systemd 1 new package to install. Overall download size: 13.1 KiB. Already cached: 0 B. After the operation, additional 57.0 B will be used. Continue? [y/n/v/...? shows all options] (y):
然后重新启动 WSL 实例。您可以在单独的 PowerShell 中使用wsl.exe工具来完成此操作。我们首先列出所有实例,然后终止openSUSE-Tumbleweed实例,然后重新启动它。
PS C:\Windows\System32\WindowsPowerShell\v1.0> wsl -l -v NAME STATE VERSION * openSUSE-Tumbleweed Running 2 PS C:\Windows\System32\WindowsPowerShell\v1.0> wsl -t openSUSE-Tumbleweed The operation completed successfully. PS C:\Windows\System32\WindowsPowerShell\v1.0> wsl -l -v NAME STATE VERSION * openSUSE-Tumbleweed Stopped 2 PS C:\Windows\System32\WindowsPowerShell\v1.0> wsl -d openSUSE-Tumbleweed
最后一个命令将立即在 WSL 实例中生成一个 shell。我们可以使用此 shell 来检查 systemd 是否正常运行
geeko@tumbleweed:/mnt/c/Windows/System32/WindowsPowerShell/v1.0> sudo systemctl is-system-running [sudo] password for root: running
在这里您可以看到,systemd 现在正在您的 openSUSE Tumbleweed WSL 实例中运行。
wsl.conf
另一种方法是相应地配置 WSL 实例的/etc/wsl.conf文件
[boot] systemd=true
重新启动后,实例应该有 systemd。
.wslconfig
在 Windows 中,用户可以在 `%UserProfile%\.wslconfig` 处添加一个文件,以实现“多种功能”[1],其中之一与 cgroups 相关
[wsl2] kernelCommandLine=cgroup_no_v1=all
这对于 systemd (v256) 行为以及 docker/podman 功能特别有帮助。
[1]:更多详情请访问:https://learn.microsoft.com/en-us/windows/wsl/wsl-config
启用 GUI 支持 (WSLg)
GUI 支持由 WSLg 项目提供(WSLg 是 Windows Subsystem for Linux GUI 的缩写)。WSLg 支持直接在 Windows 上运行 X11 和 Wayland 应用程序。
在更改 WSL 实例之前,请查看 WSLg 说明。
一旦 Windows 配置正确,WSLg 就可以通过wsl_guipattern
# zypper in -t pattern wsl_gui
在 SUSE/openSUSE WSL 实例中安装此模式后,您应该能够直接从 WSL 实例运行任何 GUI 应用程序,例如glxgears来自Mesa-demopackage.spec
未启用 WSLg 的系统通常会抱怨“DISPLAY”变量未设置。
在 WSL 上安装 openSUSE
从应用商店
获取 openSUSE for WSL 的最简单方法是从应用商店安装应用程序
应用商店还提供 SUSE Linux Enterprise 版本
- SUSE Linux Enterprise 15 SP5(提供 SLES 和/或 SLED)
- SUSE Linux Enterprise 15 SP6(提供 SLES 和/或 SLED)
在首次启动时,用户可以选择将其 SLE 安装注册为 SLES(企业服务器)或 SLED(企业桌面),以满足其许可需求。
从 openSUSE 下载服务器使用 Appx
您可以从 openSUSE 下载服务器获取 appx 文件
- openSUSE Tumbleweed aarch64:访问 https://download.opensuse.org/ports/aarch64/tumbleweed/appliances/,使用 appx 筛选并下载 appx 文件
- openSUSE Tumbleweed x86_64:访问 https://download.opensuse.org/tumbleweed/appliances/,使用 appx 筛选并下载 appx 文件
现在,如果尚未安装 openSUSE 证书,您需要安装它
- 右键单击 appx 文件,选择属性、数字签名,选择签名,单击详细信息、查看证书和安装证书。这将显示证书导入向导。
- 单击单选按钮选择本地计算机,然后单击下一步
- 选择将所有证书放入以下存储,然后单击下一步
- 单击浏览并选择受信任的人,然后单击确定、下一步,最后单击完成
- 应该会出现确认对话框,单击确定
从 tar 归档手动安装
另外,也可以手动安装开发版本
- 注意:从 wsl v2.4.4 开始,`.tar.xz` 文件(可以重命名为 `.wsl` 并双击安装)是 Tier 1 安装方法。
这些版本可在以下位置获取
通过:wsl.exe --install ...
默认为“ModernDistributions” - 链接 - 如果您想使用来自商店的 .appx,请包含 --legacy
wsl --install --distribution openSUSE-Tumbleweed [--legacy]
通过:wsl.exe --install ... --web-download
默认为“ModernDistributions” - 链接 - 如果您想使用来自“Distributions”的 .appx,请包含 --legacy。
wsl --install --distribution openSUSE-Tumbleweed --web-download [--legacy]
Windows for Arm 上的 WSL
目前只有 openSUSE-Tumbleweed 镜像发布用于 Arm。不幸的是,从 Windows 商店安装将默认为 x86_64 的 WSL 镜像。
用户仍然可以使用 --web-download 选项来获取 Arm 镜像。
wsl --install openSUSE-Tumbleweed --web-download --legacy
Windows 11 和 WSL
- Windows 11 上的安装类似于 Windows 10,但整体体验应该“更好”。访问 https://github.com/Microsoft/WSL 获取更新版本的 WSL,其中包括 systemd 支持等功能。
- 注意:Microsoft 已转向提供单独的 arm64 / x64 .msi 文件进行安装/更新
通过提升的 PowerShell 提示符安装
Add-AppxPackage C:\path\to\Microsoft.WSL_<version>.msixbundle
- 例如,在 WSL 发行版上添加/编辑 /etc/wsl.conf 将使 systemd 能够正常运行
[boot] systemd=true
已知问题和限制
- 从 Windows for Arm 上的 Windows 商店获取的 WSL 镜像为 x86_64 镜像。请参阅解决方法。
- 应用程序将根文件系统 tarball 解压到 Windows C: 驱动器中 WSL 特定位置。请确保有足够的空间。由于 WSL 的限制,其他驱动器将无法工作!
- 由于根文件系统在安装后与应用程序断开连接,因此应用程序的任何潜在更新实际上都不会更新根文件系统内容。WSL 上安装的 openSUSE 系统必须像往常一样在内部更新,维护更新使用 zypper patch,更新和升级使用 zypper up 或 zypper dup。
- WSL 中的系统实际上不会启动,也不使用 systemd。一个专有的 Microsoft /init 二进制文件会初始化系统。因此,服务管理不像在虚拟机中那样工作。它更像是一个交互式容器。
- 如果尝试启动 WSL 时显示以下错误消息
Error: WSL 2 requires an update to its kernel component. For information please visit https://aka.ms/wsl2kernel
请安装 wsl2 内核更新
- 对于 aarch64 (arm64):https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_arm64.msi
- 对于 x86_64 (x64):https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
报告错误
openSUSE on WSL 的 Bug 可以在 Bugzilla 报告
与 openSUSE 无关的 WSL 特定 Bug 必须通过 GitHub 报告给 Microsoft
外部链接
- 常见错误代码
- 关于适用于 Linux 的 Windows 子系统 (WSL)»
- Windows 10 安装指南»
- Windows Server 安装指南»
- 适用于企业的 Windows 子系统 (WSL)»
- 关于适用于 Linux 的 Windows 子系统 (WSL) 的常见问题»
- 适用于 Linux 的 Windows 子系统 (WSL) 疑难解答»
- 关于 WSL2
- 从 Windows 命令行运行 Linux 工具»
- 从 WSL 运行 Windows 工具»
- 在 Windows 和 WSL 之间共享环境变量»



