Die USBFS-Interaktion scheint sich einige Male geändert zu haben, seit diese Frage ursprünglich beantwortet wurde. So schalte ich die Stromversorgung des Hub-Ports auf Ubuntu Oneiric Ocelot von einer Bash-Shell aus ein.
Suchen Sie nach der Bus- und Gerätenummer:
sudo lsusb -v|less
Lokalisieren Sie das Gerät in der Bus-/Hub-Port-Hierarchie anhand der Bus- und Gerätenummer:
sudo lsusb -t|less
Die Syntax scheint 'bus-port.port.port.port.port...' zu sein. Zum Beispiel ist meine Maus mit einem externen Hub verbunden, der mit dem Hub meines Computers verbunden ist, der intern mit einem Root-Hub verbunden ist:
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/2p, 480M
|__ Port 1: Dev 2, If 0, Class=hub, Driver=hub/6p, 480M
|__ Port 1: Dev 3, If 0, Class=hub, Driver=hub/3p, 480M
|__ Port 1: Dev 6, If 0, Class=HID, Driver=usbhid, 1.5M
Also '2-1.1.1' im obigen Fall. Schalten Sie schließlich die Stromversorgung des Ports aus und wieder ein:
echo '2-1.1.1'|sudo tee /sys/bus/usb/drivers/usb/unbind
sleep 1
echo '2-1.1.1'|sudo tee /sys/bus/usb/drivers/usb/bind
Ich habe keinen Protokollanalysator angeschlossen, um zu sehen, was tatsächlich auf dem Bus passiert, aber ich weiß, dass das Licht meiner Maus ausgeht, wenn ich sie entbinde. Ich vermute, dass dies auf einer niedrigeren Ebene mit dem EHCI-Hostcontroller interagiert, um den Port tatsächlich auszuschalten. Dies ist besonders nützlich für eingebettete Geräte wie UVC-Webcams, die scheinbar nie richtig funktionieren und andernfalls einen Systemneustart zum Zurücksetzen erfordern würden.
Siehe auch udevadm
Befehl.
Unter Linux gibt es dafür einen sys-Eintrag. Aus Documentation/usb/power-management.txt:
Leistung/Stufe
This file contains one of three words: "on", "auto",
or "suspend". You can write those words to the file
to change the device's setting.
"on" means that the device should be resumed and
autosuspend is not allowed. (Of course, system
suspends are still allowed.)
"auto" is the normal state in which the kernel is
allowed to autosuspend and autoresume the device.
"suspend" means that the device should remain
suspended, and autoresume is not allowed. (But remote
wakeup may still be allowed, since it is controlled
separately by the power/wakeup attribute.)
Etwas wie:echo on > /sys/bus/usb/devices/usb5/power/level
Möglicherweise müssen Sie auch mit der Autosuspend-Einstellung spielen. Ohne dem Kernel zu sagen, dass er den Versuch beenden soll, kann er den Port automatisch suspendieren.
Viel Glück!