AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 406847
Accepted
Sunday
Sunday
Asked: 2017-11-25 09:44:09 +0800 CST2017-11-25 09:44:09 +0800 CST 2017-11-25 09:44:09 +0800 CST

Use USBIP para dispositivos que estão sendo removidos e reconectados

  • 772

Estou usando usbip e um raspberry pi para estender o alcance de um teclado sem fio para um computador que está um pouco longe demais para que o teclado funcione de maneira confiável por conta própria.

Às vezes, o receptor USB do teclado é reconectado e usado em outro lugar, mas quando é reconectado ao raspberry pi, a conexão USBIP não é restabelecida automaticamente.

Como posso conseguir a reconexão automática?

usb usb-device
  • 3 3 respostas
  • 5031 Views

3 respostas

  • Voted
  1. Best Answer
    Sunday
    2017-11-25T09:44:09+08:002017-11-25T09:44:09+08:00

    Quando um dispositivo vinculado e conectado remotamente é desconectado, o dispositivo é automaticamente desconectado no cliente e desconectado no host. Depois disso, o estado é o mesmo como se nunca tivesse sido vinculado ou anexado.

    Os comandos usbip para ligação (no host) e anexação (no cliente) podem ser executados repetidamente com os mesmos argumentos. Embora isso emita uma mensagem de erro em dispositivos já vinculados ou conectados, nada de ruim acontece! Portanto, basta instalar scripts em segundo plano que vincularão e conectarão repetidamente os dispositivos. Scripts de exemplo e unidades systemd são fornecidos abaixo. Certifique-se de alterar o nome do host e as IDs da porta de acordo com suas necessidades.

    Hospedeiro

    Escrito /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
    

    Unidade do sistema /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
    

    Certifique-se de criar o diretório /var/spool/usbip. Em seguida, habilite e inicie a unidade:

    systemctl daemon-reload
    systemctl enable usbip-bind
    systemctl start usbip-bind
    

    Cliente

    Escrito /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
    

    Unidade do sistema /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
    

    Certifique-se de criar o diretório /var/spool/usbip. Em seguida, habilite e inicie a unidade:

    systemctl daemon-reload
    systemctl enable usbip-attach
    systemctl start usbip-attach
    

    Agora você pode retirar o aparelho sempre que precisar e em no máximo 20 segundos após recolocá-lo na conexão usbip é restabelecida.

    • 3
  2. Magnus
    2019-12-23T15:24:35+08:002019-12-23T15:24:35+08:00

    Eu tentei isso e meio que funcionou .. há mais alguns que você precisa fazer.

    Primeiro:

    Você precisa tornar os scipts executáveis ​​no host e no cliente

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

    No meu caso, o usbip não foi instalado no /opt/usbip, tive que simplesmente escrever apenas usbipno host e no arquivo de serviço do cliente.

    Eu também tive que iniciar o usbipdserviço. Então, no host, usei este arquivo:

    [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
    

    Ele inicia o servidor usbipd primeiro

    e nos arquivos do host e do cliente eu tive que remover/usr/bin/

    Após essas alterações, funcionou bem no meu host Raspberry Pi e no cliente ubuntu 19.10

    • 0
  3. Alexie
    2021-07-02T00:00:26+08:002021-07-02T00:00:26+08:00

    Embora minha resposta esteja bastante atrasada, mas talvez útil para os outros: https://github.com/alpertsev/usbip-service-shell

    • 0

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Matriz JSON para bash variáveis ​​usando jq

    • 4 respostas
  • Marko Smith

    A data pode formatar a hora atual para o fuso horário GMT? [duplicado]

    • 2 respostas
  • Marko Smith

    bash + lê variáveis ​​e valores do arquivo pelo script bash

    • 4 respostas
  • Marko Smith

    Como posso copiar um diretório e renomeá-lo no mesmo comando?

    • 4 respostas
  • Marko Smith

    conexão ssh. Conexão X11 rejeitada devido a autenticação incorreta

    • 3 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Marko Smith

    comando systemctl não funciona no RHEL 6

    • 3 respostas
  • Marko Smith

    rsync porta 22 e 873 uso

    • 2 respostas
  • Marko Smith

    snap /dev/loop em 100% de utilização -- sem espaço livre

    • 1 respostas
  • Marko Smith

    chave de impressão jq e valor para todos no subobjeto

    • 2 respostas
  • Martin Hope
    EHerman Matriz JSON para bash variáveis ​​usando jq 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux A data pode formatar a hora atual para o fuso horário GMT? [duplicado] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC Como posso copiar um diretório e renomeá-lo no mesmo comando? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve Como as permissões de arquivo funcionam para o usuário "root"? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe Altere o editor padrão para vim para _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey Como baixar o pacote não instalá-lo com o comando apt-get? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao Por que os diretórios /home, /usr, /var, etc. têm o mesmo número de inode (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg — o comando list-keys gera uid [ desconhecido ] depois de importar a chave privada para uma instalação limpa 2017-11-26 18:26:02 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve