Como permitir o acesso de software a qualquer dispositivo USB?

Como permitir o acesso de software a qualquer dispositivo USB?

Eu tenho um programa baseado em libusb que não consegue abrir dispositivos USB em um Ubuntu recém-instalado porque não possui permissões.

Esta soluçãoprovavelmente funcionará para mim, mas requer a especificação manual de cada dispositivo - e eu tenho alguns. Então eu tentei isso (em um arquivo /etc/udev/rules.d/41-cvs-permissions.rules):

SUBSYSTEM=="usb", MODE:="0666"

Omiti VID e PID, esperando que isso simplesmente aplique a regra a TODOS os dispositivos. Definitivamente tem algum efeito, mas o efeito é bastante estranho: em vez de detectar 5 dispositivos que não pode abrir, o libusb detecta apenas 2 agora - ambos são controladores de host USB, não dispositivos reais.

Como conseguir o que desejo?

Responder1

A maneira como lido com dispositivos USB é conceder acesso a todos eles a um grupo específico.

Como raiz:

echo 'SUBSYSTEM=="usb", MODE="0660", GROUP="plugdev"' > /etc/udev/rules.d/00-usb-permissions.rules
udevadm control --reload-rules

Essencialmente, o que isso faz é conceder acesso de leitura e gravação para qualquer dispositivo USB aos membros do grupo plugdev.

Responder2

Concordo que fazer correspondência de regras usando VID/PID não é uma solução definitiva. Mas você pode usar vários dispositivos na mesma regra sem direcionar cegamente todos os dispositivos USB como fez. Exemplo usando DRIVERnome ( usb-storage, usbhid,..) ou KERNELnome ( tty*, sd*,..) mesmo usando regex mínimo ( sd[a-z][0-9]*, usb*).

Você deve procurar semelhanças em seus atributos.

  1. Remova todos esses dispositivos
  2. Salve a lista atual de dispositivos em/dev

    ls /dev > /tmp/dev_list0.txt
    
  3. Conecte um dos dispositivos de destino

  4. Salve a lista de dispositivos em outro arquivo

    ls /dev > /tmp/dev_list.txt
    
  5. Compare arquivos, >dispositivo adicionado, <dispositivo removido

    $ colordiff /tmp/dev_list0.txt /tmp/dev_list.txt
    85a86,87
    > sdc
    > serial
    89a92,93
    > sg4
    > sg5
    93a98
    > sr1
    194a200,201
    > ttyUSB0
    > ttyUSB1
    

    Este é um modem 3G.

  6. Verifique o atributo para todas as interfaces necessárias, exemplo:

    udevadm info --attribute-walk --name=/dev/ttyUSB0
    

Faça o mesmo para todos os dispositivos que desejar. Se você não consegue descobrir como, faça upload dos udevadm info --attribute-walk --name=...resultados e vincule-os à sua pergunta.

Observe que nem todos os dispositivos USB criam um nó no arquivo /dev. Alguns você os procura na árvore SYSFS /sys. Em seguida, verifique seus atributos usando--path

udevadm info --attribute-walk --path=...

Usando as mesmas etapas acima, você pode verificar quais nós de dispositivos foram criados monitorando udeveventos:

udevadm monitor

Responder3

Esta é a solução mais fácil para desbloquear o acesso ao seu hardware:

sudo chmod -R 777 /dev/bus/usb/

informação relacionada