Ho una lampada USB che ho acquistato appositamente per spegnerla in modo programmatico a una certa ora, quindi devo togliere l'alimentazione alla sua porta USB.
Credo di avere un hub usb su usb6. La lampada è collegata a una delle porte di questo hub:
#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
Ecco cosa ho provato:
Ci sono due soluzioni qui, la prima suggerisce:
echo disabled > /sys/bus/usb/devices/usb1/power/wakeup
echo suspend > /sys/bus/usb/devices/usb1/power/level # turn off
ma ottengo write error: Invalid argument
quando si tenta di scrivere su /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
La seconda soluzione:
sudo bash -c 'echo 0 > /sys/bus/usb/devices/usb6/power/autosuspend_delay_ms; echo auto > /sys/bus/usb/devices/usb6/power/control'
che spegne l'alimentazione al dispositivo hub USB.
Stavo anche cercando di seguire questo:
Ma l'output di lsusb -t
si blocca solo:
$lsusb -t
4-1:0.0: No such file or directory
4-1:0.1: No such file or directory
^C
Il che mi impedisce di utilizzare questo metodo per ottenere la parte "2-1.1" a questo:
echo '2-1.1' > /sys/bus/usb/drivers/usb/unbind
Esiste un modo alternativo per ottenere queste informazioni?
In alternativa, c'è un modo per interrompere l'alimentazione all'intero sottosistema USB? Qualcosa come modprobe -r usb_etc
?
Il mio kernel è:
$uname -r
3.2.0-4-amd64
Risposta accettata:
Potresti usare il mio strumento uhubctl – utilità della riga di comando per controllare l'alimentazione USB per porta per hub USB compatibili.
Funziona solo su hub che supportano la commutazione dell'alimentazione per porta, ma tieni presente che molte schede madri moderne dispongono di hub USB che supportano questa funzione.
Per compilare:
git clone https://github.com/mvp/uhubctl
cd uhubctl
make
Per installare a livello di sistema come /usr/sbin/uhubctl
:
sudo make install
Per elencare lo stato di tutti gli hub, le loro posizioni e le porte che possono essere controllate da uhubctl:
sudo uhubctl
(puoi evitare di usare sudo
se configuri i permessi USB udev).
Per spegnere la porta 5 del singolo hub compatibile:
sudo uhubctl -a 0 -p 5
Se hai più di un hub compatibile connesso, usa -l
per specificare la posizione dell'hub per controllarlo:
sudo uhubctl -a 0 -p 5 -l 3-1.2
Per spegnere e riaccendere:
sudo uhubctl -a 2 -p 5
Tieni presente che sono supportati anche hub USB 3.0 e alcuni nuovi hub USB 3.0 funzionano davvero bene.
Leggi di più qui.