GNU/Linux >> Znalost Linux >  >> Linux

Vypnutí napájení USB portu. Nebo vypnout napájení celého subsystému USB?

Mám usb lampu, kterou jsem si speciálně koupil, abych ji v určitou dobu programově vypnul, takže potřebuji odpojit napájení jejího usb portu.

Věřím, že mám usb-hub na usb6. Lampa je připojena k jednomu z portů v tomto rozbočovači:

#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

Zde je to, co jsem zkusil:

Jsou zde dvě řešení, první navrhuje:

echo disabled > /sys/bus/usb/devices/usb1/power/wakeup 
echo suspend > /sys/bus/usb/devices/usb1/power/level  # turn off

ale dostávám write error: Invalid argument při pokusu o zápis do /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

Druhé řešení:

sudo bash -c 'echo 0 > /sys/bus/usb/devices/usb6/power/autosuspend_delay_ms; echo auto > /sys/bus/usb/devices/usb6/power/control'

který vypne napájení zařízení usb-hub.

Také jsem se snažil sledovat toto:

Ale výstup lsusb -t jen visí:

$lsusb -t
4-1:0.0: No such file or directory
4-1:0.1: No such file or directory
^C

Což mi brání použít tuto metodu k získání části „2-1.1“:

echo '2-1.1' > /sys/bus/usb/drivers/usb/unbind

Existuje alternativní způsob, jak tyto informace získat?

Případně, existuje způsob, jak vypnout napájení celého subsystému usb? Něco jako modprobe -r usb_etc ?

Moje jádro je:

$uname -r
3.2.0-4-amd64

Přijatá odpověď:

Můžete použít můj nástroj uhubctl – nástroj příkazového řádku pro ovládání napájení USB na port pro kompatibilní rozbočovače USB.

Funguje pouze na rozbočovačích, které podporují přepínání napájení podle portu, ale všimněte si, že mnoho moderních základních desek má rozbočovače USB, které tuto funkci podporují.

Kompilace:

git clone https://github.com/mvp/uhubctl
cd uhubctl
make

Chcete-li nainstalovat v rámci celého systému jako /usr/sbin/uhubctl :

sudo make install

Chcete-li zobrazit stav všech hubů, jejich umístění a porty, které lze ovládat pomocí uhubctl:

sudo uhubctl

(můžete se vyhnout použití sudo pokud nakonfigurujete oprávnění udev USB).

Související:Proč smazání souboru na USB flash disku neuvolní místo?

Vypnutí napájení na portu 5 jednoho kompatibilního rozbočovače:

sudo uhubctl -a 0 -p 5

Pokud máte připojeno více než jeden kompatibilní rozbočovač, použijte -l k určení umístění rozbočovače pro jeho ovládání:

sudo uhubctl -a 0 -p 5 -l 3-1.2

Vypnutí a zapnutí:

sudo uhubctl -a 2 -p 5

Všimněte si, že jsou podporovány také rozbočovače USB 3.0 a několik nových rozbočovačů USB 3.0 skutečně funguje dobře.

Přečtěte si více zde.


Linux
  1. Jak zjistit rychlost USB hubu?

  2. Vypnout obrazovku v terminálu?

  3. Linux USB:zapínání a vypínání napájení?

  1. Jak vypnout zalamování slov za méně

  2. Vypněte --skip-grant-tables v MySQL

  3. Kdy vypnout TCP SACK?

  1. Ovládání USB napájecího zdroje (on/off) s Linuxem

  2. Vypněte mezipaměť souborů Linux

  3. Vypnutí interaktivního režimu příkazu cp (copy) (cp :overwrite ?)