跳转至内容

在 WSL 上安装 Arch Linux

来自 ArchWiki
(重定向自 WSL)

Arch Linux 作为 archlinux-wsl 项目的一部分,提供了一个官方的 WSL (Windows Subsystem for Linux) 镜像。

这些镜像每月构建和发布,旨在提供最简单但完整的系统,以便在 WSL 中获得纯粹的 Arch Linux 体验。

注意 需要 WSL 2。不支持 WSL 1。本指南假定已安装最新稳定版本。

安装

安装 WSL

在 UEFI 设置中启用虚拟化,然后从 Microsoft Store 中安装 Windows Subsystem for Linux

注意 Microsoft Store 版本的 WSL 现已成为 WSL 的默认版本。您不应启用“Windows Subsystem for Linux”可选组件,也不应安装 WSL 内核或 WSLg MSI 包,因为它们已不再需要。使用 Microsoft Store 版本的 WSL 允许您比以往更快地获取 WSL 更新,这与它作为 Windows 组件时的情况相比。 WSLg 也已捆绑。

更新 WSL

要更新到最新稳定版本的 WSL 和 WSLg,请在提升权限的 Windows 命令提示符 shell 中运行以下命令:

> wsl --update

要更新到最新的预发布版本,请运行:

> wsl --update --pre-release

在 WSL 中安装 Arch Linux

从已安装了 WSL 2 的 Windows 系统中,使用以下任一安装方法。

自动化安装

在 Windows shell 中运行以下命令:

> wsl --install archlinux

然后,您可以通过开始菜单中的 archlinux 应用程序,或在 Windows shell 中运行 wsl -d archlinux 来运行 WSL 中的 Arch Linux。

手动安装

下载最新的 Arch Linux .wsl 镜像,然后双击它来开始安装,或在 Windows shell 中运行以下命令:

> wsl --install --from-file WSL_image

例如:

> wsl --install --from-file C:\Users\Username\Downloads\archlinux-2025.04.01.121271.wsl
提示 这将以默认发行版名称 archlinux 安装 WSL 镜像。如果您想以其他名称导入它,请添加选项 --name distro_name

然后,您可以通过开始菜单中的 archlinux 应用程序,或在 Windows shell 中运行 wsl -d archlinux 来运行 WSL 中的 Arch Linux。

技巧与提示

设置默认用户

要设置一个不同于 root 的默认用户,请先确保用户已创建,然后将以下内容追加到 /etc/wsl.conf 文件中:

[user]
default=username

在关闭会话之前,请确保为您的 root 用户设置了密码。如果您发现自己“被锁定”,请调用:

> wsl -u root

在 Windows 主机的 CMD 窗口中执行。

更改将在下一个会话中生效。要终止当前会话,请在 Windows shell 中运行以下命令:

> wsl --terminate archlinux

如果您使用的是 WSL 2.4.10 或更高版本,您可以使用以下命令为您的发行版设置默认用户:

> wsl --manage archlinux --set-default-user username

下次启动发行版时,此更改将生效。

在 WSL 主机浏览器中打开 URL

为了在您的 Windows 主机浏览器中打开链接,请安装 xdg-utils 包。这对于诸如 pkgctl repo web 等各种命令以及各种云提供商 CLI 工具(例如 az login)的身份验证流程至关重要。

使用 WSLg 运行图形应用程序

WSLg (Windows Subsystem for Linux GUI) 是一个旨在实现 在 WSL 中运行具有音频 (PulseAudio) 和图形 (X11 和 Wayland) 支持的 Linux 应用程序的项目。

WSLg 默认启用。您可以通过在 WSL 配置文件中将 wsl2.guiApplications 设置为 false 来禁用它。

硬件加速渲染

要在 WSL 中启用 GPU 视频加速渲染,请安装以下软件包:

  • mesa - 包含用于 OpenGL 的 d3d12 Gallium 驱动程序。
  • vulkan-dzn - 包含实验性的 dzn(也称为 microsoft-experimental)Vulkan 驱动程序。

您还需要安装 vulkan-icd-loader(如果您还想运行 32 位应用程序,则还需要 lib32-vulkan-icd-loader)。

~/.bashrc
export GALLIUM_DRIVER=d3d12
export LIBVA_DRIVER_NAME=d3d12

如果 OpenGL 在 Intel GPU 上回退到 llvmpipe 软件渲染器,则需要为 libedit 创建一个符号链接。

# ln -s /usr/lib/libedit.so /usr/lib/libedit.so.2

有关更多信息,请参阅 https://github.com/microsoft/wslg/issues/996Gentoo:Gentoo in WSL#OpenGL 回退到 Intel GPU 上的 llvmpipe 软件渲染器

WSL 互操作性

WSL 在 Windows 和 WSL 之间提供互操作性。这允许您在 WSL 中运行 Windows 二进制文件。

它默认启用。您可以通过在 /etc/wsl.conf 文件中将 interop.enabled 设置为 false 来禁用它。 [1]

已经创建了各种工具,让您可以在 WSL 中利用 Windows 服务和功能。

桥接来自 Windows 的 ssh-agent 服务

wsl2-ssh-agent 是一个允许您在 WSL 中使用 Windows SSH 代理的工具。

如果您使用需要使用物理安全密钥甚至 Windows Hello*-sk SSH 密钥,这尤其有用。

安装 wsl2-ssh-agentAUR 并将以下内容添加到您的 ~/.bashrc

eval "$(/usr/sbin/wsl2-ssh-agent)"

重新启动您的 shell,SSH_AUTH_SOCK 环境变量应该已正确配置。

使用 Windows Hello 进行 PAM 身份验证

WSL-Hello-Sudo 是一个 PAM 插件,允许您通过 Windows Hello 验证您的用户。

安装 wsl-hello-sudo-binAUR 并运行 /opt/wsl-hello-sudo/install.sh。安装程序会将 Windows 可执行文件复制到您选择的目录,并将其旁存储用于身份验证的证书。

提示 https://github.com/nullpo-head/WSL-Hello-sudo 已 4 年未更新,因此 wsl-hello-sudo-binAUR 使用了一个分支(https://github.com/lzlrd/wsl-hello-sudo),该分支已合并了依赖更新。

auth sufficient pam_wsl_hello.so 添加到您希望使用 Windows Hello 进行身份验证的任何 /etc/pam.d 配置文件中。例如,使用 sudo:

/etc/pam.d/sudo
#%PAM-1.0
auth            sufficient      pam_wsl_hello.so
auth            include         system-auth
account         include         system-auth
session         include         system-auth

将设备传递给 WSL

WSL 2 是一个 Hyper-V 虚拟机。这允许将物理设备从主机 (Windows) 直通给客户机 (WSL 2)。

挂载磁盘

WSL 2 支持附加和挂载 Windows 可用的磁盘。

为此,请首先使用以下 PowerShell 命令确定给定磁盘的 DeviceID

> GET-CimInstance -query "SELECT * from Win32_DiskDrive"

找到您要传递的磁盘后,在 Windows 中(以管理员权限)运行以下命令:

> wsl --mount DeviceID --bare
警告 这将使磁盘在 Windows 中离线!确保您已关闭所有正在使用该驱动器的应用程序。

附加后,您应该可以使用 lsblk 看到该设备。

要卸载磁盘,请运行:

> wsl --unmount DeviceID

有关更多信息,请参阅 https://learn.microsoft.com/en-us/windows/wsl/wsl2-mount-disk

连接 USB 设备

usbipd-win 是一个允许将本地连接的 USB 设备共享给其他计算机(包括 WSL 2)的项目。

您首先需要在 Windows 上安装该软件。您可以运行最新版本的安装程序 (.msi),或使用 Windows 包管理器

> winget install usbipd

安装后,使用以下命令在 Windows 上识别可用的 USB 设备,并记下总线 ID:

> usbipd list

准备您选定的 USB 设备,运行(这需要管理员权限):

> usbipd bind --busid busid
警告 确保您已关闭所有正在使用该 USB 设备的应用程序。

然后,使用以下命令将 USB 设备附加到 WSL 2:

> usbipd attach --wsl --busid busid

附加后,您应该可以使用 lsusb 看到该设备。

要分离 USB 设备,请运行:

> usbipd detach --busid busid

有关更多信息,请参阅 https://learn.microsoft.com/en-us/windows/wsl/connect-usb


调整区域设置

默认情况下,WSL 会尝试将您的区域设置与 Windows 匹配。如果您想覆盖此行为,请运行:

ln -sf /etc/locale.conf /etc/default/locale

然后按照在任何其他安装中的方式设置您的区域设置

故障排除

运行 Docker 容器时失败

从 WSL 运行 Docker 容器时,可能会遇到以下错误:

Error response from daemon: path / is mounted on / but it is not a shared or slave mount
Error: failed to start containers

也可能出现 docker run 等命令永远挂起而不产生任何输出的情况。

这是因为 Docker 要求根目录(/)以 rshared 传播方式挂载。

为此,请运行:

# mount --make-rshared /

要使更改持久化,您可以创建一个 systemd 服务,该服务在启动早期运行此命令:

/etc/systemd/system/mount-root-rshared.service
[Unit]
Description=Remount / with shared propagation
Requires=-.mount
After=-.mount

[Service]
Type=oneshot
ExecStart=/bin/mount --make-rshared /

[Install]
WantedBy=local-fs.target

然后启动/启用 mount-root-rshared.service

Docker 初始化时间过长

如果您使用 docker.service 启动您的 WSL 会话,或在启动/启用 docker.socket 并执行 docker info 或任何其他 Docker 命令后,Docker 可能需要很长时间才能初始化。

这是因为 docker.socket 尝试启动 systemd-networkd-wait-online.service,但该服务失败。

因此,禁用 systemd-networkd-wait-online.service 可以解决此问题。

参见