
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 DRIVER
nombre ( usb-storage
,, usbhid
...) o KERNEL
nombre ( tty*
,, sd*
...) incluso usando expresiones regulares mínimas ( sd[a-z][0-9]*
, usb*
).
Debes buscar similitudes en sus atributos.
- Quitar todos esos dispositivos
Guarde la lista actual de dispositivos en
/dev
ls /dev > /tmp/dev_list0.txt
Conecte uno de los dispositivos de destino
Guarde la lista de dispositivos en otro archivo
ls /dev > /tmp/dev_list.txt
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.
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 udev
eventos:
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/