J'ai trouvé ces solutions qui fonctionnent au moins pour la puce hub USB Terminus FE 1.1 correctement configurée :
Pour couper l'alimentation de tous les ports USB d'un hub, vous pouvez délier le hub du noyau en utilisant :
echo "1-4.4.4" > /sys/bus/usb/drivers/usb/unbind
pour remettre le courant - vous pouvez le lier à nouveau en utilisant
echo "1-4.4.4" > /sys/bus/usb/drivers/usb/bind
La commutation de l'alimentation sur chaque port individuellement est plus délicate : j'ai pu utiliser hubpower pour contrôler chaque port - mais il y a un inconvénient : hubpower déconnecte d'abord le usbdevfs, ce qui entraîne la déconnexion de tous les périphériques USB du système, du moins sous ubuntu :
usb_ioctl.ioctl_code = USBDEVFS_DISCONNECT;
rc = ioctl(fd, USBDEVFS_IOCTL, &usb_ioctl);
Avec cette ioctl
J'ai pu désactiver l'alimentation d'un port individuel sans détacher tous les périphériques, mais l'alimentation est immédiatement rétablie (probablement parce que le noyau voit un périphérique non initialisé), ce qui oblige le périphérique USB à effectuer un "redémarrage à froid", ce que je voulais généralement faire. Mon hubpower patché est aquí
10 votes
Je récapitule pour Linux >= 2.6.38 : Le dossier
power/level
est désormais obsolète ; utilisezpower/control
au lieu de . (power/wakeup
est ok). De plus, il n'accepte que "auto" et "on", et plus "suspend". "auto" est assez intelligent, et si l'alimentation n'est pas coupée en mode veille, c'est la faute de l'appareil. De toute façon, vous ne pouvez pas éteindre l'appareil manuellement. Pour en savoir plus, voir la réponse ci-dessous par tlwhitec et la doc du noyau : kernel.org/doc/Documentation/usb/power-management.txt0 votes
Duplicata possible de stackoverflow.com/q/1163824/1967396
3 votes
Cette fonctionnalité mérite vraiment une bonne interface graphique
1 votes
Faut-il un matériel spécial ? Les réponses ne sont pas très claires,
0 votes
@VojtechDohnal Voir unix.stackexchange.com/a/321945/111181