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 或官方仓库导出的根文件系统镜像

示例资源:


🧠 四、查看当前安装的发行版与状态

复制代码
wsl --list --verbose

示例输出:

复制代码
  NAME             STATE           VERSION
* Ubuntu-24.04     Running         2
  Debian           Stopped         2
  docker-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.6

C:\Users\VISION16Pro>wsl --install -d Debian
无法从"https://raw.githubusercontent.com/microsoft/WSL/master/distributions/DistributionInfo.json"提取列表分发。操作超时
错误代码: Wsl/InstallDistro/0x80072ee2

C:\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.0CUDA 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 变化时执行这段脚本即可自动恢复连接。

相关推荐
Mr.45675 小时前
Windows 11 右键菜单恢复 Windows 10 经典样式:3 种实用方法详解
windows
一勺-_-5 小时前
安装Windows双系统的步骤
windows
sukalot7 小时前
windows显示驱动开发-多监视器管理器(三)
windows·驱动开发
Java技术实践9 小时前
JPA 用 List 入参在 @Query中报错 unexpected AST node: {vector}
数据结构·windows·list
wangqiaowq9 小时前
ImmutableList.of() 是 Google Guava 库 提供的一个静态工厂方法,用于创建一个不可变的(immutable)列表。
开发语言·windows·python
小龙报10 小时前
《算法每日一题(1)--- 连续因子》
c语言·开发语言·c++·windows·git·算法·visual studio
日日行不惧千万里10 小时前
绕过微软联网账号限制:用本地用户安装 Windows 11 的最新 3 种方法
windows·microsoft
java_logo11 小时前
Docker 部署 MinIO 全指南
运维·windows·mongodb·docker·容器
黄雄进11 小时前
Windows使用docker安装milvus的配置文件
windows·docker·milvus