前段时间由于经常需要在win环境下工作,同时需要使用服务器,再使用双系统ubuntu多多少少有些不方便,所以接触到了wsl这个轻量级虚拟机,感觉非常好用。但是wsl本身是不支持USB设备的,所以需要操作一下来使用接入win的USB设备。
本文大部分内容来自微软官方文档:连接 USB 设备 | Microsoft Learn
首先实现这个的先决条件是:
- 运行 Windows 11 (内部版本 22000 或更高版本) 。 (可提供 Windows 10 支持)
- 需要具有 x64/x86 处理器的计算机。 (arm64 目前不支持 usbipd-win) 。
- Linux 发行版已安装并设置为 WSL 2。
- 运行 Linux 内核 5.10.60.1 或更高版本。
win10版本可以参考官网相关部分,我这里是win11、wsl2、ubuntu18.04都满足上述要求。
若要检查 Windows 版本及内部版本号,选择 Windows 徽标键 + R,然后键入“winver”,选择“确定” 。 可通过选择“开始”>“设置”>“Windows 更新”>“检查更新”来更新到最新的 Windows 版本。 若要检查 Linux 内核版本,请打开 Linux 发行版并输入命令:uname -a
。 若要手动更新到最新内核,请打开 PowerShell 并输入命令:“wsl --update”。
一、安装 USBIPD-WIN 项目
需要安装开源 usbipd-win 项目。
下载软件 usbipd-win 项目的最新发布页。
或者,使用命令 安装 usbipd-win(win命令行运行)
winget install --interactive --exact dorssel.usbipd-win
二、在 Linux 中安装 USBIP 工具和硬件数据库
在wsl中的ubuntu运行:
sudo apt install linux-tools-generic hwdata
sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/*-generic/usbip 20
三、添加USB设备到ubuntu
在添加之前,首先保证wsl中的ubuntu系统在运行中
通过以管理员模式打开 PowerShell 并输入以下命令(win系统命令行):
usbipd wsl list
这里我一开始没有用管理员权限的Powershell运行的的代码(主要觉得管理员模式下窗口UI太丑)直接打开PowerShelll用的,报错usbipd:无法将“usbipd”项识别为cmdlet、函数、脚本文件或可运行程序的名称........
这个报错让我怀疑是不是之前没有装好usbipd,重装来重装去还是没有解决,最后发现只要是进入管理员权限就好了。
后来试了一下,win+R输入cmd出来的命令行没问题也可以使用。
最后一步就是用这个命令将设备添加到wsl中(win命令行):
usbipd wsl attach --busid <busid>
这个busid就是之前使用list那行指令查询出来的USB设备列表里的首列数据,比如我的三个USB设备对应1-5 1-7 1-8.
最后命令输入就类似于usbipd wsl attach --busid 1-5 这样。
最后可以在ubuntu里面使用lsusb查看一下设备是否添加进来了。