L'interazione usbfs sembra essere cambiata diverse volte da quando questa domanda è stata originariamente risolta. Quindi, ecco come accendo l'alimentazione della porta dell'hub su Ubuntu Oneiric Ocelot da una shell Bash.
Cerca il numero del bus e del dispositivo:
sudo lsusb -v|less
Individua il dispositivo nella gerarchia delle porte bus/hub utilizzando il numero del bus e del dispositivo:
sudo lsusb -t|less
La sintassi sembra essere 'bus-port.port.port.port.port...' Ad esempio, il mio mouse è connesso a un hub esterno che si connette all'hub del mio computer che si connette internamente a un hub principale:
/: 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
Quindi, '2-1.1.1' nel caso precedente. Infine, riaccendi la porta:
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
Non ho collegato un analizzatore di protocollo per vedere cosa sta effettivamente accadendo sul bus, ma so che la luce del mio mouse si spegne quando lo svincolo. Immagino che a un livello inferiore questo stia interagendo con il controller host EHCI per spegnere effettivamente la porta. Ciò è particolarmente utile per i dispositivi integrati, come le webcam UVC, che sembrano non funzionare mai correttamente e richiederebbero altrimenti un riavvio del sistema per il ripristino.
Vedi anche il udevadm
comando.
C'è una voce sys per questo in Linux. Da Documentation/usb/power-management.txt:
potenza/livello
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.)
Qualcosa come:echo on > /sys/bus/usb/devices/usb5/power/level
Potrebbe essere necessario giocare anche con l'impostazione di sospensione automatica. Senza dire al kernel di smettere di provare, potrebbe sospendere automaticamente il port.
Buona fortuna!