제거했다가 다시 연결하는 장치에 USBIP 사용

제거했다가 다시 연결하는 장치에 USBIP 사용

저는 usbip과 라즈베리 파이를 사용하여 무선 키보드의 범위를 키보드가 자체적으로 안정적으로 작동하기에는 너무 멀리 있는 컴퓨터로 확장하고 있습니다.

때로는 키보드의 USB 수신기가 다시 연결되어 다른 곳에서 사용되지만 라즈베리 파이에 다시 연결되면 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

관련 정보