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 v1 不需要使用 WSL v2。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 项目(Windows Subsystem for Linux GUI 的缩写)提供。WSLg 支持直接在 Windows 上运行 X11 和 Wayland 应用程序。
在更改 WSL 实例之前,请检查 WSLg 说明。
一旦 Windows 配置正确,WSLg 就可以通过wsl_guipattern
# zypper in -t pattern wsl_gui
安装此模式后,您应该能够直接从 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]
适用于 Arm 的 Windows 上的 WSL
目前仅为 Arm 发布了 openSUSE-Tumbleweed 镜像。不幸的是,从 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
已知问题和限制
- 从适用于 Arm 的 Windows 上的 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 的错误可以在 Bugzilla 中报告
与 openSUSE 无关的 WSL 特定错误必须通过 GitHub 报告给 Microsoft
外部链接
- 常见错误代码
- 关于适用于 Linux 的 Windows 子系统 (WSL)»
- Windows 10 安装指南»
- Windows Server 安装指南»
- 适用于企业的适用于 Linux 的 Windows 子系统 (WSL)»
- 适用于 Linux 的 Windows 子系统 (WSL) 常见问题解答»
- 适用于 Linux 的 Windows 子系统 (WSL) 故障排除»
- 关于 WSL2
- 从 Windows 命令行运行 Linux 工具»
- 从 WSL 运行 Windows 工具»
- 在 Windows 和 WSL 之间共享环境变量»



