USB/IP
USB-IP 是一個將通用的USB設備通過IP網絡進行共享的系統。為了在計算機之間共享具有全部功能的USB設備,USB-IP將「USB I/O消息」封裝到 TCP/IP 中,並在計算機之間傳輸,以實現遠程共享或訪問USB設備。
安裝[編輯 | 編輯原始碼]
使用[編輯 | 編輯原始碼]
服務端配置[編輯 | 編輯原始碼]
服務端為提供USB設備映射端,所以請確保已連接上物理USB設備,並且加載 usbip_host
USB-IP內核模塊,下面命令為加載模塊:
# modprobe usbip_host
然後使用systemctl來啟用 usbipd.service
服務,服務默認監聽TCP 3240端口。
# systemctl enble --now usbipd.service
查看當前主機已連接的USB設備總線ID(busid):
$ usbip list -l
下面命令將USB設備 busid 為 1-1.5 綁定到服務中:
# usbip bind --busid=1-1.5
解除綁定:
# usbip unbind --busid=1-1.5
解除綁定後,客戶端將無法訪問改USB設備
使用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 --busid=%i RemainAfterExit=yes ExecStop=/usr/bin/usbip unbind --busid=%i Restart=on-failure [Install] WantedBy=multi-user.target
然後啟用配置,如想將USB設備busid為1-1.5 自動綁定到服務中,只需使用systemclt命令 啟動/啟用 usbip-bind@1-1.service
:
# systemctl enable --now usbip-bind@1-1.5.service
客戶端配置[編輯 | 編輯原始碼]
客戶端為加載遠程USB設備端,需要加載 vhci-hcd
內核模塊 命令如下:
# modprobe vhci-hcd
查看遠程服務端可用的USB設備,如果一切順利將列出遠程服務已綁定服務的所有USB設備:
$ usbip list --remote=服务端IP
記錄下需要連接USB設備,例如連接到busid為 1-1.5 的USB設備:
$ usbip attach --remote=服务端IP -b 1-1.5
--tcp-port 端口號
.取消綁定設備[編輯 | 編輯原始碼]
只有在客戶端上斷開設備後才能取消綁定
在客戶端上查看已映射的USB端口:
$ usbip port
在客戶端上斷開某個已連接的USB端口:
$ usbip detach --port=端口号
在服務端上取消綁定USB設備r:
$ usbip unbind --busid=busid
提示和技巧[編輯 | 編輯原始碼]
通過廠商/設備ID進行綁定[編輯 | 編輯原始碼]
如果總線ID(busid)在每次系統重啟後都不一樣,則可以使用 廠商/設備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 設置開機自動綁定,
# systemctl start --now usbip-bind@0924:3d68.service
vendor:product
ID 重複的設備將無法正常工作。在客戶端的配置如下所示:
- Linux客戶端
$ usbip attach -r 服务端IP --$(usbip list -p -r 服务端IP | grep '#usbid=0924:3d68#' | cut -d# -f1)
usbip list -p -r 服務端IP
,如果不正常請改用下面命令:
$ usbip attach -r 服務端IP -b $(usbip list -p -r 服務端IP | grep '0924:3d68' | cut '-d:' -f1 | awk '{print $1}')
- Windows客戶端
c:\> for /f "tokens=1 delims=:, " %a in ('usbip list -r 服务端IP ^| findstr /r /c:"0924:3d68"') do start usbip attach -r 服务端IP -b %a
將配置存放至 /etc/..[編輯 | 編輯原始碼]
usbip-systemdAUR 提供 systemd 服務文件,用於按供應商/設備 ID 進行綁定,以及按主機名和供應商/設備 ID 進行連接。
服務端配置[編輯 | 編輯原始碼]
將USB設備的vendor/product
ID按照下面格式編寫配置文件,並存放在/etc/usbip/bind-devices/
目錄下面。
/etc/usbip/bind-devices/example-device.conf
USBIP_DEVICE=0924:3d68
之後使用下命令啟用服務:
# systemctl enable --now usbip-bind@example-device.service
客戶端配置[編輯 | 編輯原始碼]
將服務端USB設備的vendor/product
ID按照下面格式編寫配置文件,並存放在/etc/usbip/remote-devices/
目錄下面。
/etc/usbip/remote-devices/example-device.conf
USBIP_HOST=example-host USBIP_DEVICE=0924:3d68
確保服務端守護進程正在運行並且配置的設備已綁定, 然後下面命令啟用服務:
# systemctl enable --now usbip@example-device.service