Ich habe eine USB-Lampe, die ich speziell gekauft habe, um sie programmgesteuert zu einer bestimmten Zeit auszuschalten, daher muss ich die Stromversorgung zu ihrem USB-Anschluss unterbrechen.
Ich glaube, ich habe einen USB-Hub an USB6. Die Lampe ist mit einem der Ports in diesem Hub verbunden:
#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 schlägt vor:
echo disabled > /sys/bus/usb/devices/usb1/power/wakeup
echo suspend > /sys/bus/usb/devices/usb1/power/level # turn off
aber ich erhalte write error: Invalid argument
beim Versuch, in /sys/bus/usb/devices/usb1/power/level
zu schreiben :
$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'
wodurch das USB-Hub-Gerät ausgeschaltet wird.
Ich habe auch versucht, dies zu befolgen:
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
Was mich daran hindert, diese Methode zu verwenden, um den Teil „2-1.1“ dazu zu bekommen:
echo '2-1.1' > /sys/bus/usb/drivers/usb/unbind
Gibt es eine alternative Möglichkeit, diese Informationen zu erhalten?
Gibt es alternativ eine Möglichkeit, die Stromversorgung des gesamten USB-Subsystems abzuschalten? Etwas wie modprobe -r usb_etc
?
Mein Kernel ist:
$uname -r
3.2.0-4-amd64
Akzeptierte Antwort:
Sie könnten mein Tool uhubctl verwenden – Befehlszeilenprogramm zur Steuerung der USB-Stromversorgung pro Port für kompatible USB-Hubs.
Es funktioniert nur auf Hubs, die eine Stromumschaltung pro Port unterstützen, aber beachten Sie, dass viele moderne Motherboards USB-Hubs haben, die diese Funktion unterstützen.
Kompilieren:
git clone https://github.com/mvp/uhubctl
cd uhubctl
make
Zur systemweiten Installation als /usr/sbin/uhubctl
:
sudo make install
Um den Status aller Hubs, ihre Standorte und Ports aufzulisten, die von uhubctl gesteuert werden können:
sudo uhubctl
(Sie können die Verwendung von sudo
vermeiden wenn Sie udev-USB-Berechtigungen konfigurieren).
So schalten Sie Port 5 eines einzelnen kompatiblen Hubs aus:
sudo uhubctl -a 0 -p 5
Wenn Sie mehr als einen kompatiblen Hub angeschlossen haben, verwenden Sie -l
So geben Sie den Hub-Standort an, um ihn zu steuern:
sudo uhubctl -a 0 -p 5 -l 3-1.2
So schalten Sie das Gerät aus und wieder ein:
sudo uhubctl -a 2 -p 5
Beachten Sie, dass USB 3.0-Hubs ebenfalls unterstützt werden und einige neue USB 3.0-Hubs tatsächlich gut funktionieren.
Lesen Sie hier mehr.