Ich habe eine USB-Lampe, die ich speziell gekauft habe, um sie zu einem bestimmten Zeitpunkt programmgesteuert auszuschalten. Daher muss ich die Stromversorgung für den USB-Anschluss unterbrechen.
Ich glaube, ich habe einen USB-Hub bei USB6. Die Lampe ist an einen der Anschlüsse in diesem Hub angeschlossen:
#myhost$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 008 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
...
...
Bus 008 Device 006: ID 050d:0234 Belkin Components F5U234 USB 2.0 4-Port Hub
Folgendes habe ich versucht:
Zwei Lösungen sind hier , die erste schon sagt:
echo disabled > /sys/bus/usb/devices/usb1/power/wakeup
echo suspend > /sys/bus/usb/devices/usb1/power/level # turn off
aber ich bekomme write error: Invalid argument
beim Versuch zu schreiben /sys/bus/usb/devices/usb1/power/level
:
$sudo bash -c 'echo disabled > /sys/bus/usb/devices/usb6/power/wakeup'
$echo suspend|sudo tee /sys/bus/usb/devices/usb6/power/level suspend
tee: /sys/bus/usb/devices/usb6/power/level: Invalid argument
$sudo bash -c 'echo suspend> /sys/bus/usb/devices/usb6/power/level'bash: line 0: echo: write error: Invalid argument
Die zweite Lösung:
sudo bash -c 'echo 0 > /sys/bus/usb/devices/usb6/power/autosuspend_delay_ms; echo auto > /sys/bus/usb/devices/usb6/power/control'
Dadurch wird die Stromversorgung des USB-Hub-Geräts ausgeschaltet.
Ich versuche auch zu folgen , dies :
Aber die Ausgabe von lsusb -t
hängt nur:
$lsusb -t
4-1:0.0: No such file or directory
4-1:0.1: No such file or directory
^C
Das hindert mich daran, diese Methode zu verwenden, um den '2-1.1'-Teil dazu zu bringen:
echo '2-1.1' > /sys/bus/usb/drivers/usb/unbind
Gibt es eine alternative Möglichkeit, diese Informationen zu erhalten?
Alternativ gibt es eine Möglichkeit, das gesamte USB-Subsystem auszuschalten? So etwas wie modprobe -r usb_etc
?
Mein Kernel ist:
$uname -r
3.2.0-4-amd64
quelle
lsusb -t
Anruf zu verfolgen , und habe in der Zeit, in der ich ihn debuggen musste, nichts Nützliches gefunden. Ich habe momentan ehrlich gesagt keine Zeit, Fehler in lsub zu finden, und ich kann sie momentan nicht einmal reproduzieren. Das hängt also wahrscheinlich von den angeschlossenen Geräten ab. Ich muss warten, bis ich nach Hause komme, um es zu versuchen reproduziere es.Antworten:
Sie können das Befehlszeilenprogramm uhubctl verwenden , um die USB-Leistung pro Port für kompatible USB-Hubs zu steuern.
Es funktioniert nur bei Hubs, die das Schalten per Port unterstützen. Beachten Sie jedoch, dass viele moderne Motherboards über USB-Hubs verfügen, die diese Funktion unterstützen.
Kompilieren:
So listen Sie den Status aller Hubs, ihrer Standorte und Ports auf, die von uhubctl gesteuert werden können:
So schalten Sie Port 5 eines einzelnen kompatiblen Hubs aus:
Wenn Sie mehr als einen kompatiblen Hub angeschlossen haben,
-l
geben Sie den Hub-Standort an, um ihn zu steuern:So schalten Sie das Gerät aus und wieder ein:
Beachten Sie, dass auch USB 3.0-Hubs unterstützt werden und einige neue USB 3.0-Hubs tatsächlich gut funktionieren.
Lesen Sie hier mehr .
Offenlegung - Ich bin der Autor von uhubctl.
quelle
Siehe Steuern eines USB-Netzteils (ein / aus) mit Linux , kurze Version, für neuere Kernel "suspend" funktioniert nicht mehr:
Es unterbricht jedoch nicht buchstäblich die Stromversorgung, sondern signalisiert dem Gerät, dass es ausgeschaltet werden soll. Es liegt an dem Gerät, die Energieverwaltung zu implementieren und das Richtige zu tun.
Sie haben viele Details in der offiziellen Dokumentation im Kernel, dort werden die verschiedenen Dateien erklärt
/sys/bus/usb/devices/.../power/
und wie man die Geräte und Ports verwaltet.Für Dinge, die keine echten USB-Geräte sind (wird Ihre USB-Lampe in Lsusb angezeigt?), Habe ich mich mit einer USB-Lampe und einem GPS-Logger versucht, der den Akku auflädt und Daten über USB überträgt, die angezeigt werden up als cp210x usb zu seriell, und auch nicht ausschalten. Ich kann das GPS mit "trennen"
echo '5-4.6' > /sys/bus/usb/drivers/usb/unbind
und es mit wieder verbindenecho '5-4.6' > /sys/bus/usb/drivers/usb/bind
aber die Batterieladeleuchte ist immer an.Aber es scheint, dass einige Hubs es richtig machen .
quelle
Es ist NICHT erforderlich, " autosuspend_delay_ms " -Dateien einzeln zu bearbeiten .
USB Autosuspend kann GLOBAL und DAUERHAFT deaktiviert werden mit:
Es dauert nur ein paar Sekunden, um den vorgeschlagenen Fix zu testen und seine Richtigkeit zu überprüfen.
Ein Ubuntu 18.04 kommentierten Screenshot unten zeigt es , wie oben beschrieben , die Ergebnisse in Host - Modifikation mit dem Neustart ALLE USB Autosuspend Einstellungen deaktiviert ist :
quelle