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