Est-il possible d'activer / désactiver manuellement les alimentations à partir de l'USB avec Linux?
Il y a ce ventilateur de refroidissement USB externe (le type que vous utilisez pour vous rafraîchir, pas le PC), et ce serait bien de pouvoir le contrôler depuis le terminal, car je veux positionner le ventilateur quelque part loin.
Je suppose que cela pourrait également être utile pour une variété d'autres choses, car il y a beaucoup de jouets USB là-bas. Peut-être des purificateurs d'air, etc. (j'ai entendu dire qu'ils ne fonctionnent pas vraiment).
power/level
est maintenant obsolète; utiliser à lapower/control
place . (power/wakeup
c'est ok.) De plus, il n'accepte que "auto" et "on", et non 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. Quoi qu'il en soit, vous ne pouvez pas couper l'alimentation manuellement. Pour plus d'informations, voir la réponse ci-dessous par tlwhitec et le document du noyau: kernel.org/doc/Documentation/usb/power-management.txtRéponses:
Remarque. Les informations contenues dans cette réponse sont pertinentes pour les noyaux plus anciens (jusqu'à 2.6.32). Voir la réponse de tlwhitec pour plus d'informations sur les noyaux plus récents.
(Vous devrez peut-être changer usb1 en usb n )
Source: Documentation / usb / power-management.txt.gz
la source
sudo foo > bar
est analysée comme directe de la sortiebar
, puis exécutée enfoo
utilisantsudo
. La redirection échoue car elle se produit avant que vous n'obteniez l'accès root. La solution est d'utilisersudo sh -c 'echo disabled > /sys/bus/usb/devices/usb1/power/wakeup'
, et ainsi de suite: gagner la racine, lancer un nouvel enfer pour effectuer une redirection, puis sortir quelque chose dans le descripteur de fichier redirigé.Selon la documentation , il y a eu plusieurs changements dans la gestion de l'alimentation USB des noyaux 2.6.32 , qui semblent s'installer dans 2.6.38 . Vous devrez maintenant attendre que le périphérique devienne inactif , ce qui est régi par le pilote de périphérique particulier. Le pilote doit le prendre en charge, sinon le périphérique n'atteindra jamais cet état. Malheureusement, l'utilisateur n'a plus aucune chance de forcer cela. Cependant, si vous avez de la chance et que votre appareil peut devenir inactif, pour désactiver cette fonction, vous devez:
ou, pour les noyaux autour de 2.6.38 et plus:
Cela signifie littéralement, suspendre au moment où l'appareil devient inactif.
Donc, à moins que votre ventilateur ne soit quelque chose d '"intelligent" qui peut être vu comme un périphérique et contrôlé par un pilote, vous n'aurez probablement pas beaucoup de chance sur les noyaux actuels.
la source
echo "on" > "/sys/bus/usb/devices/usbX/power/control"
, mais je pense que vous devez comprendre l'objectif initial. La fonction de suspension automatique est ici simplement pour permettre aux périphériques inactifs d'entrer dans un état de faible consommation (où il peut sembler éteint), pour être repris plus tard lorsque cela est nécessaire, soit par l'hôte, soit par un événement externe. Cela se produit (ou devrait se produire) automatiquement. Le port lui-même n'est en fait jamais vraiment désactivé. Vraiment, lisez la documentation ;)dmesg | grep "usb"
et utiliser le numéro après « USB », par exemple:usb 2-4.4: SerialNumber: A0848020
vous utiliserez:/sys/bus/usb/devices/2-4.4/power/...
. Assurez-vous également que l'appareil n'est pas utilisé. J'ai créé un script pour simplifier ce processusJ'ai trouvé ces solutions qui fonctionnent au moins pour la puce de concentrateur USB Terminus FE 1.1 correctement configurée:
Pour éteindre tous les ports USB d'un concentrateur, vous pouvez dissocier le concentrateur du noyau en utilisant:
pour remettre sous tension - vous pouvez le relier en utilisant
2.La commutation de l'alimentation sur chaque port individuellement est plus délicate: j'ai pu utiliser hubpower pour contrôler chaque port - mais cela présente un inconvénient: hubpower déconnecte d'abord les usbdevfs, ce qui provoque la déconnexion de tous les périphériques USB du système, du moins sur Ubuntu :
Avec cette
ioctl
désactivation, j'ai pu désactiver l'alimentation des ports individuels sans détacher tous les périphériques - mais l'alimentation se rallume immédiatement (probablement en raison du noyau voyant un périphérique non initialisé), ce qui oblige le périphérique USB à faire un "redémarrage à froid", ce que je voulait généralement faire. Mon hubpower patché est icila source
PowerTOP d'Intel vous permet de basculer entre des périphériques tels que des périphériques USB en temps réel. Celles-ci sont appelées «accordables».
Notez que Bad signifie que l'appareil est toujours allumé. Le passage à Bon éteindra l'appareil après le temps de sauvegarde inactif prédéfini (la valeur par défaut est 2000 ms).
Consultez la documentation PowerTOP pour plus de détails sur la manière de rendre ces modifications permanentes.
Il génère les scripts de configuration pour vous (à peu près comme décrit par d'autres auteurs sur ce fil).
REMARQUE: ces scripts n'affectent pas l'alimentation de la broche USB (qui est toujours activée).
Ceux-ci envoient uniquement le protocole du pilote pour activer et désactiver un périphérique.
Si vous souhaitez contrôler l'alimentation des broches, vous pouvez utiliser un concentrateur USB intelligent pris en charge ou, mieux encore, un microcontrôleur .
la source
Vous pouvez utiliser mon outil uhubctl pour contrôler l'alimentation USB par port pour les concentrateurs USB compatibles.
la source
Je voulais faire cela, et avec mon matériel USB, je ne pouvais pas. J'ai écrit une manière hacky comment le faire ici:
http://pintant.cat/2012/05/12/power-off-usb-device/ .
En bref: j'ai utilisé un relais USB pour ouvrir / fermer le V CC d'un autre câble USB ...
la source
fonctionne pour ubuntu
la source
L'alimentation USB 5v est toujours allumée (même lorsque l'ordinateur est éteint, sur certains ordinateurs et sur certains ports.) Vous devrez probablement programmer un Arduino avec une sorte de commutateur et le contrôler via la bibliothèque série à partir de l'USB branché sur le ordinateur.
En d'autres termes, une combinaison de ce tutoriel sur le commutateur et de ce tutoriel sur la communication via la bibliothèque série avec Arduino branché via USB.
la source
La raison pour laquelle les gens affichent des questions telles que cela est dû à l'effet dreaded- « EVIL « - Auto-Suspend USB » fonction ».
La suspension automatique coupe l'alimentation d'un périphérique USB «inactif» et à moins que le pilote du périphérique ne prenne correctement en charge cette fonction, le périphérique peut devenir incontrôlable. Donc, allumer / éteindre un port USB est un symptôme du problème, pas le problème en soi.
Je vais vous montrer comment désactiver GLOBALEMENT la suspension automatique, éliminant ainsi le besoin d'activer et de désactiver manuellement les ports USB:
Réponse courte:
Vous n'avez PAS besoin de modifier individuellement " autosuspend_delay_ms ": la suspension automatique USB peut être désactivée globalement et PERSISTANTMENT à l'aide des commandes suivantes:
Une capture d'écran Ubuntu 18.04 suit à la fin de la "Longue réponse" illustrant comment mes résultats ont été atteints.
Longue réponse:
Il est vrai que la documentation du noyau de gestion de l'alimentation USB indique que la suspension automatique doit être obsolète et à sa place, « autosuspend_delay_ms » est utilisé pour désactiver la suspension automatique USB:
CEPENDANT, mes tests révèlent que le réglage
usbcore.autosuspend=-1
dans / etc / default / grub comme ci-dessous peut être utilisé comme une bascule GLOBALE pour la fonctionnalité de suspension automatique USB - vous n'avez PAS besoin d'éditer les fichiers individuels " autosuspend_delay_ms ".Le même document lié ci-dessus indique qu'une valeur de "0" est ENABLED et une valeur négative est DISABLED :
Dans la capture d'écran annotée d' Ubuntu 18.04 ci -dessous illustrant comment mes résultats ont été obtenus (et reproductibles), veuillez noter que la valeur par défaut est "0" ( activé ) dans autosuspend_delay_ms .
Notez ensuite qu'après le réglage UNIQUEMENT
usbcore.autosuspend=-1
dans Grub, ces valeurs sont maintenant négatives ( désactivées ) après le redémarrage. Cela m'évitera la peine de modifier des valeurs individuelles et peut maintenant désactiver la suspension automatique USB.J'espère que cela rendra la désactivation de la suspension automatique USB un peu plus facile et plus scriptable.
la source
J'ai eu un problème lors de la connexion de mon téléphone Android, je ne pouvais pas charger mon téléphone car l'interrupteur d'alimentation allumé puis éteint ... PowerTop m'a laissé trouver ce paramètre et a été utile pour résoudre le problème (la valeur automatique était à l'origine du problème):
la source