Ist es unter Linux möglich, Netzteile manuell über USB ein- und auszuschalten?
Es gibt diesen externen USB-Lüfter (die Art, mit der Sie sich abkühlen, nicht den PC), und es wäre schön, ihn vom Terminal aus steuern zu können, da ich den Lüfter irgendwo weit weg positionieren möchte.
Ich nehme an, dass dies auch für eine Vielzahl anderer Dinge nützlich sein könnte, da es viele USB-Spielzeuge gibt. Vielleicht Luftreiniger usw. (ich habe gehört, dass sie nicht wirklich funktionieren).
power/level
ist jetzt veraltet; Verwenden Siepower/control
stattdessen . (power/wakeup
ist in Ordnung.) Außerdem akzeptiert es nur noch "auto" und "on", nicht mehr "suspend". "auto" ist intelligent genug, und wenn die Stromversorgung im Leerlauf nicht ausgeschaltet wird, ist das Gerät schuld. Auf jeden Fall können Sie das Gerät nicht manuell ausschalten. Weitere Informationen finden Sie in der Antwort von tlwhitec und im Dokument des Kernels: kernel.org/doc/Documentation/usb/power-management.txtAntworten:
Hinweis. Die Informationen in dieser Antwort sind für die älteren Kernel relevant (bis zu 2.6.32). Siehe tlwhitec Antwort für die Informationen zu dem neueren Kernel.
(Möglicherweise müssen Sie usb1 in usb n ändern. )
Quelle: Dokumentation / usb / power-management.txt.gz
quelle
sudo foo > bar
als direkt für die Ausgabebar
foo
sudo
analysiert und dann mit ausgeführt wird . Die Umleitung schlägt fehl, da dies geschieht, bevor Sie Root-Zugriff erhalten. Die Lösung besteht darin, zu verwendensudo sh -c 'echo disabled > /sys/bus/usb/devices/usb1/power/wakeup'
und so weiter: Root zu gewinnen, eine neue Hölle auszuführen, um eine Umleitung durchzuführen, und dann etwas in den umgeleiteten Dateideskriptor auszugeben.Laut den Dokumenten gab es einige Änderungen an der USB-Energieverwaltung von Kernel 2.6.32 , die sich in 2.6.38 niederzulassen scheinen . Jetzt müssen Sie warten, bis das Gerät inaktiv ist. Dies wird vom jeweiligen Gerätetreiber geregelt. Der Treiber muss dies unterstützen, sonst erreicht das Gerät diesen Status nie. Leider hat der Benutzer jetzt keine Chance, dies zu erzwingen. Wenn Sie jedoch Glück haben und Ihr Gerät inaktiv werden kann, müssen Sie Folgendes tun, um dies auszuschalten:
oder für Kernel um 2.6.38 und höher:
Dies bedeutet wörtlich, dass Sie in dem Moment suspendieren müssen, in dem das Gerät inaktiv wird.
Wenn Ihr Lüfter also nicht etwas "Intelligentes" ist, das als Gerät angesehen und von einem Treiber gesteuert werden kann, werden Sie auf aktuellen Kerneln wahrscheinlich nicht viel Glück haben.
quelle
echo "on" > "/sys/bus/usb/devices/usbX/power/control"
, aber ich glaube , Sie müssen den ursprünglichen Zweck zu verstehen. Die Autosuspend-Funktion dient lediglich dazu, Leerlaufgeräten den Eintritt in einen Energiesparmodus zu ermöglichen (wo sie möglicherweise ausgeschaltet erscheinen), um später wieder aufgenommen zu werden, wenn dies vom Host oder einem externen Ereignis benötigt wird. Das passiert (oder sollte passieren) automatisch. Der Port selbst wird eigentlich nie wirklich ausgeschaltet. Wirklich, lesen Sie die Dokumente ;)dmesg | grep "usb"
und verwenden Sie die Nummer nach "usb", zum Beispiel:usb 2-4.4: SerialNumber: A0848020
Sie verwenden :/sys/bus/usb/devices/2-4.4/power/...
. Stellen Sie außerdem sicher, dass das Gerät nicht verwendet wird. Ich habe ein Skript erstellt, um diesen Prozess zu vereinfachenIch habe diese Lösungen gefunden, die zumindest für ordnungsgemäß konfigurierte Terminus FE 1.1 USB-Hub-Chips funktionieren:
1.Um alle USB-Anschlüsse eines Hubs auszuschalten, können Sie den Hub vom Kernel trennen, indem Sie Folgendes verwenden:
Um die Stromversorgung wieder einzuschalten, können Sie sie mit wieder binden
2.Das Schalten der Stromversorgung an jedem Port ist schwieriger: Ich konnte Hubpower verwenden , um jeden Port zu steuern - aber es hat einen Nachteil: Hubpower trennt zuerst die USB-Geräte, wodurch alle USB-Geräte zumindest unter Ubuntu vom System getrennt werden ::
Mit dieser
ioctl
Deaktivierung konnte ich die Stromversorgung einzelner Ports ausschalten, ohne alle Geräte abzutrennen - aber die Stromversorgung wird sofort wieder hergestellt (wahrscheinlich, weil der Kernel ein nicht initialisiertes Gerät sieht), was dazu führt, dass das USB-Gerät nur einen "Kaltstart" durchführt, was ich auch tue wollte im Allgemeinen tun. Meine gepatchte Hubpower ist hierquelle
Mit PowerTOP von Intel können Sie Geräte wie USB-Peripheriegeräte in Echtzeit umschalten . Diese werden als "Tunables" bezeichnet.
Beachten Sie, dass Bad bedeutet, dass das Gerät immer eingeschaltet ist. Durch Umschalten auf " Gut" wird das Gerät nach der voreingestellten inaktiven Speicherzeit ausgeschaltet (Standard ist 2000 ms).
Weitere Informationen dazu, wie Sie diese Änderungen dauerhaft vornehmen können, finden Sie in den PowerTOP- Dokumenten.
Es generiert die Konfigurationsskripte für Sie (so ziemlich wie von anderen Postern in diesem Thread beschrieben).
HINWEIS: Diese Skripte wirken sich nicht auf die USB-Pin-Stromversorgung aus (die immer eingeschaltet ist).
Diese senden nur das Treiberprotokoll, um ein Gerät zu aktivieren und zu deaktivieren.
Wenn Sie die Pin-Leistung steuern möchten, können Sie entweder einen unterstützten Smart-USB-Hub oder besser noch einen Mikrocontroller verwenden .
quelle
Sie können mein Tool uhubctl verwenden , um die USB-Leistung pro Port für kompatible USB-Hubs zu steuern.
quelle
Ich wollte das tun und konnte es mit meiner USB-Hardware nicht. Ich habe hier eine hackige Methode geschrieben:
http://pintant.cat/2012/05/12/power-off-usb-device/ .
Kurz gesagt: Ich habe ein USB-Relais verwendet, um den V CC eines anderen USB-Kabels zu öffnen / schließen ...
quelle
funktioniert für Ubuntu
quelle
USB 5V ist immer eingeschaltet (auch wenn der Computer ausgeschaltet ist, auf einigen Computern und an einigen Anschlüssen). Sie müssen wahrscheinlich ein Arduino mit einem Schalter programmieren und es über die serielle Bibliothek von USB an den Stecker anschließen Computer.
Mit anderen Worten, eine Kombination aus diesem Switch-Tutorial und diesem Tutorial zur Kommunikation über Serial Libary mit Arduino über USB.
quelle
Der Grund, warum Leute solche Fragen stellen, liegt in der gefürchteten "in der Tat" EVIL " - USB Auto-Suspend " -Funktion ".
Durch die automatische Unterbrechung wird die Stromversorgung eines "inaktiven" USB-Geräts abgeschaltet. Wenn der Treiber des Geräts diese Funktion nicht korrekt unterstützt, kann das Gerät nicht mehr kontaktiert werden. Das Ein- und Ausschalten eines USB-Anschlusses ist also ein Symptom des Problems und nicht das eigentliche Problem.
Ich zeige dir, wie man GLOBAL geht automatische Suspendieren deaktivieren, ohne dass die USB-Anschlüsse manuell und ausgeschaltet werden müssen:
Kurze Antwort:
Sie müssen " autosuspend_delay_ms " NICHT einzeln bearbeiten : USB-Autosuspend kann global und dauerhaft mit den folgenden Befehlen deaktiviert werden:
Ein Ubuntu 18.04 Ende der "Langen Antwort" folgt ein Screenshot von , der zeigt, wie meine Ergebnisse erzielt wurden.
Lange Antwort:
Es ist wahr, dass in der USB Power Management Kernel-Dokumentation angegeben ist, dass Autosuspend veraltet ist und stattdessen " autosuspend_delay_ms " zum Deaktivieren von USB-Autosuspend verwendet wird:
JEDOCH zeigt meine Tests , die Einstellung
usbcore.autosuspend=-1
in / etc / default / grub wie unten kann eingesetzt werden GLOBAL für USB Autosuspend Toggle Funktionalitäts- Sie NICHT zu bearbeiten einzelne "müssen autosuspend_delay_ms “ -Dateien.Das gleiche Dokument, das oben verlinkt ist, besagt, dass ein Wert von "0" AKTIVIERT und ein negativer Wert deaktiviert ist :
Beachten Sie im kommentierten Ubuntu 18.04- Screenshot unten, der zeigt, wie meine Ergebnisse erzielt wurden (und reproduzierbar sind), dass der Standardwert in autosuspend_delay_ms "0" ( aktiviert ) ist .
Beachten Sie dann, dass diese Werte nach der Einstellung NUR
usbcore.autosuspend=-1
in Grub nach dem Neustart jetzt negativ ( deaktiviert ) sind. Dies erspart mir die Bearbeitung einzelner Werte und kann jetzt das automatische Deaktivieren der USB-Autosuspendierung per Skript deaktivieren.Ich hoffe, dies macht das Deaktivieren der USB-Autosuspendierung ein wenig einfacher und skriptfähiger.
quelle
Ich hatte ein Problem beim Anschließen meines Android-Telefons. Ich konnte mein Telefon nicht aufladen, da der Netzschalter ein- und ausgeschaltet wurde. Mit PowerTop konnte ich diese Einstellung finden und das Problem beheben (der automatische Wert verursachte ein Problem):
quelle