
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 DRIVER
nome ( usb-storage
, usbhid
,..) ou KERNEL
nome ( tty*
, sd*
,..) mesmo usando regex mínimo ( sd[a-z][0-9]*
, usb*
).
Você deve procurar semelhanças em seus atributos.
- Remova todos esses dispositivos
Salve a lista atual de dispositivos em
/dev
ls /dev > /tmp/dev_list0.txt
Conecte um dos dispositivos de destino
Salve a lista de dispositivos em outro arquivo
ls /dev > /tmp/dev_list.txt
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.
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 udev
eventos:
udevadm monitor
Responder3
Esta é a solução mais fácil para desbloquear o acesso ao seu hardware:
sudo chmod -R 777 /dev/bus/usb/