作为 archlinux-wsl 项目的一部分,Arch Linux 提供官方 WSL(Windows Subsystem for Linux,适用于 Linux 的 Windows 子系统) 镜像。
镜像每月构建并发布一次,旨在通过最简且完整的系统在 WSL 上提供完整的 Arch Linux 体验。
安装
安装 WSL
在 UEFI 设置中启用虚拟化,然后从 Microsoft Store 安装 Windows Subsystem for Linux(适用于 Linux 的 Windows 子系统)。
更新 WSL
要更新到最新稳定版的 WSL 和 WSLg,在具有管理员权限的 Windows 的命令行 Shell 中执行以下命令:
> wsl --update
要更新到最新的预发行版本,请换用以下命令:
> wsl --update --pre-release
在 WSL 上安装 Arch Linux
在已安装了 WSL 2 的 Windows 系统上遵循以下安装方式之一:
自动安装
在 Windows 的命令行 Shell 中执行该命令:
> wsl --install archlinux
然后您可以在开始菜单中通过 archlinux
应用程序在 WSL 中运行 Arch Linux,亦可在 Windows 的命令行 Shell 中执行 wsl -d archlinux
。
如果您不希望使用 WSL 的默认安装路径和发行版名称,可以使用以下命令:
> wsl --install -d archlinux --name 自定义名称 --location 自定义路径
其中 --name
用于设置名称,--location
用于设置安装路径,例如:
> wsl --install -d archlinux --name Arrrrch --location D:\WSLOS\Arch
执行 wsl --help
命令以查看 WSL 的更多操作。
手动安装
下载最新的 Arch Linux .wsl
镜像,然后双击以进行安装或在 Windows 的命令行 Shell 中执行以下命令:
> wsl --install --from-file WSL_image
例如:
> wsl --install --from-file C:\Users\用户名\Downloads\archlinux-2025.04.01.121271.wsl
archlinux
安装 WSL 镜像,若您欲以不同名称导入,请添加 --name Distro_name
选项。然后您可以在开始菜单中通过 archlinux
应用程序在 WSL 中运行 Arch Linux,亦可在 Windows 的命令行 Shell 中执行 wsl -d archlinux
。
提示和技巧
设定默认用户
要设定 root
以外的默认用户,首先确保该用户已被创建,然后将以下行添加到 /etc/wsl.conf
:
[user] default=username
关闭会话前记得为 root
用户设置密码,如果您被“拒之门外”,请在 Windows 主机的 CMD 中执行:
> wsl -u root
此更改将在下次会话启动时生效,要终止当前会话,请在 Windows 的命令行 Shell 中执行以下命令:
> wsl --terminate archlinux
若您使用 WSL 2.4.10 或更新版本,则可以使用以下命令为您的发行版设定默认用户:
> wsl --manage archlinux --set-default-user 用户名
此更改将在下次启动时生效。
用 WSLg 运行图形界面应用程序
WSLg(Windows Subsystem for Linux GUI)项目致力于让 WSL 支持 Linux 音频(PulseAudio)和图形界面(X11 和 Wayland)。
WSLg 默认启用,您可在 WSL 配置文件中将 wsl2.guiApplications
设为 false
以将其关闭。
WSL 可在打开会话时创建 X11 和 Wayland 服务器套接字的符号链接,但在初始化时会被 systemd 覆盖。更多信息参见microsoft/wslg#1032。
GALLIUM_DRIVER=d3d12
环境变量。在等待上游修复该问题时,您可以手动创建这些符号链接。首先,创建一个 systemd-tmpfiles 配置以链接到包含 X11 服务器套接字的目录:
/etc/tmpfiles.d/wslg.conf
# Path Mode UID GID Age Argument L+ %T/.X11-unix - - - - /mnt/wslg/.X11-unix
然后创建以下文件以链接到包含 PulseAudio 和 Wayland 服务器套接字的目录并设定 Gallium 驱动程序:
/etc/profile.d/wslg.sh
export GALLIUM_DRIVER=d3d12 for i in "/mnt/wslg/runtime-dir/"*; do [ "$XDG_RUNTIME_DIR" = "$HOME" ] && XDG_RUNTIME_DIR="/var/run/user/$UID" if [ ! -L "$XDG_RUNTIME_DIR/$(basename "$i")" ]; then [ -d "$XDG_RUNTIME_DIR/$(basename "$i")" ] && rm -r "$XDG_RUNTIME_DIR$(basename "$i")" ln -s "$i" "$XDG_RUNTIME_DIR/$(basename "$i")" fi done
此更改将在下次会话启动时生效,要终止当前会话,请在 Windows 的命令行 Shell 中执行以下命令:
> wsl --terminate archlinux
硬件加速渲染
要在 WSL 中使用硬件加速渲染,请安装以下软件包:
-
mesa包 - 包含 OpenGL 所需的
d3d12
Gallium 驱动 -
vulkan-dzn包 - 包含实验性的
dzn
(亦作microsoft-experimental
)Vulkan 驱动
还需要安装 vulkan-icd-loader包(要运行 32 位应用程序则亦需安装 lib32-vulkan-icd-loader包)。
若 openGL 依然在英特尔 GPU 上使用 llvmpipe 软件渲染,则需要为 libedit 创建符号链接:
# ln -s /usr/lib/libedit.so /usr/lib/libedit.so.2
更多信息参见 Issue 996 和 GentooGentoo in WSL#OpenGL falling back to llvmpipe software renderer on Intel GPUs。
WSL 互操作
WSL 支持与 Windows 互操作,这让您可以从 WSL 运行 Windows 二进制程序。
其默认启用,您可在 /etc/wsl.conf
中将 interop.enabled
设定为 false
以将其禁用[1]。
有一些工具能让您在 WSL 内使用 Windows 服务和功能。
从 Windows 桥接 SSH 代理服务
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 是一个使用 Windows Hello 进行用户身份认证的 PAM 插件。
安装 wsl-hello-sudo-binAUR 并运行 /opt/wsl-hello-sudo/install.sh
。安装程序会复制一个 Windows 可执行程序到您选定的目录并存储用于身份认证的证书。
欲使用 Windows Hello 进行认证,将 auth sufficient pam_wsl_hello.so
行添加到 /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
附加后,您应当可以用 lsblk
看到该磁盘。
要取消挂载,请运行:
> wsl --unmount DeviceID
连接 USB 设备
usbipd-win 项目可以将本地连接的 USB 共享到其他设备,包括 WSL 2。
首先请在 Windows 上安装该软件。您可以选择运行最新发布的安装程序(.msi)或使用 Windows 包管理器:
> winget install usbipd
安装完成后,请在 Windows 上执行以下命令,找到欲共享的 USB 设备,特别留意其 bus ID:
> usbipd list
执行以下命令以准备欲共享的 USB 设备(需要管理员权限):
> usbipd bind --busid busid
然后执行以下命令将 USB 设备连接到 WSL 2:
> usbipd attach --wsl --busid busid
连接后,您应当可以用 lsusb
看到该设备。
要与 USB 设备断开连接,请执行:
> usbipd detach --busid busid
欲获取更多信息,请参阅官方文档。
疑难解答
systemd 支持
Arch Linux WSL 镜像支持 systemd。
然而,有一些已知问题可能需要额外操作才能使 systemd 正常工作。
systemd 需要纯 cgroup v2 支持
目前,WSL 默认以 cgroup v1 支持启动系统[2],但 256 版本后的 systemd 不支持 cgroup v1 [3],需要纯 cgroup v2支持。
在等待 WSL 默认以 cgroup v2 支持启动系统时,您可以在 Windows 系统的 %USERPROFILE%\.wslconfig
文件(若不存在则创建)中强制禁用 cgroup v1 支持,如下:
[wsl2] kernelCommandLine = cgroup_no_v1=all systemd.unified_cgroup_hierarchy=1
此更改将在下次会话启动时生效,要终止当前会话,请在 Windows 的命令行 Shell 中执行以下命令:
> wsl --terminate archlinux
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 需要根目录(/
)被挂载为可共享。
欲修复,请运行:
# 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
。
关于该选项的更多信息,请参阅 mount(8) § Shared subtree operations。