Pregunta

He estado jugando un poco con PyUSB últimamente, y se encontró que funciona muy bien en Linux (Ubuntu tiene < a href = "http://www.libusb.org/" rel = "noreferrer"> libusb 0.1 y 1.0, así como OpenUSB ) ... pero sólo si corro el programa con privilegios de root (con sudo, por supuesto).

Puede alguien decirme por qué se requiere privilegios elevados y, más importante, si puedo cambiar los permisos de alguna manera para hacer que funcione para las cuentas de usuario normales?

¿Fue útil?

Solución

libusb le permite manipular dispositivos USB arbitrarios en formas arbitrarias. Se podría formatear un disco duro USB externo, por ejemplo.

En general, todos los acceso directo al hardware requiere privilegios root, aunque supongo que en realidad lleno root no se requieren privilegios, que debe estar bien con sólo CAP_SYS_RAWIO.

Otros consejos

Puede cambiar los permisos de su nodo de dispositivo USB mediante la creación de una regla udev. p.ej. He añadido la siguiente línea en un archivo en /etc/udev/rules.d/

SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664", GROUP="usbusers"

Esto establece el propietario del nodo de dispositivo para root:usbusers en lugar de root:root

Después de la adición de mí mismo para el grupo usbusers, puedo acceder al dispositivo.

Véase la respuesta que di aquí:
¿Cómo puedo comunicar con el dispositivo utilizando pyusb?

A saber:
Configurar un archivo de reglas udev para el dispositivo específico que desea que los usuarios normales para poder acceder. Esto va a definir el ID de proveedor, la identificación del producto y un grupo.
Los de proveedor y del producto se encuentran con el comando lsusb.

1. Crear un archivo de reglas udev

ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="171b", ATTRS{idProduct}=="2001", MODE="660", GROUP="plugdev"

Ponga esto en un archivo llamado (por ejemplo) /lib/udev/rules.d/50-YourSoftwareName.rules (cavar alrededor de udev hombre por las reglas de nomenclatura de archivos)
NOTA: La convención de nomenclatura antigua /etc/udev/rules.d/filename.rules utilizado, que ha cambiado.

2. añadir los nombres de usuario al grupo plugdev

adduser username plugdev

3. obligar al sistema udev para ver los cambios

sudo udevadm control --reload (que es de menos de menos de recarga)
sudo udevadm trigger

4. desenchufe y vuelva a conectar el dispositivo o reiniciar la máquina

El resultado final debe ser que todos los miembros del grupo plugdev ahora podrán acceder al dispositivo.

EDIT: Tenga en cuenta que en algunos sistemas la plugdev grupo no puede ser el grupo que necesita. También puede ser el grupo input en mi experiencia, dependiendo de lo que está conectando en.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top