Usb

將 USBIP 用於正在移除和重新連接的設備

  • July 1, 2021

我正在使用 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 秒。

引用自:https://unix.stackexchange.com/questions/406847