Apakah mungkin untuk menghidupkan / mematikan catu daya dari USB secara manual dengan Linux?
Ada kipas pendingin USB eksternal ini (jenis yang Anda gunakan untuk mendinginkan diri sendiri, bukan PC), dan alangkah baiknya dapat mengontrolnya dari terminal, karena saya ingin menempatkan kipas angin di tempat yang jauh.
Saya kira ini juga bisa berguna untuk berbagai hal lain juga, karena ada banyak mainan USB di luar sana. Mungkin pembersih udara, dll. (Saya mendengar mereka tidak benar-benar bekerja).
power/level
sudah ditinggalkan sekarang; gunakanpower/control
saja . (power/wakeup
ok.) Selanjutnya, ia hanya menerima "otomatis" dan "menyala", bukan "menangguhkan" lagi. "auto" cukup pintar, dan jika daya tidak dimatikan saat idle, itu kesalahan perangkat. Lagi pula Anda tidak dapat mematikan daya secara manual. Untuk lebih lanjut, lihat jawaban di bawah ini oleh tlwhitec dan doc kernel: kernel.org/doc/Documentation/usb/power-management.txtJawaban:
Catatan. Informasi dalam jawaban ini relevan untuk kernel yang lebih lama (hingga 2.6.32). Lihat jawaban tlwhitec untuk informasi tentang kernel yang lebih baru.
(Anda mungkin perlu mengubah usb1 ke usb n )
Sumber: Documentation / usb / power-management.txt.gz
sumber
sudo foo > bar
diuraikan sebagai mengarahkan output kebar
, kemudian jalankanfoo
menggunakansudo
. Pengalihan gagal karena terjadi sebelum Anda mendapatkan akses root. Solusinya adalah dengan menggunakansudo sh -c 'echo disabled > /sys/bus/usb/devices/usb1/power/wakeup'
, dan seterusnya: mendapatkan root, menjalankan neraka baru untuk melakukan redirect, kemudian mengeluarkan sesuatu ke deskriptor file yang diarahkan.Menurut dokumen , ada beberapa perubahan pada manajemen daya USB dari kernel 2.6.32 , yang tampaknya menetap di 2.6.38 . Sekarang Anda harus menunggu perangkat menjadi diam , yang diatur oleh driver perangkat tertentu. Pengemudi perlu mendukungnya, jika tidak, perangkat tidak akan pernah mencapai kondisi ini. Sayangnya, sekarang pengguna tidak memiliki kesempatan untuk memaksakan ini. Namun, jika Anda beruntung dan perangkat Anda dapat menganggur, maka untuk mematikannya Anda perlu:
atau, untuk kernel sekitar 2.6.38 dan di atasnya:
Ini secara harfiah berarti, tunda sementara saat perangkat menjadi idle.
Jadi, kecuali jika kipas Anda adalah sesuatu yang "cerdas" yang dapat dilihat sebagai perangkat dan dikendalikan oleh driver, Anda mungkin tidak akan memiliki banyak keberuntungan pada kernel saat ini.
sumber
echo "on" > "/sys/bus/usb/devices/usbX/power/control"
, tapi saya pikir Anda perlu memahami tujuan aslinya. Fitur autosuspend di sini hanya untuk mengaktifkan perangkat idling untuk memasuki kondisi daya rendah (di mana ia mungkin tampak dimatikan), hanya untuk dilanjutkan nanti ketika diperlukan, baik oleh tuan rumah atau beberapa peristiwa eksternal. Itu terjadi (atau seharusnya terjadi) secara otomatis. Port itu sendiri sebenarnya tidak pernah benar-benar dimatikan. Sungguh, baca dokumen ;)dmesg | grep "usb"
dan menggunakan nomor setelah "usb", misalnya:usb 2-4.4: SerialNumber: A0848020
Anda akan menggunakan:/sys/bus/usb/devices/2-4.4/power/...
. Pastikan juga perangkat tidak digunakan. Saya membuat skrip untuk menyederhanakan proses iniSaya telah menemukan solusi ini yang setidaknya berfungsi untuk chip hub USB Terminus FE 1.1 yang dikonfigurasi dengan benar:
1.Untuk mematikan daya pada semua port USB hub, Anda dapat melepaskan hub dari kernel menggunakan:
untuk menghidupkan kembali - Anda dapat mengikatnya kembali menggunakan
2.Mengganti daya di setiap port secara individual lebih sulit: Saya dapat menggunakan hubpower untuk mengontrol setiap port - tetapi ia datang dengan kelemahan: hubpower pertama-tama memutuskan hubungan usbdevfs yang menyebabkan semua perangkat USB terputus dari sistem, setidaknya di ubuntu :
Dengan ini
ioctl
dinonaktifkan saya bisa mematikan daya port individual tanpa melepaskan semua perangkat - tetapi daya segera hidup kembali (mungkin karena kernel melihat perangkat yang tidak diinisialisasi) yang menyebabkan perangkat USB hanya untuk melakukan "restart dingin" yang merupakan apa yang saya umumnya ingin dilakukan. Hubpower tambalan saya ada di sinisumber
PowerTOP dari Intel memungkinkan Anda untuk beralih perangkat seperti periferal usb secara real-time. Ini disebut 'merdu'.
Perhatikan bahwa Bad berarti perangkat selalu menyala. Beralih ke Baik akan mematikan perangkat setelah waktu hemat yang tidak ditentukan sebelumnya (standarnya adalah 2000 ms).
Lihat dokumen PowerTOP untuk perincian tentang cara membuat perubahan ini permanen.
Ini menghasilkan skrip konfigurasi untuk Anda (seperti dijelaskan oleh poster lain di utas ini).
CATATAN: Skrip ini tidak memengaruhi daya pin USB (yang selalu aktif).
Ini hanya mengirim protokol driver untuk mengaktifkan dan menonaktifkan perangkat.
Jika Anda ingin mengontrol daya pin, Anda bisa menggunakan hub USB pintar yang didukung, atau mikrokontroler .
sumber
Anda dapat menggunakan alat saya uhubctl untuk mengontrol daya USB per port untuk hub USB yang kompatibel.
sumber
Saya ingin melakukan ini, dan dengan perangkat USB saya, saya tidak bisa. Saya menulis cara hacky bagaimana melakukannya di sini:
http://pintant.cat/2012/05/12/power-off-usb-device/ .
Singkatnya: Saya menggunakan relai USB untuk membuka / menutup V CC kabel USB lain ...
sumber
berfungsi untuk ubuntu
sumber
Daya USB 5v selalu menyala (bahkan ketika komputer dimatikan, pada beberapa komputer dan pada beberapa port.) Anda mungkin perlu memprogram Arduino dengan semacam sakelar, dan mengendalikannya melalui perpustakaan Serial dari USB yang terhubung ke komputer.
Dengan kata lain, kombinasi ini beralih tutorial dan ini tutorial tentang berkomunikasi melalui Serial libary untuk Arduino terpasang di melalui USB.
sumber
Alasan mengapa orang memposting pertanyaan seperti ini adalah karena fitur " EVIL " yang menakutkan - USB Auto-Suspend " feature ".
Penangguhan otomatis menurunkan daya ke perangkat USB "idle" dan kecuali jika driver perangkat mendukung fitur ini dengan benar, perangkat dapat menjadi tidak dapat dihubungi. Jadi menyalakan / mematikan port USB adalah gejala dari masalah, bukan masalah itu sendiri.
Saya akan menunjukkan kepada Anda bagaimana secara GLOBAL menonaktifkan secara penangguhan otomatis, meniadakan kebutuhan untuk mengaktifkan & menonaktifkan port USB secara manual:
Jawaban singkat:
Anda TIDAK perlu mengedit " autosuspend_delay_ms " secara individual: USB autosuspend dapat dinonaktifkan secara global dan PERSISTEN menggunakan perintah berikut:
Sebuah Ubuntu 18.04 layar-ambil berikut pada akhir dari "Panjang Jawaban" menggambarkan bagaimana hasil saya dicapai.
Jawaban panjang:
Memang benar bahwa Dokumentasi Kernel Manajemen Daya USB menyatakan autosuspend akan ditinggalkan dan sebagai gantinya " autosuspend_delay_ms " digunakan untuk menonaktifkan autosuspend USB:
NAMUN pengujian saya mengungkapkan bahwa pengaturan
usbcore.autosuspend=-1
di / etc / default / grub seperti di bawah ini dapat digunakan sebagai toggle GLOBAL untuk fungsi autosuspend USB - Anda TIDAK perlu mengedit satu per satu " autosuspend_delay_ms individual file " .Dokumen yang sama yang ditautkan di atas menyatakan nilai "0" ENABLED dan nilai negatif DISABLED :
Di layar-ambil Ubuntu 18.04 beranotasi di bawah ini yang menggambarkan bagaimana hasil saya dicapai (dan dapat direproduksi), tolong katakan bahwa standarnya adalah "0" ( diaktifkan ) di autosuspend_delay_ms .
Kemudian perhatikan bahwa setelah pengaturan ONLY
usbcore.autosuspend=-1
di Grub, nilai-nilai ini sekarang negatif ( dinonaktifkan ) setelah reboot. Ini akan menyelamatkan saya dari kesulitan mengedit nilai-nilai individual dan sekarang dapat skrip menonaktifkan autosuspend USB.Semoga ini membuat penonaktifan penonaktifan USB otomatis lebih mudah dan lebih banyak skrip-
sumber
Saya mempunyai masalah ketika menghubungkan ponsel Android saya, saya tidak dapat mengisi daya ponsel saya karena tombol power hidup dan mati ... PowerTop biarkan saya menemukan pengaturan ini dan berguna untuk memperbaiki masalah ini (nilai otomatis menyebabkan masalah):
sumber