안정적으로 작동하기 위해 무선 키보드의 범위를 키보드 단독에서 조금 떨어진 컴퓨터까지 확장하기 위해 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