Usb
將 USBIP 用於正在移除和重新連接的設備
我正在使用 usbip 和樹莓派將無線鍵盤的範圍擴展到一台電腦,該電腦距離鍵盤本身可靠地工作有點太遠了。
有時鍵盤的 USB 接收器會重新連接並在其他地方使用,但是當它重新連接到樹莓派時,USBIP 連接不會自動重新建立。
如何實現自動重連?
當遠端綁定和附加的設備被拔出時,該設備在客戶端自動分離並在主機上解除綁定。之後,狀態就像從未綁定或附加一樣。
用於綁定(在主機上)和附加(在客戶端上)的 usbip 命令可以使用相同的參數重複執行。雖然這會在已綁定或連接的設備上發出錯誤消息,但不會發生任何不好的事情!因此,只需安裝將重複綁定和附加設備的後台腳本。下面提供了範例腳本和 systemd 單元。請務必根據需要更改主機名和埠 ID。
主持人
腳本
/opt/usbip/usbip-bind
:#!/bin/bash SPOOL=/var/spool/usbip/bind if [[ $1 == "-q" ]] then exec &>/dev/null fi touch $SPOOL while [[ -e $SPOOL ]] do /usr/bin/usbip bind -b 1-1.2.1 /usr/bin/usbip bind -b 1-1.2.2 sleep 10 done /usr/bin/usbip unbind -b 1-1.2.1 /usr/bin/usbip unbind -b 1-1.2.2 exit 0
系統單元
/etc/systemd/system/usbip-bind.service
:[Unit] Description=USB-IP Bindings [Service] ExecStart=/opt/usbip/usbip-bind -q ExecStop=/bin/rm /var/spool/usbip/bind ; /bin/bash -c "while [[ -d /proc/"$MAINPID" ]]; do sleep 1; done" [Install] WantedBy=multi-user.target
一定要製作目錄
/var/spool/usbip
。然後啟用並啟動設備:systemctl daemon-reload systemctl enable usbip-bind systemctl start usbip-bind
客戶
腳本
/opt/usbip/usbip-attach
:#!/bin/bash SPOOL=/var/spool/usbip/attach if [[ $1 == "-q" ]] then exec &>/dev/null fi touch $SPOOL while [[ -e $SPOOL ]] do /usr/bin/usbip attach -r pi -b 1-1.2.1 /usr/bin/usbip attach -r pi -b 1-1.2.2 sleep 10 done /usr/bin/usbip detach -p 0 /usr/bin/usbip detach -p 1 exit 0
系統單元
/etc/systemd/system/usbip-attach.service
:[Unit] Description=USB-IP Attach Wants=network-online.target After=network-online.target [Service] ExecStart=/opt/usbip/usbip-attach -q ExecStop=/bin/rm /var/spool/usbip/attach ; /bin/bash -c "while [[ -d /proc/"$MAINPID" ]]; do sleep 1; done" [Install] WantedBy=multi-user.target
一定要製作目錄
/var/spool/usbip
。然後啟用並啟動設備:systemctl daemon-reload systemctl enable usbip-attach systemctl start usbip-attach
現在,您可以在需要時移除設備,並且在重新插入 USB 連接重新建立後最多 20 秒。