Schalten Sie die USB-Stromversorgung unter OS X/Mac Mini aus

Ich muss die USB-Stromversorgung mithilfe eines Skripts oder einer Software aus- und wieder einschalten. Idealerweise sollte es möglich sein, jeden Port separat ein- und auszuschalten, aber auch das gleichzeitige Aus- und Einschalten aller Ports ist ausreichend. Die Maschine, die ich verwende, ist Mac Mini. Hat jemand eine Lösung dafür?

Mit USB-Strom meine ich Vbus, die 5V/500mA-Verbindung. Ich verstehe, dass die Datenverbindung auch abgeschaltet wird und es ist in Ordnung, aber es reicht mir nicht, dass die Datenverbindung abgeschaltet ist und Vbus weiterhin mit Strom versorgt wird. Dieser Bedarf ergibt sich aus der Notwendigkeit, Mobiltelefone für automatische Tests ständig verbunden zu halten. Einige Geräte-/Akku-Kombinationen mögen es nicht, ständig angeschlossen zu sein, und die Akkus schwellen in weniger als einem Jahr an.

Ich erkenne an, dass es mehrere Variationen dieser Frage gibt. Bisher keine Lösung, die ich verwenden könnte. Ich liste hier meine bisherigen Erkenntnisse auf:

  • Es ist möglich, dies zu erreichen, indem Sie einen externen USB-HUB mit eigener Stromversorgung verwenden und dessen Stromversorgung steuern. Dies ist jedoch keine Option für mich (selbst hochwertige Hubs haben andere Probleme in meiner Verwendung verursacht).

  • Es ist möglich, USB durch Entfernen von .kext-Dateien zu deaktivieren. Unter anderem wird es im OS X Sicherheitskonfigurationsdokument erklärt . Dies erfordert jedoch einen Neustart und ich bin mir nicht sicher, ob es wirklich die USB-Stromversorgung oder nur die Daten deaktiviert.

  • Es gibt viele Behauptungen, dass es einfach nicht möglich ist. OS X selbst tut dies jedoch, wenn es ein Gerät erkennt, das zu viel Strom verbraucht, sodass zumindest Hardwareunterstützung vorhanden ist. Diese Fehlermeldung wird aus /System/Library/Extension/IOUSBFamily.kext/Contents/Resources/English.lproj/Localizable.strings kopiert: „Trennen Sie das Gerät, das zu viel Strom verbraucht, um USB-Geräte wieder zu aktivieren.“ (Natürlich weiß ich nicht, ob die Deaktivierung durch Ausschalten der USB-Stromversorgung erfolgt, aber ich würde annehmen, dass dies eine natürliche Aktion für das Gerät ist, das zu viel davon verbraucht).

  • Es scheint, dass auf dem Macbook die USB-Anschlüsse normalerweise mit Strom versorgt werden, auch wenn der Laptop im Ruhezustand ist. Obwohl dies mein Problem nicht löst, hängt es irgendwie zusammen.

Der Grund, warum ich das brauche, ist, dass ich ein Testsystem habe, bei dem mehrere Geräte an einen Mac Mini angeschlossen sind. Die Geräte werden auch über USB aufgeladen. Es hat sich herausgestellt, dass, wenn das Gerät ständig an ein Ladegerät angeschlossen ist, der Akku in etwa einem Jahr aufgebläht ist, was das Gerät unbrauchbar, unsicher und möglicherweise gefährlich macht. Das Abschalten des Stroms, wenn es nicht benötigt wird, würde die Lebensdauer der Geräte erheblich verlängern.

Möchten Sie den gesamten Port deaktivieren oder nur die vom Port kommende Stromversorgung? Dein Titel ist verwirrend.
Es reicht mir, den Strom abzuschalten. Aufgrund der Natur von USB wird der Port effektiv deaktiviert. Aber es reicht mir nicht, den Datenfluss/das Laden des Treibers zu deaktivieren und den Vbus mit Strom zu versorgen.
Ich habe an jedem Port ein Telefon angeschlossen und möchte diese Telefone nicht ständig aufladen, sondern nur, wenn ich mit ihnen über USB kommuniziere.
Das kann nicht passieren. Die USB-Spezifikation erfordert die Bereitstellung von 5 Volt. Wenn Sie das ausschalten, funktioniert der USB nicht mehr. Was das Aufladen betrifft, so ist Ihr Gerät, sobald es 100% erreicht, intelligent genug, um sich vom Ladestromkreis zu trennen.
Es kann vorkommen. Wie ich im Rahmen meiner Frage erkläre, tut OS X dies, wenn es ein Gerät erkennt, das zu viel Strom verbraucht. Nur weiß ich nicht, ob es eine andere Möglichkeit gibt, das auszulösen, als ein Gerät einzusetzen, das zu viel Strom verbraucht. -- Ich wünschte, du hättest recht damit, dass das Telefon schlau genug ist. Leider habe ich jetzt vier verschiedene Geräte mit einem aufgeblähten Akku, nachdem ich ein Jahr lang am Stromnetz war. Darüber wird im Internet viel diskutiert, daher gehe ich nicht ins Detail.
Und es ist in Ordnung für mich, dass USB nicht mehr funktioniert. Deshalb brauche ich auch eine Möglichkeit zum Einschalten.
Du verstehst nicht richtig. Sie können nicht nur den Strom ausschalten, es ist der ganze Port oder nichts.
Ich glaube du missverstehst. Es ist ok für mich, "den ganzen Port" down zu haben. Oder sogar der gesamte Root-Hub und alle USB-Ports in einem Mac Mini. Die einzige Voraussetzung, die ich habe, ist, dass der Vbus keinen Strom in das physisch angeschlossene Gerät einspeist und ich den USB-Port / die USB-Ports später wieder aufdrehen kann.

Antworten (1)

Ich habe vor einigen Jahren viel Zeit damit verbracht, dieses Problem zu erforschen - meine Schlussfolgerung ist, dass es mit den uns zur Verfügung stehenden Informationen einfach nicht möglich ist. Die Steuerung der Stromversorgung erfolgt auf einer viel niedrigeren Ebene als der macOS-Kernel selbst, sodass es nicht nur darum geht, macOS zu konfigurieren oder an der richtigen Kernel-Datenstruktur herumzustöbern. Sie müssen die Firmware ändern, was für normale Benutzer nicht möglich ist.

Die einzige funktionierende Lösung, die ich gefunden habe, ist die Verwendung eines Hubs. Das hat bei mir sehr gut funktioniert. Wenn Sie einen Hub haben, der Ganged Power Switching unterstützt, können Sie den Strom für jede Gang (Gruppe von Ports) einfach aus- und einschalten. Wenn Sie einen Hub haben, der Power Switching pro Port unterstützt, können Sie jeden Port am Hub einzeln ein- und ausschalten.

Hier können Sie Software für macOS zur Steuerung des Hubs herunterladen:

https://github.com/mvp/uhubctl

Beachten Sie, dass dieses Dienstprogramm nur die Steuerung von Hubs unterstützt, die eine Leistungsumschaltung pro Port zulassen. Die Website enthält eine Liste der unterstützten USB-Hubs.

Nachdem ich mich für die Hub-Lösung entschieden hatte, war der schwierigste Teil wirklich, einen USB-Hub zu finden, der Ganged- oder Per-Port-Power-Switching unterstützt. Der eigentliche Softwareteil ist sehr einfach.

Es ist falsch, hier ganged zu verwenden. Alle USB-Hubs unterstützen entweder kein Power Switching oder ein Ganged Switching (d. h. für alle Ports gleichzeitig) oder unterstützen ein (individuelles) Power Switching pro Port. uhubctl unterstützt nur die Leistungsumschaltung pro Port, Ganged-Hubs werden nicht erkannt (ich bin uhubctl-Autor).
Ich habe bearbeitet, um klarer zu machen, was ich meinte. In diesem Fall spielt es keine Rolle, da die Frage nur das Ausschalten des gesamten Hubs erforderte. Ich habe vor vielen Jahren ein entsprechendes Dienstprogramm für uhubctl unter Linux implementiert, um ein Problem mit einer CAN-Schnittstelle zu lösen, die ihren eigenen Zustand beschädigen würde, daher habe ich keine tiefgreifenden Erfahrungen mit uhubctl - danke für das Teilen der Details!
Vielen Dank für die Bearbeitung, aber Sie sollten das Wort Ganged wirklich entfernen - uhubctl unterstützt keine Hubs mit Ganged Power Switching. Außerdem kann uhubctl nicht den gesamten Hub ausschalten - alle Ports ja, aber der Hub selbst funktioniert weiterhin.
Ich weiß, dass es es nicht unterstützt - das habe ich in der Antwort geschrieben. Allerdings könnten andere Dienstprogramme. Und ja, ich weiß, dass es nicht den ganzen Hub abschaltet - es schaltet alle Ports ab - das habe ich auch geschrieben.
Ist das 2021 immer noch nicht möglich? (Ich habe eine ähnliche Frage geöffnet, aber sie wurde geschlossen und ich wurde auf diese verwiesen.) @jksoegaard
Ich glaube nicht, nein. Zumindest habe ich seitdem keine Entwicklungen in diesem Bereich gesehen.