Domanda

Ho accarezzato in giro con PyUSB ultimamente, e ha scoperto che funziona splendidamente su Linux (Ubuntu ha < a href = "http://www.libusb.org/" rel = "noreferrer"> libusb 0,1 e 1,0, così come OpenUSB ) ... ma solo se ho eseguito il programma con i privilegi di root (con sudo, ovviamente).

Qualcuno può dirmi il motivo per cui richiede privilegi elevati e, cosa ancora più importante, se posso cambiare i permessi in qualche modo a farlo funzionare per qualunque account utente?

È stato utile?

Soluzione

libusb consente di manipolare dispositivi USB arbitrari in modo arbitrario. Si potrebbe formattare un hard disk USB esterno, per esempio.

In generale, tutti accesso diretto all'hardware richiede privilegi root, anche se immagino che root in realtà pieno di privilegi non sono necessari, si dovrebbe andare bene con appena CAP_SYS_RAWIO.

Altri suggerimenti

È possibile modificare i permessi della nodo del dispositivo USB con la creazione di una regola di udev. per esempio. Ho aggiunto la seguente riga in un file in /etc/udev/rules.d/

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

Questo imposta il proprietario del nodo del dispositivo root:usbusers anziché root:root

Dopo aver aggiunto io stesso al gruppo usbusers, posso accedere al dispositivo.

Si veda la risposta che ho dato qui:
Come posso comunicare con questo dispositivo utilizzando pyusb?

Vale a dire:
Impostare un file di regole di udev per il dispositivo specifico che si desidera che gli utenti normali siano in grado di accedere. Questo definirà la ID del fornitore, il prodotto ID e un gruppo.
Il venditore e prodotto id può essere trovato con il comando lsusb.

1. Creare un file di regole udev

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

Mettere questo in un file chiamato (per esempio) /lib/udev/rules.d/50-YourSoftwareName.rules (scavare intorno nell'uomo udev per le regole di denominazione dei file)
NOTA: La vecchia convenzione di denominazione /etc/udev/rules.d/filename.rules utilizzato, che è cambiato.

2. aggiungere i nomi utente al gruppo plugdev

adduser username plugdev

3.  forzare il sistema udev per visualizzare le modifiche

sudo udevadm control --reload (che è meno meno reload)
sudo udevadm trigger

4. scollegare e ricollegare il dispositivo o riavviare la macchina

Il risultato finale dovrebbe essere che tutti i membri del gruppo plugdev saranno ora in grado di accedere al dispositivo.

EDIT: Si noti che su alcuni sistemi il plugdev gruppo non può essere il gruppo di cui avete bisogno. Può anche essere il input gruppo nella mia esperienza, a seconda di ciò che si sta collegando.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top