最近项目中采用的分布式视频控制系统,视频采用的是rtsp协议,分布式坐席(kvm)功能将输出节点的鼠标键盘的控制信号发送的输入节点的pc主机上,进行远程控制,实现网络kvm的功能。具体实现原理应该就是usb over ip方式,但怎么实现一直没有理解。今天找到一个开源软件usb/ip,基本原理、功能有点类似。
下面是使用电脑主机的usb无线鼠标远程控制树莓派的桌面,效果还不错(局域网),鼠标基本上感觉不到延时!
一、电脑主机作为服务器:
(1)安装usbip软件
sudo apt-get install usbip
(2)安装3个模块
sudo modprobe usbip-core usbip-host usbip-vudc
查看:lsmod | grep usbip
也可添加到:/etc/modules 每次开机自启
(3)查看电脑主机上的usb设备
usbip list -l
- busid 1-4 (046d:c52b)
Logitech, Inc. : Unifying Receiver (046d:c52b)
- busid 1-6 (5986:2113)
Acer, Inc : unknown product (5986:2113)
- busid 1-8 (06cb:00a2)
Synaptics, Inc. : unknown product (06cb:00a2)
(4)启动服务,并把usb设备添加到usbip中去:可以添加多个
usbipd -D &
sleep 1
usbip bind -b 1-4 #1-4就是上面的编号,无线usb鼠标
(5)解除绑定usb设备
sudo usbip unbind -b 1-4
二、树莓派作为客户端:
(1)安装usbip软件
sudo apt-get install usbip
(2)安装模块
sudo modprobe vhci_hcd #也就是:USB Virtual Host Controller Interface
查看:lsmod | grep vhci_hcd
也可添加到:/etc/modules 每次开机自启
(3)查看远端服务器电脑主机上的usb设备
usbip list -r 192.168.1.1
Exportable USB devices
======================
- 192.168.1.1
1-4: Logitech, Inc. : Unifying Receiver (046d:c52b)
: /sys/devices/pci0000:00/0000:00:14.0/usb1/1-4
: (Defined at Interface level) (00/00/00)
(4)将远端服务器电脑主机上的usb设备添加到本地
usbip attach -r 192.168.1.1 -b 1-4
lsusb #可以查看到本地已经添加上无线鼠标了
(5)解除远程usb设备
usbip port
usbip detach -p 0 #端口号根据上面的查到
三、命令参数总结–自己的理解
usage: usbip [--debug] [--log] [--tcp-port PORT] [version]
[help] <command> <args>
attach Attach a remote USB device #客户端添加远程usb设备
detach Detach a remote USB device #客户端解除远程usb设备
list List exportable or local USB devices #客户端远端usb设备、服务器端查看本地usb设备
bind Bind device to usbip-host.ko #服务器端添加(绑定)本地usb设备到usbip
unbind Unbind device from usbip-host.ko #服务器端从usbip中解除(解绑)本地usb设备
port Show imported USB devices #客户端已添加的远端usb设备
在openwrt上也可以用:
https://openwrt.org/docs/guide-user/services/usb.iptunnel