장치를 제거하고 다시 연결하려면 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 호스트 및 우분투 19.10 클라이언트에서 제대로 작동합니다.

답변3

내 답변이 늦었지만 다른 사람들에게 도움이 될 수 있습니다.https://github.com/alpertsev/usbip-service-shell

관련 정보