Saya memiliki lampu usb yang secara khusus saya beli untuk mematikannya secara terprogram pada waktu tertentu, jadi saya perlu menghapus daya ke port usb-nya.
Saya percaya 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:
Ada dua solusi 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 mengerti write error: Invalid argument
ketika 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 tidak mematikan daya ke perangkat usb-hub.
Saya juga mencoba mengikuti ini :
Tetapi hasil 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
sumber
lsusb -t
panggilan dan saya tidak menemukan sesuatu yang berguna dalam waktu saya harus men-debug itu. Jujur saya tidak punya waktu sekarang untuk menemukan bug di lsub, dan saya bahkan tidak bisa mereproduksi sekarang, jadi itu mungkin tergantung pada perangkat yang terhubung. Saya harus menunggu untuk pulang untuk mencoba memperbanyaknya.Jawaban:
Anda dapat menggunakan utilitas baris perintah uhubctl untuk mengontrol daya USB per port untuk hub USB yang kompatibel.
Ini hanya berfungsi pada hub yang mendukung switching daya per-port, tetapi perhatikan bahwa banyak motherboard modern memiliki hub USB yang mendukung fitur ini.
Untuk mengkompilasi:
Untuk daftar status semua hub, lokasi dan port-nya yang dapat dikontrol oleh uhubctl:
Untuk mematikan daya pada port 5 dari hub yang kompatibel tunggal:
Jika Anda memiliki lebih dari satu hub yang kompatibel, gunakan
-l
untuk menentukan lokasi hub untuk mengendalikannya:Untuk mengaktifkan, matikan, lalu hidupkan:
Perhatikan bahwa hub USB 3.0 juga didukung, dan beberapa hub USB 3.0 baru benar-benar berfungsi dengan baik.
Baca lebih lanjut di sini .
Disclosure - Saya penulis uhubctl.
sumber
Lihat Mengontrol catu daya USB (on / off) dengan linux , versi singkat, untuk kernel yang lebih baru "menangguhkan" tidak berfungsi lagi:
Tapi itu tidak benar-benar memotong daya, itu memberi sinyal perangkat ke poweroff, terserah perangkat untuk menerapkan manajemen daya dan melakukan hal yang benar.
Anda memiliki banyak detail dalam dokumentasi resmi di kernel, di sana ia menjelaskan berbagai file di dalamnya
/sys/bus/usb/devices/.../power/
dan cara mengelola perangkat dan porta.Untuk hal-hal yang bukan perangkat usb nyata (apakah lampu usb Anda muncul di lsusb?) Anda mungkin kurang beruntung, saya telah mencoba sendiri dengan lampu usb dan dengan gps logger yang mengisi baterai dan mentransfer data melalui usb yang menunjukkan sebagai usb cp210x ke serial, dan poweroff juga tidak. Saya dapat "mencabut" gps dengan
echo '5-4.6' > /sys/bus/usb/drivers/usb/unbind
dan menghubungkan kembali denganecho '5-4.6' > /sys/bus/usb/drivers/usb/bind
tetapi ligth pengisian baterai selalu menyala.Tetapi tampaknya beberapa hub melakukannya dengan benar .
sumber
Hal ini tidak perlu untuk individual edit " autosuspend_delay_ms " file.
USB autosuspend dapat dinonaktifkan secara GLOBAL dan PERSISTEN dengan:
Hanya butuh beberapa detik untuk menguji perbaikan yang diajukan dan memvalidasi kebenarannya.
Sebuah Ubuntu 18.04 dijelaskan screenshot di bawah ini menggambarkan modifikasi seperti di atas dijelaskan yang menghasilkan tuan rumah reboot dengan SEMUA pengaturan otomatis USB dinonaktifkan:
sumber