¿Cómo permitir el acceso del software a cualquier dispositivo USB?

¿Cómo permitir el acceso del software a cualquier dispositivo USB?

Tengo un programa basado en libusb que no puede abrir dispositivos USB en un Ubuntu recién instalado porque carece de permisos.

Esta soluciónProbablemente funcione para mí, pero requiere especificar manualmente todos y cada uno de los dispositivos, y tengo bastantes. Entonces probé esto (en un archivo /etc/udev/rules.d/41-cvs-permissions.rules):

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

Omití VID y PID, con la esperanza de que simplemente se aplique la regla a TODOS los dispositivos. Definitivamente tiene algún efecto, pero el efecto es bastante extraño: en lugar de detectar 5 dispositivos que no puede abrir, libusb ahora solo detecta 2; ambos son controladores de host USB, no dispositivos reales.

¿Cómo lograr lo que quiero?

Respuesta1

La forma en que trato los dispositivos USB es darles acceso a todos ellos a un grupo específico.

Como raíz:

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

Básicamente, lo que esto hace es otorgar acceso de lectura y escritura para cualquier dispositivo USB a los miembros del grupo plugdev.

Respuesta2

Estoy de acuerdo en que hacer coincidir las reglas usando VID/PID no es una solución definitiva. Pero puedes utilizar varios dispositivos con la misma regla sin apuntar ciegamente a todos los dispositivos USB como lo hiciste. Ejemplo usando DRIVERnombre ( usb-storage,, usbhid...) o KERNELnombre ( tty*,, sd*...) incluso usando expresiones regulares mínimas ( sd[a-z][0-9]*, usb*).

Debes buscar similitudes en sus atributos.

  1. Quitar todos esos dispositivos
  2. Guarde la lista actual de dispositivos en/dev

    ls /dev > /tmp/dev_list0.txt
    
  3. Conecte uno de los dispositivos de destino

  4. Guarde la lista de dispositivos en otro archivo

    ls /dev > /tmp/dev_list.txt
    
  5. Comparar archivos, >dispositivo agregado, <dispositivo eliminado

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

    Este es un módem 3G.

  6. Verifique el atributo para todas las interfaces que necesita, ejemplo:

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

Haz lo mismo con todos los dispositivos que quieras. Si no sabe cómo, cargue sus udevadm info --attribute-walk --name=...resultados y vincúlelos a su pregunta.

Tenga en cuenta que no todos los dispositivos USB crean un nodo en formato /dev. Algunos los tienes que buscar en el árbol SYSFS /sys. Luego verifique sus atributos usando--path

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

Siguiendo los mismos pasos anteriores, puede verificar qué nodos de dispositivo se crearon al monitorear udeveventos:

udevadm monitor

Respuesta3

Esta es la solución más sencilla para desbloquear el acceso a su hardware:

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

información relacionada