☰
WSL2 安装配置全攻略:Ubuntu、Docker、CUDA 与图形界面一步到位
2026/9/28 7:24:39 网站建设 项目流程

你可能已经在各种开发社区里反复看到过 WSL2 这个词,它全称 Windows Subsystem for Linux 2,说人话就是:在 Windows 系统里直接跑一个真正的 Linux 内核,不是模拟器,也不是虚拟机,而是微软把完整的 Linux 内核整合进了操作系统。这篇文章我会从零开始,把下载 WSL2、完整安装、配置 Ubuntu、接上 Docker 和 CUDA、再把图形界面也折腾出来的整个过程讲清楚,每一步都附上实际的命令和踩坑记录。如果你是第一次接触 WSL2,跟着做就行;如果你是在 Windows Server 2022 上,或者从 WSL1 怎么都升不到 WSL2,也能在这里找到对应的解法。

1. 理解 WSL2:本质、差异与适用场景

1.1 为什么需要 WSL2,它解决了什么问题

以前在 Windows 上跑 Linux 只有三种路子:装双系统,每次重启切换;装虚拟机(VMware/VirtualBox),完整启动一个图形化系统,吃内存吃 CPU;再就是装 Git Bash、Cygwin 这类模拟层工具,只是长得像 Linux,实际上不是。WSL2 的出现把这些问题基本都抹平了:它启动只需要一两秒,内存按需动态分配,不占用额外 CPU,而且因为是一个真正的 Linux 内核,所以 apt、systemd、原生 Docker、CUDA 这些都能直接跑,兼容性比 WSL1 那种翻译层方式高了一大截。

我个人的体验是,以前很多项目必须在云 Linux 服务器上跑,本地 Windows 只用来写代码,来回传文件、开调试端口,效率低得让人抓狂。有了 WSL2 之后,本地就可以当作一台低配 Linux 服务器,开发、验证、部署脚本全在同一个环境里跑,再也不用担心“我本机上能跑,服务器上就挂了”这种玄学问题。对于做运维、搞后端、学数据科学的人,这是 Windows 下最值得折腾的基础设施。

1.2 WSL1 和 WSL2 的差异与选型建议

WSL1 是把 Linux 系统调用翻译成 Windows 系统调用,相当于一个兼容层,所以启动极快,跨文件系统访问也没什么障碍,但有些依赖 Linux 内核特性的软件(比如 Docker、需要 inotify 的框架)跑不了或者行为奇怪。WSL2 则是用一个轻量虚拟机去跑真正的 Linux 内核,兼容性大幅提升,代价是跨文件系统读写性能有所下降、内存占用会随内核分配。

对比项WSL1WSL2
架构系统调用翻译层轻量虚拟机(真实Linux内核)
启动速度极快快,秒级启动
Linux内核兼容性不完整完整
跨文件系统性能较好明显下降
Docker/GPU/CUDA不支持原生支持
内存/CPU占用较低按需分配,默认占满可达100%
适用场景快速脚本、文件互操作服务端开发、容器、GPU计算

现在新安装的 WSL 默认就是 WSL2,不建议再装 WSL1。如果你手头已经有 WSL1 发行版,可以之后用命令升级到 WSL2。后面第 3 章我会详细说明怎么切换。简单来说,没有特殊历史包袱的情况下,直接锁死 WSL2 就是最佳选择。

2. 安装前的准备:系统要求与下载选择

2.1 先检查自己的 Windows 版本和支持情况

在动手之前,先确认系统版本是否支持。WSL2 要求 Windows 10 版本 1903 及以上,且内部版本号在 18362 以上(也就是 2019 年中以后的版本),Windows 11 全系支持。Windows Server 2019/2022 也支持,但需要一些额外步骤,这个我放到第 5 章单独讲。

按Win + R,输入winver,就能看到版本和内部版本号。如果版本太低,先把 Windows 系统更新到最新,否则后面很可能遇到“无法安装”“找不到功能”之类的问题。另外需要确认 CPU 支持虚拟化。在任务管理器——性能——CPU 页面右下角,找到“虚拟化”一栏,显示“已启用”就说明 BIOS 里已经开好了。

如果显示“已禁用”,需要重启进 BIOS,找到 Intel VT-x / AMD-V / SVM Mode 之类的选项打开。这一步很多人在最开始就忽略,结果后面装好了 WSL2,一启动发行版就报错:“Please enable the Virtual Machine Platform...”,折腾半天才发现问题是虚拟化开关没开。我建议动手前花一分钟看掉这个,能省很多事。

2.2 启用必要的 Windows 功能

WSL2 依赖两个 Windows 功能:适用于 Linux 的 Windows 子系统和虚拟机平台。在控制面板——程序和功能——启用或关闭 Windows 功能,把这两个勾选上。也可以直接用 PowerShell(管理员模式)一次性执行:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

执行完重启系统。请注意,VirtualMachinePlatform是 WSL2 专属,系统里只有 WSL1 的话这个功能通常不会出现,所以很多人从 WSL1 升级到 WSL2 失败,根本原因就是没开它。开启之后再重新执行升级命令,一般就能成功。

2.3 下载 WSL2 的几种途径

这里必须澄清一个概念:WSL2 不是像 QQ 安装包那样的单个文件,它由“功能组件+内核更新包+发行版镜像”三部分组成。所以“下载 WSL2”实际上可能涉及三个下载动作。

第一种途径是通过应用商店下载发行版。打开 Microsoft Store,搜索 Ubuntu,选择你想要的版本(比如 Ubuntu 22.04.3 LTS),点击获取即可。商店里只下载发行版镜像,底层运行所需的内核和功能组件由系统负责更新。

第二种途径是下载 WSL2 内核更新包。微软官方提供wsl_update_x64.msi这个独立安装包,专门用于 Windows 10 1903~1909 等无法自动获取内核的环境。下载后双击安装,安装完成后需要打开 PowerShell 执行:

wsl --set-default-version 2

这样后续安装的发行版就默认跑在 WSL2 上了。

第三种途径是离线和批量部署场景,比如内网机器没有外网。这种情况可以在联网机器上用wsl --export导出已经安装好的发行版为.tar文件,然后在目标机器上用wsl --import导回。具体导入导出命令在第 5 章会展示。

我的建议是:不是特别老的系统就用最简单的wsl --install,一条命令把功能、内核和默认发行版全部装好,这也是微软现在推荐的方式。

3. 一步步安装 WSL2 与 Ubuntu(含完整命令细节)

3.1 全新安装:一条命令完成 WSL2 + Ubuntu

如果你的 Windows 版本较新(Windows 11 或更新过的 Windows 10),可以在管理员 PowerShell 中运行:

wsl --install

这条命令会完成三件事:启用 WSL 功能、启用虚拟机平台、自动安装默认的 Ubuntu 发行版。默认安装的是最新 Ubuntu LTS 版本,目前是 Ubuntu 24.04。安装结束后系统通常要求重启,重启后自动弹出 Ubuntu 终端,提示你创建用户名和密码。这个用户名不是 Windows 用户名,是 Linux 内独立的账号,注意别搞混。

如果想指定版本,可以在安装时用:

wsl --install -d Ubuntu-22.04

如果想看商店里有哪些可用的发行版,执行:

wsl --list --online

输出里会列出 Ubuntu、Debian、kalilinux、openSUSE 等一堆名字。把名字对应到-d参数后面就能安装指定发行版。这个技巧在需要固定版本训练或验证环境时非常有用,比如很多项目依赖 Ubuntu 20.04 的老版本 Oxygen 库,直接装 22.04 可能会有兼容问题。

3.2 手动安装:老版本 Windows 或商店不可用的完整流程

如果你的系统版本较老,或者使用的是 Windows Server 2022(默认没有 Microsoft Store,即便打开商店也经常下载失败),就需要手动完成每一步。流程如下:

第一步:启用功能

管理员 PowerShell 执行前面第 2.2 节里的两条dism命令,重启。

第二步:下载并安装 WSL2 内核更新包

从微软官方下载wsl_update_x64.msi,双击完成安装。这个包只有十几兆,主要解决老系统内核更新问题。

第三步:设置默认版本

管理员 PowerShell 执行:

wsl --set-default-version 2

如果命令成功会提示 “For information about key differences with WSL 2...” 之类的内容,说明 WSL2 已经成为默认版本。如果报错,大概率是虚拟机平台功能没开或者没重启,回去检查一下。

第四步:安装发行版

在 Microsoft Store 里安装 Ubuntu,或者直接访问 Ubuntu 官网下载.appx/.appxbundle安装包。手动下载的包在 PowerShell 里用Add-AppxPackage安装。安装后用开始菜单打开 Ubuntu 图标,完成初始化账号设置。

整个过程会比wsl --install繁琐一些,但胜在可控。尤其是 Server 系统上,商店经常抽风,手动下载.appx是最可靠的路子。

3.3 安装指定版本的 Ubuntu:20.04 和 22.04 怎么选

WSL2 对发行版的版本支持是按需下载的,所以才可能有“WSL2 安装 Ubuntu 20.04”“WSL2 安装 Ubuntu 22.04”这类搜索词。当前 Ubuntu 长期支持版本有 20.04、22.04、24.04。选哪款主要看你要跑什么:

发行版内核版本基础适用人群
Ubuntu 20.04基于 20.04 LTS,软件源成熟老项目、ROS Noetic、部分嵌入式工具链
Ubuntu 22.04LTS,兼容性更广大多数开发任务、深度学习环境、Docker 服务
Ubuntu 24.04最新 LTS尝试新特性的场景,但部分旧软件源可能没跟上

我个人的建议是初次使用直接装 22.04,这个版本经历了两年多的补丁,踩坑资料最全。如果后面有特定需求,再wsl --install -d Ubuntu-20.04装第二个发行版,WSL2 完全支持多个发行版共存,切换命令是:

wsl -d Ubuntu-20.04 wsl -d Ubuntu-22.04

同一个内核上挂多个 Linux 环境,互不干扰,这种能力真的很适合测试软件在不同发行版上的行为。

4. 装完别急着用:环境配置与扩展重点

4.1 检查 WSL2 状态和调整资源占用

安装完成后,先打开 PowerShell 跑两个命令熟悉下状态:

wsl --status wsl --list --verbose

wsl --status会显示默认版本是不是 WSL2;wsl --list --verbose会列出所有已安装的发行版,并标明每个发行版当前是 VERSION 1 还是 VERSION 2。如果你看到的版本是 1,可以用命令升级:

wsl --set-version Ubuntu-22.04 2

升级过程可能需要一两分钟,输出提示转换完成后,这个发行版就跑在 WSL2 内核上了。

内存占用是很多人抱怨的点。WSL2 默认“看到”多少内存就尽量用多少,Windows 会被挤得内存吃紧。解决办法是在用户目录下创建.wslconfig文件(路径类似C:\Users\你的名字\.wslconfig),写入限制:

[wsl2] memory=4GB processors=4 swap=0

保存后在 PowerShell 里执行:

wsl --shutdown

再重新进入 WSL2,配置就生效了。这里的memory=4GB表示最多给 WSL2 分配 4GB 内存,processors=4限制 CPU 核心数。如果你的机器内存只有 8GB,建议把 WSL2 内存限制在 4GB 以内,不然宿主机经常卡顿。

4.2 在 Windows 环境里把 WSL2 和 Docker 组合起来

Windows 环境安装 WSL2 和 Docker 的正确打开方式是安装 Docker Desktop,并在设置里选择一个带有 WSL2 的集成方案。具体步骤:

第一步:在 Windows 安装 Docker Desktop

去官网下载 Docker Desktop for Windows,安装时保持默认选项,保证选中“Use WSL 2 based engine”。安装后 Docker Desktop 会自动检测 WSL2 环境,并创建一个名为docker-desktop的 WSL 发行版。

第二步:在 Docker Desktop 设置里开启 WSL 集成

进入 Settings → Resources → WSL Integration,把你要使用的发行版(比如 Ubuntu-22.04)开关打开。这样在 WSL2 里面直接敲docker命令,就会走 Windows 上 Docker Desktop 的引擎,不需要在 Linux 里再单独装一套 Docker。

第三步:验证

在 Ubuntu 终端里执行:

docker --version docker run hello-world

能正常输出版本和运行信息,就说明 Docker 环境已经通了。

如果你不想用 Docker Desktop,也可以在 WSL2 内部直接安装 Docker Engine:

sudo apt update sudo apt install docker.io sudo systemctl enable docker --now

这种方式的好处是不依赖图形界面程序,资源占用略低,缺点是 Docker 容器端口映射和 Windows 防火墙配置要自己管。我现在的习惯是:日常开发用 Docker Desktop 集成,跑资源敏感的任务时直接在 WSL2 内启动 Docker,灵活切换。

4.3 在 WSL2 中安装 CUDA:让显卡真正跑起来

WSL2 一个被严重低估的能力是原生 GPU 加速。只要 Windows 上安装的 NVIDIA 驱动版本足够新(460.89 及以上),并且完成 CUDA on WSL 的配置,WSL2 内部就能直接使用显卡计算,不需要在 WSL 里单独安装显卡驱动。这个特性对做深度学习、跑 Stable Diffusion、或者搞 CUDA 编程的人非常实用。

第一步:在 Windows 侧安装 NVIDIA 驱动

注意这里说的是 Windows 版本驱动,不是 Linux 版本。到 NVIDIA 官网下载对应型号的 Windows 驱动装好即可。装完在 Windows 命令行里执行:

nvidia-smi

能看到显卡信息和驱动版本就说明基础环境就绪。

第二步:在 WSL2 里安装 CUDA Toolkit

进入 Ubuntu,安装官方提供的 CUDA Toolkit for WSL2:

wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.0-1_all.deb sudo dpkg -i cuda-keyring_1.0-1_all.deb sudo apt-get update sudo apt-get install -y cuda-toolkit

安装过程比较大,建议网络环境可靠时一次性装完。如果只做推理不需要编译,可以装上更轻量的cuda-toolkit子集或直接用 conda 里的 CUDA 运行时。

第三步:验证 GPU 能力

nvidia-smi

在 WSL2 终端里如果能看到和 Windows 侧一致的显卡信息,说明 GPU 已经被 WSL2 认出来。用 Python 测试一下:

import torch print(torch.cuda.is_available()) print(torch.cuda.device_count())

能输出True,就说明 CUDA 环境完全跑通了。实际使用中我踩过最大的坑是 Windows 驱动更新后,WSL2 内部的 CUDA 相应版本不匹配,这时候只需要重新安装一次 CUDA Toolkit,让它随驱动版本自动对齐。

4.4 给 WSL2 配上图形界面:从 WSLg 到 X11 转发

很多人以为 WSL2 只能敲命令,其实它也能跑图形程序。Windows 11 自带 WSLg,安装完 WSL2 后无需任何配置,直接在终端里敲code .或者启动一个 Linux GUI 应用,窗口就会弹出来。Windows 10 用户则需要用 X 服务器配合环境变量来实现。

Windows 10 的教程我实测过,流程如下:

第一步:在 Windows 侧安装 VcXsrv

下载安装 VcXsrv,启动时注意勾选“Disable access control”,否则 WSL2 里的图形程序会因为权限问题连不上。

第二步:在 WSL2 里配置 DISPLAY 环境变量

在~/.bashrc末尾加一行:

export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0

保存后执行source ~/.bashrc。这里的原理是,WSL2 使用 NAT 网络,Windows 侧的 X 服务器在网关 IP(也就是/etc/resolv.conf里的 nameserver)上监听。

第三步:安装并启动图形软件

以 GIMP 为例:

sudo apt update && sudo apt install gimp -y gimp

这样就能看到 GIMP 图形界面弹出。这个方法在 Windows 10 上跑 Linux 桌面应用非常实用,比如 RStudio、Blender、Qt 程序都能用。不过需要注意性能和缩放表现,高 DPI 屏幕下部分应用会有点模糊,这是 X11 转发的固有问题,没法完全根治。如果图形程序用得频繁,我建议升级到 Windows 11,用 WSLg 体验好得多。

5. 高频问题排查:从 WSL1 升不到 WSL2 到 Server 2022 的坑

5.1 已有 WSL1,怎么都切不到 WSL2 怎么处理

“WSL1 改不成 WSL2”是我看搜索记录里出现频率很高的一个说法。一般表现为执行:

wsl --set-version Ubuntu-20.04 2

等了很久之后提示:

Conversion in progress... Please enable the Virtual Machine Platform Windows feature and ensure virtualization is enabled in the BIOS.

或者干脆卡住不动。原因基本是三个:虚拟机平台功能没启用、BIOS 虚拟化没开启、内核更新包没装。解决顺序是:

  1. 确认虚拟机平台已启用:管理员 PowerShell 跑dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart,然后重启。
  2. 确认 BIOS 虚拟化已开启:任务管理器里查看“虚拟化”是否“已启用”。
  3. 确认内核更新包已装:打开“应用和功能”搜“Windows Subsystem for Linux”,看能否看到内核版本信息。没有就下载wsl_update_x64.msi装上。

还有一个冷门原因:发行版系统盘空间不足。转换过程需要一点额外空间,如果系统盘快满了,就跑到一半失败。清理一下磁盘再重试就能过。

5.2 Windows Server 2022 上安装 WSL2 的额外细节

Windows Server 2022 装 WSL2 比客户端系统要麻烦一些。这个系统默认没有 Microsoft Store,即使手动打开商店也可能因为依赖问题无法使用。我在 Server 上装 WSL2 的实测流程是:

第一步:安装功能

管理员 PowerShell:

Install-WindowsFeature -Name Microsoft-Hyper-V, Containers

接着与第 2.2 节相同,启用 WSL 和虚拟机平台功能:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

重启。

第二步:手动下载发行版包

由于 Server 上没有商店,需要在有网络的机器上从微软网站下载 Ubuntu 的.appx包(比如用浏览器打开 Ubuntu 在 Microsoft Store 页面里的官方下载链接),把.appx后缀改为.zip解压,然后在解压目录执行:

.\ubuntu.exe install

或者直接用:

Add-AppxPackage .\Ubuntu.appx

就能把发行版注册进去。

第三步:设置版本

照旧执行wsl --set-version Ubuntu-22.04 2。Server 2022 上最容易犯的错是跳过了VirtualMachinePlatform功能,直接去跑--set-version 2,结果一直失败。先确认两个功能都启用,再谈升级。

5.3 迁移发行版位置和备份还原

WSL2 的发行版默认安装在 C 盘,用一阵子之后体积可能膨胀到几十 GB,把系统盘挤爆。我强烈建议从初始阶段就把发行版迁移到其他盘。流程:

先终止要迁移的发行版:

wsl --shutdown

导出当前发行版为 tar 文件:

wsl --export Ubuntu-22.04 D:\wsl-ubuntu.tar

从 WSL 中注销当前发行版:

wsl --unregister Ubuntu-22.04

再导入到目标目录:

wsl --import Ubuntu-22.04 D:\WSL\Ubuntu-22.04 D:\wsl-ubuntu.tar

导入后注意默认用户会变成 root。可以通过在 WSL 里修改/etc/wsl.conf加入:

[user] default=你的用户名

让下次启动切回普通用户。这个方法也是备份和还原的万能解法,我在重装系统前一定会把重要发行版先导出。

5.4 网络访问与文件共享的几个小经验

WSL2 是 NAT 网络,IP 地址每次重启都会变。因此从 Windows 访问 WSL 里的服务,推荐直接用localhost,WSL2 会自动把 Windows 的端口请求转发到 Linux。也就是说你在 WSL2 里跑了一个 8080 端口的服务,浏览器里访问http://localhost:8080就能打开。

从 WSL 访问 Windows 文件非常方便,直接通过/mnt/c、/mnt/d挂载点即可。反过来从 Windows 访问 WSL 文件系统,打开文件资源管理器输入\\wsl$,就能看到所有发行版,可以像普通网络路径一样拖拽文件。这种方式适合小文件传输,大批量读写推荐放在 Linux 文件系统内部完成,比如/home/用户名/下,因为跨文件系统的 IO 性能差很多。

还有个常见坑是防火墙拦截。在 WSL2 里启动服务后,局域网其他电脑直接访问Windows 的局域网 IP + 端口可能不通。原因是虚拟网卡防火墙规则。需要在管理员 PowerShell 里添加端口规则,或者临时关闭专用网络的防火墙测试。这个行为取决于你所在网络的安全策略,内部开发环境可以用,公网环境务必谨慎。

6. 一些私货:我的避坑清单和最终建议

WSL2 我已经用了两年多,踩过的坑比写出来的还多,最后分享几条真实体会:

第一条,遇到奇怪的问题,先执行wsl --shutdown再重进。这个命令能清掉 WSL2 的所有运行时状态,多数“突然连不上网络”“程序卡死”“磁盘占用突高”都能靠它解决。它比重启电脑快得多,也是排障的第一步。

第二条,不要把自己困在 WSL2 里当 Windows 的“二等公民”。WSL2 的文件系统、网络、虚拟化特性已经足够成熟,完全可以把它当主力开发环境。如果你依赖 Windows 的图形工具,就用 VS Code 的 Remote-WSL 插件把编辑器留在 Windows 侧,运行环境放 WSL2 里,两边都舒服。

第三条,.wslconfig是性能调优的关键。没设置任何限制时,WSL2 会默认占用大量内存,尤其是跑 Docker 或大型构建时,Windows 会卡到怀疑人生。花两分钟写一个限制配置文件,绝对值回票价。

第四条,发行版数据及时导出。WSL2 的发行版就是一个普通 Linux 文件系统,重装系统前不导出,数据就全没了。我把wsl --export当成日常备份习惯,平时多几个 GB 的 tar 包,关键时刻能救命。

关于 WSL2 本身,后续还可以继续扩展很多内容:比如直接在这个环境里跑 systemd 服务、用 Ansible 批量管理、挂载磁盘、配置多用户,都是很好的方向。但你不需要一次性搞定所有东西,先把这篇文章里的安装、Docker、GPU、图形界面这几个环节走通,就已经能覆盖百分之八十的开发场景了。如果安装过程中遇到我这里没写到的报错,先看 Windows 版本和功能状态,再看 BIOS 虚拟化,最后查内核更新包,九成问题都出在这三处。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询