デバイスを取り外して再接続するには、USBIPを使用してください。

デバイスを取り外して再接続するには、USBIPを使用してください。

安定して動作するために、ワイヤレスキーボードの範囲をキーボード単体から少し離れたコンピュータに拡張するためにusbipとラズベリーパイを使用しています。

時にはキーボードのUSBレシーバーが再接続され、他の場所で使用されますが、Raspberry Piに再接続すると、USBIP接続は自動的にリセットされません。

自動再接続を達成するには?

答え1

リモートでバインドされ、接続されたデバイスが切断されると、デバイスはクライアントから自動的に切断され、ホストからバインドが解除されます。それ以降は、ステータスがバインドされているかリンクされていないのと同じです。

バインディング(ホスト上)と接続(クライアント上)用のusbipコマンドは、同じパラメータを使用して繰り返し実行できます。テザリングまたは接続されたデバイスにエラーメッセージが表示されますが、悪いことは発生しません!したがって、単にバックグラウンドスクリプトをインストールして、デバイスをバインドして接続することを繰り返し実行できます。サンプルスクリプトとシステムユニットを以下に提供します。必要に応じてホスト名とポート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

必要に応じてデバイスを削除でき、再接続後、最大20秒以内にusbip接続がリセットされます。

答え2

私はこれを試しました、それはうまくいきました...あなたがしなければならないいくつかのことがあります。

最初:

ホストとクライアントの両方でsciptを実行可能にする必要があります。

sudo chmod +x /opt/usbip/usbip-attach
sudo chmod +x /opt/usbip/usbip-bind

私の場合、usbipはインストールされていないため、ホストとクライアントのサービスファイルのみを作成する/opt/usbip必要がありました。usbip

私もusbipdサービスを開始する必要があります。したがって、ホストシステムは代わりにこのファイルを使用します。

[Unit]
Description=USB-IP Bindings

[Service]
ExecStartPre=/usr/sbin/usbipd -D
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

まず、usbipdサーバーを起動します。

削除する必要があったホストおよびクライアントファイルから/usr/bin/

これらの変更の後、Raspberry PiホストとUbuntu 19.10クライアントで正常に動作します。

答え3

私の答えは遅れていましたが、他の人に役立つかもしれません。https://github.com/alpertsev/usbip-service-shell

関連情報