在 WSL 上安装 Arch Linux - Arch Linux 中文维基

跳转到内容

# 在 WSL 上安装 Arch Linux

来自 Arch Linux 中文维基
翻译状态：

- 本文（或部分内容）译自 Install Arch Linux on WSL，最近一次同步于 2025-08-22，若英文版本有所更改，则您可以帮助同步与翻译更改的内容。
- 您可以在 ArchWiki 的对应页面找到本文翻译的原始修订历史。
- 本文可能与英文原文存在出入。

作为 archlinux-wsl 项目的一部分，Arch Linux 提供官方 WSL（Windows Subsystem for Linux，适用于 Linux 的 Windows 子系统）镜像。

镜像每月构建并发布一次，旨在通过最简且完整的系统在 WSL 上提供完整的 Arch Linux 体验。

注意：需要 WSL 2。不支持 WSL 1。以下内容均假定您使用最新稳定版的 WSL 2。

## 安装

### 安装 WSL

在 UEFI 设置中启用虚拟化，然后从 Microsoft Store 安装 Windows Subsystem for Linux（适用于 Linux 的 Windows 子系统）。

注意：Microsoft Store 内的 WSL 是默认版本。不要启用 "Windows Subsystem for Linux" 组件，也不要安装 WSL 内核或 WSLg 的 MSI 安装包，因为它们不再被需要。相比于 Windows 组件，使用 Microsoft Store 版本的 WSL 可让您更快地获取更新，WSLg 现也已被打包。

### 更新 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

导入式安装（可自定义位置）：

    > wsl --import archlinux D:\WSL\Arch D:\Download\archlinux-2025.04.01.121271.wsl

提示：这会以默认发行版名称 `archlinux` 安装 WSL 镜像，若您欲以不同名称导入，请添加 `--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 中启用 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 依然在英特尔 GPU 上使用 llvmpipe 软件渲染，则需要为 libedit 创建符号链接：

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

更多信息参见 Issue 996 和 Gentoo:Gentoo 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 可执行程序到您选定的目录并存储用于身份认证的证书。

提示：WSL-Hello-Sudo 已经 4 年没有更新了，因此 wsl-hello-sudo-binAUR 打包了一个分支，合并了一些依赖更新。

欲使用 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

警告：这会使相应磁盘在 Windows 上下线，挂载前确保您已关闭所有正在使用该驱动器的应用程序。

附加后，您应当可以用 `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 设备的应用程序。

然后执行以下命令将 USB 设备连接到 WSL 2：

    > usbipd attach --wsl --busid busid

连接后，您应当可以用 `lsusb` 看到该设备。

要与 USB 设备断开连接，请执行：

    > usbipd detach --busid busid

欲获取更多信息，请参阅官方文档。

### 修改区域设置

WSL 默认会尝试将区域设置调整为与 Windows 相匹配。欲手动设置，请执行以下命令：

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

然后像正常安装一样设定区域。

## 疑难解答

### systemd 支持

Arch Linux WSL 镜像支持 systemd。

然而，有一些已知问题可能需要额外操作才能使 systemd 正常工作。

### 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。

## 参见

- Wikipedia:Windows Subsystem for Linux
- Gentoo:Gentoo in WSL
- 官方文档（英文）
- 官方文档（中文）
- WSLg GitHub Wiki

分类：​

- 安装过程
- 虚拟机管理

在 WSL 上安装 Arch Linux
添加话题