La interacción usbfs parece haber cambiado varias veces desde que se respondió originalmente esta pregunta. Entonces, así es como hago un ciclo de encendido del puerto del concentrador en Ubuntu Oneiric Ocelot desde un shell Bash.
Busque el bus y el número de dispositivo:
sudo lsusb -v|less
Ubique el dispositivo en la jerarquía de puertos de bus/hub utilizando el bus y el número de dispositivo:
sudo lsusb -t|less
La sintaxis parece ser 'bus-port.port.port.port.port...' Por ejemplo, mi mouse está conectado a un concentrador externo que se conecta al concentrador de mi computadora que se conecta internamente a un concentrador raíz:
/: 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
Entonces, '2-1.1.1' en el caso anterior. Finalmente, cicle la energía del puerto:
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
No he conectado un analizador de protocolos para ver lo que realmente sucede en el bus, pero sé que la luz de mi mouse se apaga cuando lo desenlazo. Supongo que en una capa inferior esto está interactuando con el controlador de host EHCI para apagar el puerto. Esto es particularmente útil para dispositivos integrados, como cámaras web UVC, que nunca parecen funcionar correctamente y, de lo contrario, requerirían un reinicio del sistema para restablecerse.
Véase también el udevadm
comando.
Hay una entrada de sistema para esto en Linux. De Documentación/usb/power-management.txt:
potencia/nivel
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.)
Algo como:echo on > /sys/bus/usb/devices/usb5/power/level
Es posible que también deba jugar con la configuración de suspensión automática. Sin decirle al núcleo que deje de intentarlo, puede suspender el puerto automáticamente.
¡Buena suerte!