文章目录
- 前言
- WSL2安装(手动安装)
- WSL2基础使用
- VS Code与WSL2配合使用
- 连接USB设备
- WSL2中使用GPU(RTX5060Ti 16G)
- 与虚拟机兼容使用(Virtual Box)
- 图形与桌面环境
- WSL消失(灾难性故障)问题
- 后记
前言
因为学习需要配了一台电脑,需要在Ubuntu下调用显卡,但是平时很多时候又都需要使用Windows。有一种做法是装双系统,需要用哪个就在启动时选哪个。还有一种做法是使用使用Windows自带的WSL(目前新版本叫做WSL2),它可以在Windows计算机上运行Linux环境。
WSL这种方式相比VMware和VirtualBox虚拟机来说轻量些,并且还有一个比较大的优势是可以调用显卡。
Windows Subsystem for Linux 文档
WSL2安装(手动安装)
WSL2安装对系统版本和硬件功能开启有一定要求,系统版本通常新一点就可以,硬件的话通常配置不是太差就行。下图是我这里的用的系统和硬件信息:
理论上如果系统版本和网络没有问题的话用管理员方式运行PowerShell或者CMD,使用 官方方法 一个命令就可以安装:
# 安装默认Linux发行版
wsl --install# 列出可用的Linux发行版
# wsl --list --online
# 列表中Ubuntu通常指的是最新的Ubuntu版本
# 安装指定Linux发行版
# wsl --install <Distribution Name>
不过我这边安装Ubuntu24.04一直卡着没有进度,就用下面方法进行手动安装:
https://learn.microsoft.com/zh-cn/windows/wsl/install-manual
首先用管理员方式运行PowerShell,启用下面功能:
# 启用适用于 Linux 的 Windows 子系统
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
# 启用虚拟机功能
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
另外还需要启动Hyper-V功能:
接下来下载并安装合适的内核包并进行安装:
x64:https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
arm64:https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_arm64.msi
然后PowerShell中使用命令将WSL2设置为默认版本:
wsl --set-default-version 2
接下来可以去商店下载安装合适的Linux发行版包,不过我就是因为这里下载慢才选择手动安装的,所以这个发行版包也选择手动下载发行版的AppxBundle包。浏览器直接下载慢的话可以用下载工具进行下载,比如用 Motrix 进行下载。我这里用的Ubuntu2404-240425版本,其他版本也可以在前面官方文档中找到:
https://wslstorestorage.blob.core.windows.net/wslblob/Ubuntu2404-240425.AppxBundle
下载完成后双击 .AppxBundle
格式文件就会弹出提示进行安装(这需要有Microsoft Store,可能还需要打开开发者选项):
安装完成后就和普通Linux系统一样,第一次进入时需要设置用户名密码:
按照上面流程安装后可以在开始菜单的应用中找到相关内容:
Ubuntu 24.04LTS就是刚安装的Linux了。WSL Settings是WSL的管理界面(这里可以设置分配给Linux的核心数、内存大小、运行保留时间等):
前面是直接双击 .AppxBundle
进行安装的,其实也可以把这个文件重命名为 .zip
文件,然后选择其中合适的 .appx
文件双击进行安装。这两种方式没有太本质上的区别,默认都是安装到用户目录下的。
更进一步的可以把 .appx
再命名为 .zip
,在把它解压到某个目录下,然后双击其中的 ubuntu.exe
进行安装,这样安装好后的系统就在该目录下。默认情况下WSL一个版本的Linux只能安装一个,这里使用22.04版本进行演示。安装完成后 ext4.vhdx
文件就是系统文件了:
另外有个工具 LxRunOffline 可以让你安装多个同样系统的WSL:
https://github.com/DDoSolitary/LxRunOffline
WSL2基础使用
WSL2一定程度上也是一个虚拟机,其资源管理等可以在前面的 WSL Settings 中进行设置。
WSL2中Linux实例本身使用有比较多的方式,最灵活的是在PowerShell或者CMD中通过命令来使用,一些常见的命令如下
# 帮助信息
wsl --help# 列出已安装的Linux发行版和运行状态
wsl --list --verbose
wsl -l -v# 设置默认WSL版本 1 或 2
wsl --set-default-version <Version>
# 设置默认Linux发行版
wsl --set-default <Distribution Name>
# 检查WSL状态
wsl --status# 运行默认的Linux发行版并打开当home目录
wsl ~
# 运行默认的Linux发行版并打开当前目录
wsl
# 运行默认Linux发行版
wsl -d <Distribution Name>
# 关闭所有正在运行的Linux发行版
wsl --shutdown
# 关闭指定的Linux发行版
wsl --terminate <Distribution Name># 更新WSL
wsl --update
在虚拟机中可以用 logout
退出,或者用 sudo shutdown now
关闭当前虚拟机。当然只是退出不关闭,在没有一些特殊的处理的情况下,WSL也会在VM空闲超时后关闭虚拟机。这在一些场景下是不合适的,可以使用下面工具开启虚拟的终端来处理这个问题:
《Linux笔记:终端复用与管理工具screen和tmux》
实际使用时可能在WSL2中只有tmux有用。
虚拟机运行时会挂载Windows的盘,通常是 /mnt/c
,反过来可以在Windows中访问虚拟机的文件系统,在Windows文件系统中访问 \\wsl$
即可:
虚拟机的网络在 WSL Settings 中默认配置为NAT模式,可以使用 wsl hostname -I
查看虚拟IP,在虚拟机中可以使用 ip route show | grep -i default | awk '{ print $3}'
来查看Windows的IP。Windows访问虚拟机中的网络应用可以使用 localhost
,虚拟机访问Windows中的网络应用可以使用前面虚拟机中查看的Windows的IP。
WSL安装的虚拟机默认是在用户目录下的,可以使用下面的命令导出导入以及移动位置等:
# 导出为 .tar 文件
wsl --export <Distribution Name> <FileName># 导入 .tar 文件为新的发行版
wsl --import <Distribution Name> <InstallLocation> <FileName>
# 导出再导入后可能默认就变成了root用户,可以修改/etc/wsl.conf文件来设置为原来的用户
# [user]
# default=user_name# 注销卸载Linux发行版
wsl --unregister <DistributionName>
# 用上面命令卸载后会有残留,需要去开始菜单所有应用中右键再进行卸载# 移动到指定位置
wsl --manage <Distribution Name> --move <Location>
除了上面一些内容,安装的一个个Linux发行版本身的一些使用是Linux自身的事情,比如使用下面命令来更新系统:
sudo apt update && sudo apt upgrade
# 需要正式使用前通常上面是必须的
另外提一嘴,也微软商店中安装Windows Terminal,可以在里面方便的打开虚拟机终端:
VS Code与WSL2配合使用
用WSL2很多时候都是为了开发,开发的话目前比较流行编辑器是 VS Code 。WSL2下使用VS Code方式比较多,这里最方便的应该是Windows上安装VS Code,然后安装 Remote Development
扩展。这样在虚拟机中就可以直接用 code .
连接USB设备
WSL2中连接主机的USB设备目前依赖一个开源工具:
https://learn.microsoft.com/zh-cn/windows/wsl/connect-usb
https://github.com/dorssel/usbipd-win
下载安装工具,然后用管理员权限用下面命令查看USB设备总线ID,选择和USBIP共享:
# usbipd --help
usbipd list
usbipd bind --busid=<BUSID>
# 后面如果attach有问题这里绑定时可能需要在加--force
# usbipd unbind --busid=<busid>
接下来需要启动WSL2,然后将USB设备连接过去,这里文档说是不需要管理员方式去连接,但是有可能失败,可以再换管理员账户试试:
usbipd attach --wsl --busid=<BUSID>
# usbipd detach --busid=<BUSID>
# 需要注意的是如果要拔出USB设备,一定要先用命令断开连接,不然有可能之后再连会连不上,需要重启电脑(或者说重启下服务)
连接后可以在Linux中看到USB设备:
# sudo apt install usbutils
lsusb
USB设备在Linux中使用可能还会又别的问题,可以参考下面情况:
https://blog.csdn.net/G_C_H/article/details/125939941
WSL2中使用GPU(RTX5060Ti 16G)
本来这个是要花点时间的,不过当前版本下按照前面方式安装好Linux,应该直接就可以看到显卡,使用 nvidia-smi
命令进行查看:
如果有问题可以尝试更新显卡驱动或是参考下面链接:
https://docs.nvidia.com/cuda/wsl-user-guide/index.html
https://learn.microsoft.com/zh-cn/windows/wsl/tutorials/gpu-compute
与虚拟机兼容使用(Virtual Box)
这个以前也是个大问题,现在(VirtualBox-7.1.10)就没什么困扰了,不需要特别的设置直接可以共存:
Oracle VirtualBox can be used on a Windows host where Hyper-V is running. This is an experimental feature.
No configuration is required. Oracle VirtualBox detects Hyper-V automatically and uses Hyper-V as the virtualization engine for the host system. The CPU icon in the VM window status bar indicates that Hyper-V is being used.
https://www.virtualbox.org/manual/topics/AdvancedTopics.html#hyperv-support
以前6.x版本时还是实验功能,需要手动启动,并且微软一会开发接口,一会又不开放了:
#指定vbox下的虚拟系统开启这个功能
./VBoxManage.exe setextradata "<虚拟机名字>" "VBoxInternal/NEM/UseRing0Runloop" 0#或指定vbox所有虚拟系统开启
./VBoxManage.exe setextradata global "VBoxInternal/NEM/UseRing0Runloop" 0
图形与桌面环境
使用Linux有些特定的场景下会有需要用图形界面的需求,以前的话通常安装桌面环境,然后通过远程方式去访问。不过现在来说WSL2已经可以不安装桌面环境就用使用这些带图形界面的软件了:
https://learn.microsoft.com/zh-cn/windows/wsl/tutorials/gui-apps
软件可以通过Linux中命令打开,也可以在开始菜单应用中打开:
如果还需要桌面环境的话可以通过下面方式安装(这里只是简单测试,还有很多问题没有处理):
sudo apt update & sudo apt upgrade# 安装桌面环境
sudo apt install ubuntu-desktop -y
# sudo apt install gnome-software
# sudo apt install gnome-tweaks
# sudo apt install gnome-shell-extensions# 安装远程桌面服务
sudo apt install xrdp -y# 修改远程桌面服务端口号(默认:3389需要改成其他的,比如3390)
vim /etc/xrdp/xrdp.ini# sudo adduser xrdp ssl-cert
sudo systemctl restart xrdp
# sudo systemctl status xrdp
# 重启Linux后可能需要重启xrdp# 配置防火墙
# sudo apt install ufw
# sudo ufw allow 3389# 需要注意的是远程桌面连接可能需要Linux新建一个用户进行连接,不然可能会闪退
打开Windows自带的远程桌面工具可以远程操作了( localhost:3389
):
WSL消失(灾难性故障)问题
WSL2用着用着某一天突然间发现不见了。重新走安装流程或者提示安装完成,但没用;或者提示灾难性故障。目前猜测可能是WSL组件自动失败引起的。
尝试了可以在 设置>应用 中完全卸载所安装的Linux虚拟机以及WSL组件。关闭 Windows功能 ( Win+R
,输入 OptionalFeatures
回车)中相关功能。在从项目地址( https://github.com/microsoft/WSL )下载完整的WSL组件进行安装。安装完成后重新打开 Windows功能 中相关功能。这样一套下来就可以恢复正常使用了。
相关内容也可以参考:https://blog.csdn.net/m0_62815143/article/details/141285504
后记
目前来说WSL2使用起来已经比较方便了,虽然也存在很多问题,但是毕竟在原生系统和虚拟机之间提供了更多的可能性,对于很多应用场景下这个确实是比较合适的方案。