Saya memiliki lampu usb yang khusus saya beli untuk mematikannya secara terprogram pada waktu tertentu, sehingga saya perlu mencabut daya ke port usbnya.
Saya yakin saya memiliki usb-hub di usb6. Lampu terhubung ke salah satu port di hub ini:
#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
Inilah yang saya coba:
Dua solusi ada di sini, yang pertama menyarankan:
echo disabled > /sys/bus/usb/devices/usb1/power/wakeup
echo suspend > /sys/bus/usb/devices/usb1/power/level # turn off
tapi saya mendapatkan write error: Invalid argument
saat mencoba menulis ke /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
Solusi kedua:
sudo bash -c 'echo 0 > /sys/bus/usb/devices/usb6/power/autosuspend_delay_ms; echo auto > /sys/bus/usb/devices/usb6/power/control'
yang mematikan daya ke perangkat usb-hub.
Saya juga mencoba mengikuti ini:
Tapi output dari lsusb -t
hanya hang:
$lsusb -t
4-1:0.0: No such file or directory
4-1:0.1: No such file or directory
^C
Yang mencegah saya menggunakan metode ini untuk mendapatkan bagian '2-1.1' untuk ini:
echo '2-1.1' > /sys/bus/usb/drivers/usb/unbind
Apakah ada cara alternatif untuk mendapatkan informasi ini?
Atau, apakah ada cara untuk mematikan daya ke seluruh subsistem usb? Sesuatu seperti modprobe -r usb_etc
?
Kernel saya adalah:
$uname -r
3.2.0-4-amd64
Jawaban yang Diterima:
Anda dapat menggunakan alat saya uhubctl – utilitas baris perintah untuk mengontrol daya USB per port untuk hub USB yang kompatibel.
Ini hanya berfungsi pada hub yang mendukung peralihan daya per-port, tetapi perhatikan bahwa banyak motherboard modern memiliki hub USB yang mendukung fitur ini.
Untuk mengompilasi:
git clone https://github.com/mvp/uhubctl
cd uhubctl
make
Untuk menginstal seluruh sistem sebagai /usr/sbin/uhubctl
:
sudo make install
Untuk membuat daftar status semua hub, lokasi dan portnya yang dapat dikontrol oleh uhubctl:
sudo uhubctl
(Anda dapat menghindari penggunaan sudo
jika Anda mengonfigurasi izin USB udev).
Untuk mematikan daya pada port 5 dari satu hub yang kompatibel:
sudo uhubctl -a 0 -p 5
Jika Anda memiliki lebih dari satu hub yang kompatibel, gunakan -l
untuk menentukan lokasi hub untuk mengontrolnya:
sudo uhubctl -a 0 -p 5 -l 3-1.2
Untuk mematikan daya lalu hidupkan:
sudo uhubctl -a 2 -p 5
Perhatikan bahwa hub USB 3.0 juga didukung, dan beberapa hub USB 3.0 baru benar-benar berfungsi dengan baik.
Baca selengkapnya di sini.