Configuration de hotplug pour l'utilisation de périphérique USB comme utilisateur sans privilèges

Qui n'a jamais voulu utiliser son scanner USB ou récupérer ces photos sur son appareil photo numérique depuis son compte utilisateur sous Linux?

Une solution simple existe en utilisant hotplug. Hotplug est un utilitaire en mode utilisateur qui permet de détecter les périphériques USB lorsqu'ils sont branchés et d'éventuellement charger des modules pour les faire fonctionner.

Lorsqu'un périphérique USB est branché, Hotplug parcourt les fichiers ayant l'extension .usermap du répertoire /etc/hotplug/usb pour chercher la signature du prériphérique USB. Si la signature du périphérique est tourvée, le script spécifié dans le fichier .usermap est appelé. Le fichier .usermap est de la forme suivante :
script_a_appele match_flags Vendor ProdID bcdDevice_lo bcdDevice_hi bDeviceClass bDeviceSubClass bDeviceProtocol bInterface Class bInterfaceSubClass bInterfaceProtocol driver_info
Les différentes informations sont disponibles dans la section du fichier /proc/bus/usb/devices correspondant au périphérique.

Je vais présenter deux exemples de configuration : la configuration d'un scanner Epson 1260 et la configuration d'un appareil photo numérique Olympus C-2100UZ. Pour commencer, il faut savoir que chaque périphérique USB a sa propre signature, constituée d'un identifiant de vendeur (Vendor) et d'un identifiant de produit (ProdID). Ces identifiants peuvent être trouvés dans le fichier /proc/bus/usb/devices lorsque le périphérique est branché.

Configuration d'un scanner Epson 1260 (avec l(utilisation de sane)

Le scanner Epson 1260 a pour identifiants Vendor=04b8 et ProdID=011d. Le fichier /proc/bus/usb/devices contient donc la séquence suivante :
T: Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0
D: Ver= 1.10 Cls=ff(vend.) Sub=00 Prot=ff MxPS= 8 #Cfgs= 1
P: Vendor=04b8 ProdID=011d Rev= 1.00
S: Manufacturer=EPSON
S: Product=EPSON Scanner
C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr= 2mA
I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=00 Prot=ff Driver=(none)
E: Ad=81(I) Atr=03(Int.) MxPS= 1 Ivl=16ms
E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=03(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms

Sous Debian, sane (logiciel permettant d'utiliser les scanners sous Linux) installe les fichiers libsane.usermap et libusbscanner. Le fichier libsane.usermap doit être de la forme suivante :
libusbscanner 0x0003 0xVendor 0xProdID 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000

Le fichier doit être de la forme suivante (fichier fournit par le paquet sane de la distribution Debian) :
#!/bin/sh
# This file was installed by the libsane Debian package.
#
# This script changes the permissions and ownership of a USB device under
# /proc/bus/usb to grant access to this device to users in the scanner group.
#
# Ownership is set to root.scanner, permissions are set to 0660.
#
# Arguments :
# -----------
# ACTION=[add|remove]
# DEVICE=/proc/bus/usb/BBB/DDD
# TYPE=usb
if [ "$ACTION" = "add" -a "$TYPE" = "usb" ]; then
chown root:scanner "$DEVICE"
chmod 0660 "$DEVICE"
fi
Ce script permet de modifier les droits d'accès au périphérique USB via l'interface /proc. Ainsi, tous les utilisateurs du groupe scanner pourront utiliser le scanner.

Configuration d'un appareil photo numérique Olympus C-2100UZ

La première chose à faire est de récupérer le signature complète de l'appareil photo grace au fichier /proc/bus/usb/devices. Cela donne :
T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=12 MxCh= 0
D: Ver= 1.10 Cls=ff(vend.) Sub=ff Prot=ff MxPS= 8 #Cfgs= 1
P: Vendor=07b4 ProdID=0100 Rev= 1.00
S: Manufacturer=OLYMPU
S: Product=C-2100 Ultra Zoom
C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr= 0mA
I: If#= 0 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
E: Ad=04(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
E: Ad=83(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms

Il est ensuite nécessaire de créer un fichier .usermap dans le répertoire /etc/hotplug/usb pour la détection de l'appareil photo. J'ai donc créer un fichier olympus.usermap dont le contenu est :
libusbolympus 0x0003 0x07b4 0x0100 0x0000 0x0000 0x00 0xff 0x00 0x00 0xff 0x00 0x00000000

Pour finir, j'ai créé le script libusbolympus dont le contenu est :
if [ "$ACTION" = "add" -a "$TYPE" = "usb" ]; then
chown root:camera "$DEVICE"
chmod 0660 "$DEVICE"
fi
Ainsi, l'appareil photo peut être utilisé (grace à gphoto2 par exemple) par tous les utilisateurs du groupe camera.


Dernière modification : le 04/04/2004.

Valid XHTML 1.0!