跳至內容
出自 Arch Linux 中文维基

作為 archlinux-wsl 項目的一部分,Arch Linux 提供官方 WSL(Windows Subsystem for Linux,適用於 Linux 的 Windows 子系統) 鏡像。

鏡像每月構建並發布一次,旨在通過最簡且完整的系統在 WSL 上提供完整的 Arch Linux 體驗。

注意:該項目僅為 WSL 2 構建鏡像,不支持 WSL 1。

安裝

安裝 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 的更多操作。

手動安裝

注意:需要 WSL 2.4.4 及更新版本,關於更舊版本,請參閱本文的歷史修訂 31886

下載最新的 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

注意:符號連結覆寫問題已在 WSL 預發行版 2.5.7.0 中修復,但依然需要設置 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 996GentooGentoo 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

欲獲取更多信息,請參閱官方文檔

疑難解答

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

參見