USB/IP
来自 USB/IP 网站
- USB/IP 项目旨在开发一个通用的 USB 设备通过 IP 网络共享系统。为了在计算机之间共享 USB 设备的全部功能,USB/IP 将 “USB I/O 消息” 封装到 TCP/IP 负载中,并在计算机之间传输。
安装
用法
服务器设置
服务器应连接物理 USB 设备,并加载 usbip_host
USB/IP 内核模块。然后 启动 并 启用 USB/IP systemd 服务 usbipd.service
。守护进程将在 TCP 端口 3240 上接受连接。
列出已连接的设备
$ usbip list -l
绑定所需的设备。例如,要共享 busid 为 1-1.5 的设备
# usbip bind -b 1-1.5
要解绑设备
# usbip unbind -b 1-1.5
绑定后,可以从客户端访问该设备。
绑定到 systemd 服务
为了使绑定持久化,可以使用以下 systemd 模板单元文件
/etc/systemd/system/usbip-bind@.service
[Unit] Description=USB-IP Binding on bus id %I After=network-online.target usbipd.service Wants=network-online.target Requires=usbipd.service #DefaultInstance=1-1.5 [Service] Type=simple ExecStart=/usr/bin/usbip bind -b %i RemainAfterExit=yes ExecStop=/usr/bin/usbip unbind -b %i Restart=on-failure [Install] WantedBy=multi-user.target
因此,例如,要共享 busid 为 1-1 的设备,应该 启动/启用 usbip-bind@1-1.service
。
客户端设置
确保 vhci-hcd
内核模块 已加载。
然后列出服务器上可用的设备
$ usbip list -r server_IP_address
连接所需的设备。例如,要连接 busid 为 1-1.5 的设备
$ usbip attach -r server_IP_address -b 1-1.5
--tcp-port 端口号
。断开设备连接
只有在客户端分离设备后才能断开设备连接。
列出已连接的设备
$ usbip port
分离设备
$ usbip detach -p port_number
在服务器上解绑设备
$ usbip unbind -b busid
技巧与提示
通过供应商/设备 ID 绑定
如果总线 ID 不一致且在每次系统启动时动态分配,则可以替代地使用通过供应商/设备 ID 绑定
/etc/systemd/system/usbip-bind@.service
[Unit] Description=USB-IP Binding device id %I After=network-online.target usbipd.service Wants=network-online.target Requires=usbipd.service [Service] Type=simple ExecStart=/bin/sh -c "/usr/sbin/usbip bind --$(/usr/sbin/usbip list -p -l | grep '#usbid=%i#' | cut '-d#' -f1)" RemainAfterExit=yes ExecStop=/bin/sh -c "/usr/sbin/usbip unbind --$(/usr/sbin/usbip list -p -l | grep '#usbid=%i#' | cut '-d#' -f1)" Restart=on-failure [Install] WantedBy=multi-user.target
因此,例如,要共享供应商/设备 ID 为 0924:3d68 的设备,应该 启动/启用 usbip-bind@0924:3d68.service
。
然后客户端设置将如下所示
- Linux 客户端
$ usbip attach -r server_IP_address --$(/usr/sbin/usbip list -p -r server_IP_address | grep '#usbid=0924:3d68#' | cut '-d#' -f1)
usbip list -p -r server_IP_address
中的 -p 标志是否正常工作。如果不是,请改用以下行$ usbip attach -r server_IP_address -b $(/usr/sbin/usbip list -p -r server_IP_address | grep '0924:3d68' | cut '-d:' -f1 | awk '{print $1}')
- Windows 客户端
c:\> for /f "tokens=1 delims=:, " %a in ('usbip list -r server_IP_address ^| findstr /r /c:"0924:3d68"') do start usbip attach -r server_IP_address -b %a
共享通过 /etc/.. 中的文件配置的设备
usbip-systemdAUR 提供了 systemd 服务文件,用于通过供应商/设备 ID 绑定以及通过主机名和供应商/设备 ID 连接。
服务器设置
对于每个设备,在 /etc/usbip/bind-devices/
中创建一个 device.conf,并将 USBIP_DEVICE 设置为供应商/产品 ID,例如
/etc/usbip/bind-devices/example-device.conf
USBIP_DEVICE=0924:3d68
要绑定配置的设备,启动/启用 服务 usbip-bind@example-device.service
客户端设置
对于每个主机/设备,在 /etc/usbip/remote-devices/
中创建一个 device.conf,并将 HOST 设置为主机名,USBIP_DEVICE 设置为供应商/产品 ID,例如
/etc/usbip/remote-devices/example-device.conf
USBIP_HOST=example-host USBIP_DEVICE=0924:3d68
确保您的服务器正在运行并且配置的设备已绑定,然后 启动 或 停止 服务 usbip@example-device.service