Thinkpad x61s, lecteur d'empreintes digitales qui chauffe

Propriétaire d’un choupy Lenovo Thinkpad x61s (remplacant de l’IBM thinkpad x31), j’ai remarqué, comme d’autres utilisateurs, que le lecteur d’empreintes digitales chauffait. Ceci pour une très bonne raison, il est alimenté en permanence, même si non utilisé.

L’ajout de usbcore.autosuspend=1 en paramètre du noyau dans mon menu.lst de GRUB n’a pas été suffisant. Ceci ne fait que specifier aux périphériques qu’ils peuvent utiliser la gestion d’énergie en automatique, mais le périphérique fait ce qui lui chante.

Pour régler le problème manuellement, on peut faire un echo « auto » > /sys/devices/[… ]/power/level. Après avoir, bien entendu, recherché le périphérique à coup de lsusb et de cat dans /sys/devices/. Pas très drôle :(

Heureusement udev est là. Il suffit alors d’ajouter une règle dans /etc/udev/rules.d/10-enable-fingerprint-autosuspend.rules, par exemple, contenant (sur une ligne) :
ACTION== »add », SUBSYSTEMS== »usb », SYSFS{idVendor}== »0483″,
SYSFS{idProduct}== »2016″, ATTR{power/level}= »auto »
Une autre solution serait de lancer un script avec :
ACTION== »add », SUBSYSTEMS== »usb », SYSFS{idVendor}== »0483″,
SYSFS{idProduct}== »2016″, RUN+= »/lib/udev/usb-enable-autosuspend »
/lib/udev/usb-enable-autosuspend contenant :
#!/bin/sh
if test -f /sys/$DEVPATH/power/level ; then
echo « auto » > /sys/$DEVPATH/power/level
fi
Mais c’est bien moins élégant.

On peut vérifier ensuite avec powertop -d si la manipulation est effectivement un succès :
Recent USB suspend statistics
Active  Device name
100,0%  Périphérique USB  5-1 : Mini Card (Sierra Wireless, Incorporated)
0,0%  Périphérique USB  1-2 : Biometric Coprocessor (STMicroelectronics) <——
0,0%  Périphérique USB usb6 : EHCI Host Controller (Linux 2.6.26-1-686 ehci_hcd)
100,0%  Périphérique USB usb5 : UHCI Host Controller (Linux 2.6.26-1-686 uhci_hcd)
0,0%  Périphérique USB usb4 : UHCI Host Controller (Linux 2.6.26-1-686 uhci_hcd)
0,0%  Périphérique USB usb3 : EHCI Host Controller (Linux 2.6.26-1-686 ehci_hcd)
0,0%  Périphérique USB usb2 : UHCI Host Controller (Linux 2.6.26-1-686 uhci_hcd)
0,0%  Périphérique USB usb1 : UHCI Host Controller (Linux 2.6.26-1-686 uhci_hcd)
Done !