GNU/Linux >> Linux Esercitazione >  >> Linux

Spegnimento della porta USB. O spegnere l'intero sottosistema USB?

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).

Correlati:perché l'eliminazione di un file su una chiavetta USB non libera spazio?

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.


Linux
  1. Spegnere uno schermo nel terminale?

  2. Linux USB:accendere e spegnere l'alimentazione?

  3. Controllo di un alimentatore USB (on/off) con Linux

  4. Disattiva la cache dei file di Linux

  5. Come disattivare lo schermo con il collegamento in Linux?

3 modi per spegnere Debian

Come disattivare la navigazione delle directory su Apache e Nginx

Come trovare la velocità dell'hub USB?

Come disattivare il ritorno a capo automatico in meno

Come si controlla quanta potenza può fornire una porta USB?

Come posso disattivare il segnale acustico nel terminale in Linux?