¿Configurar udev para cambiar los permisos en el dispositivo USB HID?

21

Tengo una báscula USB, una USB HID. Actualmente, cuando está enchufado, los permisos solo permiten que el superusuario acceda a él. ¿Cómo puedo configurar udev para permitir que cualquiera acceda a este dispositivo? Tengo los identificadores del proveedor y del producto, pero en cambio me gustaría hacer coincidirlos según el tipo de HID.

En este momento, estoy teniendo problemas para encontrar cualquier regla existente que se aplique a esto (estaba ansioso por "hidratar" /lib/udev/rules.dy /etc/udev/rules.d, entre otras cosas).

erjiang
fuente

Respuestas:

21

Normalmente, esto se hace agregando a /etc/udev/rules.dun archivo tal vez nombrado 50-usb-scale.confcon contenidos como este:

SUBSYSTEM=="usb", ATTR{idVendor}=="HEX1", ATTR{idProduct}=="HEX2", MODE="0666"

Donde HEX1 y HEX2 se reemplazan con el proveedor y la identificación del producto respectivamente.

Para que coincida con el tipo de interfaz, puede intentar reemplazarlo ATTR{idVendor}=="HEX1", ATTR{idProduct}=="HEX2"por una coincidencia para bInterfaceClassser 03(HID):

SUBSYSTEM=="usb", ATTR{bInterfaceClass}=="03", MODE="0666"

Pero ten cuidado, eso también atrapará ratones y teclados.

Kees Cook
fuente
44
En ubuntu 14.04 tienes que usar MODE: = "0666", sin los dos puntos, la regla no hace nada.
EdwinW
2
El 14.04 este archivo debe tener una .rulesextensión. Un archivo con una .confextensión no funcionará.
cherno
1
utilizar lsusb -vvvpara obtener el idProduct y idVendor
Xavier13
2
Dado que esta pregunta es bastante popular en la salida de Google ... Creo que debería ser ATTRS, no ATTR, al menos este cambio me lo solucionó.
infthi
2
En 14.04.5 LTS encontré: lsusbes un buen comienzo para ver lo que está conectado y las ID. idVendory las idProductcoincidencias parecen distinguir entre mayúsculas y minúsculas , por lo que la ID DA77no funciona para mí, pero da77sí. (Diagnóstico útil: udevadm info --attribute-walk /dev/bus/usb/008/023bus 008 dispositivo 023 mi ejemplo; lsusbpara el suyo.) Después de agregar una regla, sudo udevadm control --reload-rulesy luego sudo udevadm triggerevita reiniciar: los cambios son segundos después de eso. ATTR vs ATTRS no hicieron cuotas. Mi archivo .rules lee: SUBSYSTEM=="usb", ATTR{idVendor}=="da77", ATTR{idProduct}=="d12e", GROUP="users", MODE="0666".
El Zorko
7

Solo para el resumen:

Puede filtrar por:

  • idVendor
  • idProduct
  • de serie

Y use:

== Comparar por igualdad.

! = Comparar por desigualdad.

= Asignar un valor a una clave. Las teclas que representan una lista se restablecen y solo se asigna este único valor.

+ = Agregar el valor a una clave que contiene una lista de entradas.

: = Asignar un valor a una clave finalmente; rechazar cualquier cambio posterior.

Puede dar a un dispositivo específico una nueva ruta específica en / dev / ...
Ejemplo:

KERNEL=="hiddev*", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", ATTRS{serial}=="1234567", GROUP="cdrom", OWNER="user28", MODE="0640", SYMLINK+="myhid"

Resultados en:

Puede acceder al dispositivo a través de '/ dev / hiddevx' o '/ dev / myhid' fácilmente, todos los usuarios del grupo 'cdrom' pueden leer desde el dispositivo. El propietario 'usuario28' puede leer y escribir.

o más simple:

KERNEL=="hiddev*", ATTRS{idVendor}=="16c0", MODE="0666"

Resultados en: Cada usuario puede acceder a todos los dispositivos ocultos del Proveedor 0x16c0

Para más detalles ver: Docs

rundekugel
fuente
2
:=No es para comparaciones. Los documentos dicen "Asignar un valor a una clave finalmente; no permitir cambios posteriores".
Lucas
5

En caso de que necesite cambiar (como yo) los ttyACM0permisos, esta es mi configuración:

KERNEL=="ttyACM0", MODE="0777"

Falló cuando intenté especificar el proveedor y la identificación del producto. No estoy seguro por qué.

Rodo
fuente
Sí, la opción Kernel funciona para la mayoría de los dispositivos HID, mejor que la del subsistema USB
Muriuki David
2

Si es un dispositivo HIDRAW, debe

chmod 0666 /dev/hidrawX

donde X es el número del dispositivo oculto, por ejemplo, hidraw0. tu puedes hacer

ls /dev/hid*

para ver una lista :) O simplemente

sudo chmod 0666 /dev/hidraw*

para configurar para todos los dispositivos de hidraw, probablemente no se recomienda.

Muriuki David
fuente
2

Actualización / aclaración de Ubuntu 18.04:

La respuesta de Kees Cook es cercana pero requiere 2 cambios para funcionar en 18.04 (la versión actual y solo una en la que he probado esto).

  1. Encuentre su idVendor e idProduct con lsusb .
    • Estos serán los 2 valores hexadecimales después de "ID", separados por dos puntos. Estoy agregando un escáner. lsusb me dio:
      Bus 001 Dispositivo 011: ID 04b8: 014a Seiko Epson Corp. 
  2. Como root, agregue un archivo a /etc/udev/rules.d
    • Algo así como 50-usb-epsonscanner.rules
    • La extensión debe ser ".rules"  
  3. En ese archivo agregue:
    SUBSISTEMA == "usb", ATTRS {idVendor} == "04b8", ATTR {idProduct} == "014a", MODE = "0666"
    Pero con sus valores hexadecimales idVendor e idProduct.
    • Tenga en cuenta que es "ATTRS" no "ATTR".
  4. Vuelva a iniciar sesión. No es necesario reiniciar.
gatohaus
fuente
ATTRStanto para el vendedor como para la identificación del producto? Entonces, su código de muestra es incorrecto (tal como dice dos líneas más adelante).
neo post moderno
Solo el segundo es ATTR. Trabaja aqui Supongo que es un error que podría cambiar sin previo aviso.
gatohaus