windows中用wsl使用cuda
windows11 安装WSL2全流程_wsl2安装-CSDN博客lhttps://blog.csdn.net/u011119817/article/details/130745551?fromshare=blogdetail&sharetype=blogdetail&sharerId=130745551&sharerefer=PC&sharesource=babytiger&sharefrom=from_link
WSL(Windows Subsystem for Linux)可以安装多种 Linux 发行版,而且支持从 Microsoft Store、命令行、甚至手动导入 .tar
镜像进行安装。下面是完整的可选类型与方式说明 👇
🧩 一、常见可直接安装的 Linux 发行版(Microsoft Store 官方提供)
发行版名称 | 安装命令(PowerShell) | 说明 |
---|---|---|
Ubuntu 24.04 LTS | wsl --install -d Ubuntu-24.04 | 最新长期支持版,推荐主力使用 |
Ubuntu 22.04 LTS | wsl --install -d Ubuntu-22.04 | 稳定性最高,兼容性好 |
Ubuntu 20.04 LTS | wsl --install -d Ubuntu-20.04 | 适合旧项目、TensorFlow 1.x 等 |
Debian GNU/Linux | wsl --install -d Debian | 小巧干净,几乎无预装包 |
Kali Linux | wsl --install -d Kali-Linux | 安全渗透测试工具集成版 |
openSUSE Leap 15.6 | wsl --install -d openSUSE-Leap-15.6 | 稳定企业级版本 |
Fedora Remix for WSL | wsl --install -d Fedora-Remix | 由 Whitewater Foundry 发布,接近 Fedora 原版 |
AlmaLinux 9 | wsl --install -d AlmaLinux-9 | CentOS 替代方案之一 |
Rocky Linux 9 | wsl --install -d RockyLinux-9 | 企业服务器兼容 RHEL |
Oracle Linux 9 | wsl --install -d OracleLinux-9 | Oracle 官方维护 |
Pengwin(付费) | wsl --install -d Pengwin | 专为 WSL 优化的商业发行版 |
Arch Linux | wsl --install -d Arch 或通过 wsldl 项目 手动安装 | 适合高阶用户 |
Alpine Linux | wsl --install -d Alpine | 超轻量(只有几十 MB),非常适合容器或测试 |
💡 提示:执行
wsl --list --online
可以直接查看系统当前支持的所有官方发行版列表。
🧰 二、命令行查看和安装发行版
查看可用发行版:
wsl --list --online
输出示例:
以下是可安装的有效分发:
NAME FRIENDLY NAME
Ubuntu-24.04 Ubuntu 24.04 LTS
Ubuntu-22.04 Ubuntu 22.04 LTS
Debian Debian GNU/Linux
Kali-Linux Kali Linux
openSUSE-Leap-15.6 openSUSE Leap 15.6
Fedora-Remix Fedora Remix for WSL
Alpine Alpine Linux
安装发行版:
wsl --install -d <NAME>
例如:
wsl --install -d Debian
💾 三、安装第三方 / 自定义发行版(离线导入)
你可以下载 .tar
根文件系统镜像(RootFS),然后导入为 WSL 实例:
wsl --import MyLinux D:\WSL\MyLinux rootfs.tar
-
MyLinux
→ 自定义发行版名称 -
D:\WSL\MyLinux
→ 安装位置 -
rootfs.tar
→ 从 Docker Hub 或官方仓库导出的根文件系统镜像
示例资源:
-
ArchWSL
-
Alpine WSL
-
Gentoo WSL
🧠 四、查看当前安装的发行版与状态
wsl --list --verbose
示例输出:
NAME STATE VERSION
* Ubuntu-24.04 Running 2Debian Stopped 2docker-desktop Running 2
💡 五、推荐使用场景
场景 | 推荐发行版 |
---|---|
普通开发 / AI 研究 | Ubuntu 24.04 / 22.04 |
安全渗透测试 | Kali Linux |
企业部署 / 稳定环境 | Debian / AlmaLinux / Rocky |
极简容器测试 | Alpine |
自定义极客环境 | Arch Linux |
wsl --list --online
以下是可安装的有效分发的列表。
使用“wsl.exe --install <Distro>”安装。NAME FRIENDLY NAME
AlmaLinux-8 AlmaLinux OS 8
AlmaLinux-9 AlmaLinux OS 9
AlmaLinux-Kitten-10 AlmaLinux OS Kitten 10
AlmaLinux-10 AlmaLinux OS 10
Debian Debian GNU/Linux
FedoraLinux-42 Fedora Linux 42
SUSE-Linux-Enterprise-15-SP6 SUSE Linux Enterprise 15 SP6
SUSE-Linux-Enterprise-15-SP7 SUSE Linux Enterprise 15 SP7
Ubuntu Ubuntu
Ubuntu-24.04 Ubuntu 24.04 LTS
archlinux Arch Linux
kali-linux Kali Linux Rolling
openSUSE-Tumbleweed openSUSE Tumbleweed
openSUSE-Leap-16.0 openSUSE Leap 16.0
Ubuntu-20.04 Ubuntu 20.04 LTS
Ubuntu-22.04 Ubuntu 22.04 LTS
OracleLinux_7_9 Oracle Linux 7.9
OracleLinux_8_10 Oracle Linux 8.10
OracleLinux_9_5 Oracle Linux 9.5
openSUSE-Leap-15.6 openSUSE Leap 15.6C:\Users\VISION16Pro>wsl --install -d Debian
无法从“https://raw.githubusercontent.com/microsoft/WSL/master/distributions/DistributionInfo.json”提取列表分发。操作超时
错误代码: Wsl/InstallDistro/0x80072ee2C:\Users\VISION16Pro>wsl --install -d Debian
正在下载: Debian GNU/Linux
正在安装: Debian GNU/Linux
已成功安装分发。可以通过 “wsl.exe -d Debian” 启动它
正在启动 Debian...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: user
New password:
Retype new password:
passwd: password updated successfully
usermod: no changes
在 Ubuntu 24.04 上安装 SSH 服务(即 OpenSSH Server)非常简单,按以下步骤即可:
✅ 一、安装 OpenSSH Server
sudo apt update
sudo apt install -y openssh-server
✅ 二、查看 SSH 服务状态
安装完成后,SSH 服务通常会自动启动。
你可以用以下命令检查状态:
sudo systemctl status ssh
如果看到类似:
Active: active (running)
表示 SSH 正在运行。
若没启动,可手动启动:
sudo systemctl start ssh
✅ 三、设置开机自启(可选)
sudo systemctl enable ssh
✅ 四、确认端口监听
默认端口是 22,可以用以下命令确认:
sudo ss -tlnp | grep ssh
或
netstat -tlnp | grep ssh
应看到:
LISTEN 0 128 0.0.0.0:22 ...
✅ 五、从其他设备连接
假设 Ubuntu 的 IP 是 192.168.1.88
,
则在其他机器上可以连接:
ssh username@192.168.1.88
例如:
ssh ubuntu@192.168.1.88
✅ 六、(可选)修改 SSH 配置
编辑配置文件:
sudo nano /etc/ssh/sshd_config
常见修改项:
Port 22 # 修改为其他端口增强安全性
PermitRootLogin no # 禁止 root 直接登录
PasswordAuthentication yes # 启用密码登录(若需要)
保存后重启服务:
sudo systemctl restart ssh
✅ 七、防火墙放行(如果启用了 UFW)
sudo ufw allow ssh
sudo ufw reload
可以连上 了,但是运行nvidia-smi报错,但是在wsl窗口中输入nvidia-smi正常运行
把下面两行 CUDA 环境变量加在 .bashrc
最底部 是正确
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
这是因为 WSL 的 GPU 访问权限 只自动绑定到本地控制台会话(WSL 内核进程启动时的那一份环境),
而通过 SSH 进入时属于一个新的 login session,没有默认继承 GPU 设备访问映射。
🧩 现象重现
你 SSH 登录后执行:
nvidia-smi
报错类似:
NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver.
Make sure that the latest NVIDIA driver is installed and running.
而在 WSL 控制台内执行是正常的。
✅ 解决方案 1:添加 GPU 权限映射(推荐)
1️⃣ 编辑 /etc/wsl.conf
sudo nano /etc/wsl.conf
添加(如果没有则新建):
[boot]
systemd=true[automount]
enabled=true
options="metadata"[interop]
appendWindowsPath=true[gpu]
enabled=true
保存后退出。
2️⃣ 在 Windows PowerShell 执行:
wsl --shutdown
然后重新进入 WSL:
wsl
3️⃣ 测试
在本地和 SSH 方式下分别执行:
nvidia-smi
现在两者都应正常输出 GPU 信息。
✅ 解决方案 2:通过 SSH 时显式导入 NVIDIA 环境变量
如果不想重启,可以直接让 SSH 会话加载 GPU 驱动路径。
1️⃣ 在 SSH 登录用户的 .bashrc
里添加:
export PATH=/usr/lib/wsl/lib:$PATH
export LD_LIBRARY_PATH=/usr/lib/wsl/lib:$LD_LIBRARY_PATH
2️⃣ 然后执行:
source ~/.bashrc
nvidia-smi
这会强制让 SSH 会话加载 /usr/lib/wsl/lib
中的 GPU stub 库。
✅ 解决方案 3:确认驱动支持
在 Windows 中运行:
nvidia-smi
并确认驱动版本 ≥ WDDM 3.0 且 CUDA 11.8+
(即驱动版本 510+)。
WSL 仅支持这些新驱动用于 GPU 直通。
✅ 解决方案 4:验证 GPU 设备可见
在 SSH 会话中运行:
ls /dev/dxg
若输出:
/dev/dxg
说明 GPU 已被 WSL 映射。
如果没有,则说明当前 session 未加载 GPU 子系统(需要重启 wsl
)。
✅ 一句话总结
现象 | 原因 | 解决方案 |
---|---|---|
只能在本地 WSL 用 nvidia-smi | SSH 会话未继承 GPU 环境 | 编辑 /etc/wsl.conf 或 .bashrc 加载 /usr/lib/wsl/lib |
nvidia-smi 报 driver not found | PATH/LD_LIBRARY_PATH 不含 NVIDIA 库 | 在 .bashrc 添加路径 |
/dev/dxg 不存在 | WSL GPU 未初始化 | wsl --shutdown 后重启 |
user@3090PC:~$ ip addr | grep "inet " | grep eth0
inet 172.19.38.193/20 brd 172.19.47.255 scope global eth0
现在你已经找到了 WSL 的真实 IP:
172.19.38.193
接下来只要让 Windows 的端口转发规则指向这个 IP 就可以彻底解决 Connection reset
问题。
✅ 操作步骤(请在 Windows PowerShell 管理员模式下执行)
1️⃣ 删除旧规则
netsh interface portproxy delete v4tov4 listenport=2222 listenaddress=0.0.0.0
2️⃣ 建立新的映射(指向 WSL 的实际 IP)
netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=22 connectaddress=172.19.38.193
3️⃣ 放行防火墙(如果之前没有)
netsh advfirewall firewall add rule name="WSL SSH (2222)" dir=in action=allow protocol=TCP localport=2222
4️⃣ 验证映射是否生效
netsh interface portproxy show all
你应当看到:
Listen on ipv4: Connect to ipv4:
Address Port Address Port
--------------- ---------- --------------- ----------
0.0.0.0 2222 172.19.38.193 22
✅ 测试连接
在局域网其他机器或本机测试:
ssh user@内网IP -p 2222
💡 现在转发会直接进入 WSL 的 172.19.38.193:22 接口,
不再经过 127.0.0.1 环回层,因此不会再出现 “Connection reset”。
✅ (可选)设置自动刷新脚本
由于每次重启 WSL 时 IP 可能会变化,
你可以创建一个脚本自动更新 portproxy 规则:
$wsl_ip = (wsl hostname -I).Trim()
netsh interface portproxy reset
netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=22 connectaddress=$wsl_ip
Write-Host "WSL IP = $wsl_ip 已映射至端口 2222"
保存为 C:\Users\admin\fix-wsl-ssh.ps1
,
以后每次 WSL IP 变化时执行这段脚本即可自动恢复连接。