Como permitir o acesso de software a qualquer dispositivo USB?

3

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

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

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

Eu omiti o VID e o PID, esperando que ele simplesmente aplicasse a regra a TODOS os dispositivos. Definitivamente tem algum efeito, mas o efeito é bastante estranho: em vez de detectar 5 dispositivos que não podem ser abertos, a libusb só detecta 2 agora - ambos são controladores de host USB, não dispositivos reais.

Como conseguir o que eu quero?

    
por Violet Giraffe 12.03.2015 / 11:58

2 respostas

1

Concordo que fazer correspondência de regras usando VID / PID não é uma solução definitiva. Mas você pode ter vários dispositivos na mesma regra sem segmentar todos os dispositivos USB da maneira que você fez. Exemplo usando DRIVER name ( usb-storage , usbhid , ..) ou KERNEL name ( tty* , sd* , ..) mesmo usando regex mínima ( sd[a-z][0-9]* , usb* ). / p>

Você deve procurar semelhanças em seus atributos.

  1. Remover 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. Comparar 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 de todas as interfaces de que você precisa, por exemplo:

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

Faça o mesmo para todos os dispositivos desejados. Se você não conseguir descobrir como, por favor, faça o upload da saída udevadm info --attribute-walk --name=... e vincule-os à sua pergunta.

Observe que nem todos os dispositivos USB criam um nó em /dev . Alguns você procura por eles 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 udev events:

udevadm monitor
    
por user.dz 05.06.2015 / 01:25
1

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

Como root:

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.

    
por Justin Buser 29.06.2017 / 17:05