GNU/Linux >> Belajar Linux >  >> Linux

Mematikan Daya Ke Port Usb. Atau Matikan Daya Ke Seluruh Subsistem Usb?

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

Terkait:Mengapa menghapus file pada stik USB tidak mengosongkan ruang?

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.


Linux
  1. Matikan Layar Di Terminal?

  2. Mengontrol catu daya USB (on/off) dengan Linux

  3. Matikan cache file Linux

  1. USB Type-C, bagaimana arah pengiriman daya dikendalikan?

  2. Bagaimana saya bisa mengkloning seluruh OS saya ke stik USB yang dapat di-boot?

  3. Matikan lampu LED mouse di linux

  1. Bagaimana Cara Menemukan Kecepatan Hub Usb?

  2. Matikan --skip-grant-tables di MySQL

  3. Bagaimana cara mematikan bunyi bip di terminal di Linux?