USB/IP是一种基于网络的设备共享机制,可将电脑A(server端)连接的USB设备通过网络共享给远程电脑B(client端)
USB/IP有很多的实现方式(程序),除了下文中使用的免费程序,还有商用程序:
- USB Network Gate
- FlexiHub
- VirtualHere
- USB over Network
更多见这篇文章
Server端(电脑A,连接USB设备)
Windows
PS:本文选取的windows上的开源软件为usbip-win,安装配置方法也可以看官方README
安装
-
双击文件
usbip_test.pfx
准备导入证书。证书需要导入两遍,分别导入到“受信任的根证书颁发机构”和“受信任的发布者” -
以管理员身份打开CMD或者PowerShell,进入软件所在目录,运行命令开启测试签名
bcdedit.exe /set TESTSIGNING ON
-
开放usbip所需端口:默认端口是3240,到防火墙中的入站
- 也可以用其他端口,后续配置的时候需要使用这个端口
- 也可以用其他端口,后续配置的时候需要使用这个端口
-
重启电脑
-
(可选)下载最新的usb.ids,替换软件所在目录的usb.ids文件。
- 每个USB设备都有自己ID(类似网络的IP地址),而usb.ids(类似DNS服务器)中记录了所有已知的USB设备ID对应的名称(分成供应商名称和设备名称,类似网站域名),方便后续快速识别USB设备。
- 但是由于USB设备在不停出新,较新的USB设备的ID并没有在usb.ids中记录过,因此在后续的识别过程中会显示“unknown product”等字样,表示在usb.ids文件中没有相关记录。这不用担心,找不到记录也是可以用的,只不过不方便我们识别罢了
配置
-
以管理员身份打开CMD或者PowerShell,进入软件所在目录
-
将USB设备连接到电脑,然后使用命令
.\usbip.exe list -l
列出所有识别到的USB设备- 显示“unknown product”是因为在usb.ids文件中没有相关记录,只影响你对USB设备的识别,不影响后续操作
- 我这里显示了五个USB设备(每个“-”表示一个设备)
-
找到自己想要远程共享的USB设备,记录下它的busid,格式为
[数字]-[数字]
- 如果识别不到的话,可以在USB设备连接前后分别运行上面的命令
- 假设我想要远程共享的设备是第四个带SATA字样的USB设备(我的移动硬盘),它的busid为
1-181
-
将USB设备绑定至usbip
- 注意,绑定后,本地电脑就不能使用这个USB设备了
.\usbip.exe bind -b [busid] # 例如我这儿就是 .\usbip.exe bind -b 1-181
-
启动usbipd服务
.\usbipd.exe -d -4 # 如果想用其他端口,且安装的时候配置过防火墙 .\usbipd.exe -d -4 -tPORT [端口]
-
使用完成后,可以将USB设备跟usbip解绑
.\usbip.exe unbind -b [busid]
然后还需要到“设备和打印机”中,找到连接的USB设备,将所有“USB/IP STUB”卸载,最后重新拔插USB设备
-
如果不需要usbip了,可以关闭测试签名,然后重启
bcdedit.exe /set TESTSIGNING OFF
Linux
安装
仅在Ubuntu上测试,其他发行版需要自己查资料(应该是差不多的)
- 以root权限运行如下命令
apt install linux-tools-`uname -r` linux-cloud-tools-`uname -r` linux-tools-common # 下面两个不确定要不要安装,但是我都装了 apt install linux-tools-generic linux-cloud-tools-generic
配置
- 加载相关的内核模块:
- 不确定重启电脑后需不需要再次加载
sudo modprobe usbip-core sudo modprobe vhci-hcd sudo modprobe usbip_host
- 关闭防火墙:
ufw disable
- 或者在防火墙中开启3240端口的TCP连接
以下操作根window很像,具体细节&图片见上面windows的配置过程
- 将USB设备连接到电脑,然后使用命令
usbip list -l
列出所有识别到的USB设备 - 找到自己想要远程共享的USB设备,记录下它的busid,格式为
[数字]-[数字]
- 将USB设备绑定至usbip
usbip bind -b [busid] # 例如 usbip bind -b 1-181
- 启动usbipd服务
usbipd -d -4 # 如果想用其他端口,且安装的时候配置过防火墙 usbipd -d -4 -tPORT [端口]
- 使用完成后,可以将USB设备跟usbip解绑
usbip unbind -b [busid]
Client端(电脑B)
Windows
PS:安装配置方法也可以看官方README
安装方式与上面server端几乎一样,只是多了一个步骤
- 安装VHCI驱动:以管理员身份打开CMD或者PowerShell,进入软件所在目录,运行如下命令
如果后续不需要了,可以把驱动卸载了usbip.exe install
usbip.exe ubinstall
配置
-
以管理员身份打开CMD或者PowerShell,进入软件所在目录
-
查看电脑A上可用的USB设备
usbip.exe list --remote [电脑A的IP]
-
USB 设备绑定至本机
usbip.exe attach --remote=[电脑A的IP] --busid=[想要绑定设备的busid]
-
查看已经绑定的远程USB设备
usbip.exe port
-
将已经绑定的远程USB设备解绑:端口来自命令
usbip port
输出中"Port"后面的数字usbip.exe detach -p [端口]
Linux
安装方式与server端一样
配置
-
查看电脑A上可用的USB设备
usbip list --remote [电脑A的IP]
-
USB 设备绑定至本机
usbip attach --remote=[电脑A的IP] --busid=[想要绑定设备的busid]
-
查看本机USB设备,应该能看到绑定好的USB设备
lsusb
例如
-
查看已经绑定的远程USB设备
usbip port
-
将已经绑定的远程USB设备解绑:端口来自命令
usbip port
输出中"Port"后面的数字usbip detach -p [端口]
参考连接
Linux 系统使用 USB/IP 远程共享 USB 设备
USB/IP PROJECT
Linux usb 5. usbip (USB Over IP) 使用实例
USB/IP for Windows