作為 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。