L'interaction usbfs semble avoir changé plusieurs fois depuis la réponse initiale à cette question. Alors, voici comment je cycle l'alimentation du port du concentrateur sur Ubuntu Oneiric Ocelot à partir d'un shell Bash.
Rechercher le numéro de bus et d'appareil :
sudo lsusb -v|less
Localisez l'appareil dans la hiérarchie des ports bus/hub à l'aide du numéro de bus et d'appareil :
sudo lsusb -t|less
La syntaxe semble être 'bus-port.port.port.port.port...' Par exemple, ma souris est connectée à un hub externe qui se connecte au hub de mon ordinateur qui se connecte en interne à un hub racine :
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/2p, 480M
|__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M
|__ Port 1: Dev 3, If 0, Class=hub, Driver=hub/3p, 480M
|__ Port 1: Dev 6, If 0, Class=HID, Driver=usbhid, 1.5M
Donc, '2-1.1.1' dans le cas ci-dessus. Enfin, mettez le port sous tension :
echo '2-1.1.1'|sudo tee /sys/bus/usb/drivers/usb/unbind
sleep 1
echo '2-1.1.1'|sudo tee /sys/bus/usb/drivers/usb/bind
Je n'ai pas branché d'analyseur de protocole pour voir ce qui se passe réellement sur le bus, mais je sais que la lumière de ma souris s'éteint lorsque je la dissocie. Je suppose qu'à une couche inférieure, cela interagit avec le contrôleur hôte EHCI pour réellement couper l'alimentation sur le port. Ceci est particulièrement utile pour les appareils intégrés, tels que les webcams UVC, qui ne semblent jamais fonctionner correctement et nécessiteraient autrement un redémarrage du système pour se réinitialiser.
Voir aussi le udevadm
commande.
Il existe une entrée sys pour cela sous Linux. Depuis Documentation/usb/power-management.txt :
puissance/niveau
This file contains one of three words: "on", "auto", or "suspend". You can write those words to the file to change the device's setting. "on" means that the device should be resumed and autosuspend is not allowed. (Of course, system suspends are still allowed.) "auto" is the normal state in which the kernel is allowed to autosuspend and autoresume the device. "suspend" means that the device should remain suspended, and autoresume is not allowed. (But remote wakeup may still be allowed, since it is controlled separately by the power/wakeup attribute.)
Quelque chose comme :echo on > /sys/bus/usb/devices/usb5/power/level
Vous devrez peut-être également jouer avec le paramètre de suspension automatique. Sans dire au noyau d'arrêter d'essayer, il peut suspendre le port automatiquement.
Bonne chance !