Inviato da daniele il Dom, 2008-06-08 16:48

È possibile che il sistema sia già impostato per assegnare i permessi desiderati ai device associati al telefono (come /dev/ttyACM0 e /dev/sda1, a seconda del tipo di collegamento scelto), ma siccome libusb accede a /dev/bus/usb/ è necessario impostare anche a questo percorso i permessi appropriati e dal momento che una periferica USB può apparire in un percorso diverso secondo in quale porta viene inserita conviene usare le regole di udev.

Per il collegamento tramite libusb si potrebbero impostare dei permessi diversi da quelli applicati alle altre modalità, ma per omogeneità conviene usare gli stessi, cioè assegnare la proprietà al gruppo plugdev aggiungendo un file in /etc/udev/rules.d/ con il seguente contenuto:

# per usare tutti telefoni Nokia tramite libusb
ACTION=="add", SUBSYSTEMS=="usb", ATTRS{manufacturer}=="Nokia", GROUP="plugdev"


Il nome del file può essere scelto seguendo le regole contenute in /etc/udev/rules.d/README; il nome suggerito da gnokii è 45-nokiadku2.rules

Per verificare se la regola aggiunta funziona come vogliamo si può staccare e attaccare il telefono :-) oppure si possono usare due programmi. Per prima cosa è necessario identificare il percorso temporaneamente assegnato al telefono nel percorso /sys/devices/.
Un modo veloce è quello di partire da un device che sappiamo essere associato al telefono, ad esempio /dev/ttyACM0:

$ udevinfo --query path --name /dev/ttyACM0 
/devices/pci0000:00/0000:00:0c.1/usb3/3-2/3-2:1.1/tty/ttyACM0


(il percorso varia da sistema a sistema e secondo in quale porta si collega il cavo).

La parte che interessa è quella che identifica l'intera periferica, quindi ignoriamo la parte finale e usiamo l'informazione così ottenuta per fare le prove:

$ udevtest /devices/pci0000:00/0000:00:0c.1/usb3/3-2/
[...]
udevtest: looking at device '/devices/pci0000:00/0000:00:0c.1/usb3/3-2' from subsystem 'usb'
udev_rules_get_name: rule applied, '3-2' becomes 'bus/usb/003/005'
udev_db_get_device: found a symlink as db file
udev_device_event: device '/devices/pci0000:00/0000:00:0c.1/usb3/3-2' already in database, cleanup
udev_node_add: creating device node '/dev/bus/usb/003/005', major=189, minor=260, mode=0664, uid=0, gid=46
[...]


Nell'output di esempio si vede che l'identificativo del gruppo proprietario del file speciale che identifica il telefono è 46 (gid=46), che da un semplice controllo risulta quello giusto:

$ grep 46 /etc/group
plugdev:x:46:daniele

Un paragrafo con queste informazioni si trova nel wiki ufficiale di gnokii: http://wiki.gnokii.org/index.php/DKU2 (in inglese).