7 votes

Désactiver l'alimentation USB sur OS X/Mac Mini

J'ai besoin de désactiver (et d'activer) l'alimentation USB à l'aide d'un script ou d'un logiciel. Idéalement, il devrait être possible de désactiver/activer chaque port séparément, mais également de désactiver/activer l'alimentation de tous les ports en même temps est suffisant. La machine que j'utilise est un Mac Mini. Quelqu'un a une solution pour cela?

Par alimentation USB, je veux dire Vbus, la connexion 5V/500mA. Je comprends que la connexion de données est également coupée et que c'est bien, mais ce n'est pas suffisant pour moi que la connexion de données soit coupée et que Vbus reste alimenté. Ce besoin découle de la nécessité de maintenir les téléphones mobiles constamment connectés pour des tests automatiques. Certains combinaisons appareil/batterie n'aiment pas être constamment connectées et les batteries commencent à gonfler en moins d'un an.

Je reconnais qu'il existe plusieurs variantes de cette question. Jusqu'à présent, aucune solution que je pourrais utiliser. Je vais lister ici mes découvertes jusqu'à présent:

  • il est possible d'accomplir cela en utilisant un concentrateur USB auto-alimenté externe et en contrôlant son alimentation. Cependant, ce n'est pas une option pour moi (même les concentrateurs de qualité ont causé d'autres problèmes dans mon utilisation).

  • il est possible de désactiver l'USB en supprimant des fichiers .kext. Entre autres sources, il est expliqué dans le document de configuration de sécurité OS X Security configuration document. Cependant, cela nécessite un redémarrage et je ne suis pas sûr si cela désactive vraiment l'alimentation USB ou simplement les données.

  • il y a de nombreuses affirmations selon lesquelles ce n'est tout simplement pas possible. Cependant, OS X le fait lui-même lorsqu'il détecte un périphérique qui consomme trop de puissance, donc il y a au moins un support matériel. Ce message d'erreur est copié à partir de /System/Library/Extension/IOUSBFamily.kext/Contents/Resources/English.lproj/Localizable.strings: "Débranchez le périphérique utilisant trop de puissance pour réactiver les périphériques USB." (bien sûr, je ne sais pas si la désactivation est faite en éteignant l'alimentation USB, mais je supposerais que c'est une action naturelle pour le périphérique qui en consomme trop).

  • il semble que sur un macbook les ports USB soient normalement alimentés même quand l'ordinateur portable est en veille. Bien que ceci ne résolve pas mon problème, c'est un peu lié.

La raison pour laquelle j'ai besoin de cela est que j'ai un système de test où plusieurs appareils sont branchés sur un mac mini. Les appareils se chargent également via USB. Il s'est avéré que si l'appareil est constamment connecté à un chargeur, sa batterie gonfle en environ un an, rendant l'appareil inutilisable, insecure et potentiellement dangereux. Éteindre l'alimentation lorsque ce n'est pas nécessaire, prolongerait considérablement la durée de vie des appareils.

0 votes

Voulez-vous désactiver l'ensemble du port ou simplement l'alimentation provenant du port ? Votre titre est confus.

0 votes

Il me suffit de désactiver l'alimentation. En raison de la nature de l'USB, cela désactive efficacement le port. Mais il ne me suffit pas de désactiver le flux de données/le chargement des pilotes et de conserver l'alimentation Vbus.

0 votes

J'ai un téléphone connecté à chaque port et je ne veux pas les charger en continu, mais seulement lorsque je communique avec eux via USB.

4voto

Jose Chavez Points 645

J'ai passé beaucoup de temps à rechercher ce problème il y a quelques années - ma conclusion est qu'il n'est tout simplement pas possible avec les informations disponibles pour nous. Le contrôle de l'alimentation se fait à un niveau bien inférieur au noyau macOS lui-même, donc ce n'est pas juste une question de configuration de macOS ou de manipulation de la bonne structure de données du noyau. Vous devez modifier le firmware, ce qui n'est pas possible pour les utilisateurs ordinaires.

La seule solution fonctionnelle que j'ai trouvée est d'utiliser un hub. Cela a très bien fonctionné pour moi. Si vous avez un hub qui prend en charge la commutation d'alimentation groupée, vous pouvez facilement éteindre/allumer l'alimentation pour chaque groupe (ensemble de ports). De même, si vous avez un hub qui prend en charge la commutation d'alimentation par port, vous pouvez éteindre/allumer chaque port sur le hub individuellement.

Vous pouvez télécharger le logiciel pour macOS permettant de contrôler le hub ici :

https://github.com/mvp/uhubctl

Notez que cet utilitaire ne prend en charge que le contrôle des hubs permettant la commutation d'alimentation par port. Le site Web propose une liste des hubs USB pris en charge.

Une fois que j'ai opté pour la solution du hub, la partie la plus difficile a vraiment été de trouver un hub USB qui prend en charge la commutation d'alimentation groupée ou par port. La partie logicielle proprement dite est très facile.

1 votes

Il est incorrect d'utiliser "ganged" ici. Tous les concentrateurs USB ne prennent pas en charge la commutation d'alimentation, ou prennent en charge la commutation "ganged" (c'est-à-dire, pour tous les ports à la fois), ou prennent en charge la commutation d'alimentation par port (individuelle). uhubctl ne prend en charge que la commutation d'alimentation par port, les concentrateurs "ganged" ne seront pas reconnus (je suis l'auteur de uhubctl).

0 votes

J'ai modifié pour clarifier ce que je voulais dire. Dans ce cas, cela n'a pas vraiment d'importance car la question ne nécessitait que de couper complètement le hub. J'ai mis en place un utilitaire correspondant à uhubctl sur Linux pour résoudre un problème il y a de nombreuses années avec une interface CAN qui corrompait son propre état, donc je n'ai pas une expérience approfondie de uhubctl - merci de partager les détails!

0 votes

Merci pour l'édition, mais vous devriez vraiment supprimer le mot ganged - uhubctl ne prend pas en charge les concentrateurs avec une commutation d'alimentation ganged. De plus, uhubctl ne peut pas éteindre complètement le concentrateur - tous les ports oui, mais le concentrateur lui-même continuera de fonctionner.

0voto

T Powers Points 461

La façon dont je l'ai fait était d'ouvrir mon câble USB, de couper le fil rouge VBUS, puis de le brancher à une alimentation de laboratoire que je peux contrôler en utilisant python.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X