Saya mencoba mengubah nilai /sys/bus/usb/devices/4-3/power/wakeup
pada setiap boot (4-3 menurut saya lsusb
, itu adalah keyboard ID).
Nilai default adalah:
# cat /sys/bus/usb/devices/4-3/power/wakeup
enabled
Pengeditan "online" klasik berfungsi seperti yang diharapkan:
# echo disabled > /sys/bus/usb/devices/4-3/power/wakeup
# cat /sys/bus/usb/devices/4-3/power/wakeup
disabled
Saya menggunakan distro systemd jadi saya ingin menggunakan cara systemd untuk mengedit "file temp"
Saya telah membuat file berikut:
# cat /etc/tmpfiles.d/disable-usb-wakeup.conf
w /sys/bus/usb/devices/4-3/power/wakeup - - - - disabled
tetapi setelah setiap boot saya masih memiliki nilai default dalam file ini (yaitu diaktifkan)
Apakah saya melakukan sesuatu yang salah?
EDIT:
Di sini tes lain:
# cat /etc/tmpfiles.d/scheduler.conf
w /sys/block/sda/queue/scheduler - - - - deadline
dan yang ini berfungsi dengan baik! Setelah boot saya mendapatkan:
# cat /sys/block/sda/queue/scheduler
noop [deadline] cfq
(yang standar adalah penjadwal cfq)
Jadi, mengapa yang ini berhasil dan yang lain tidak?
- Karena
/sys/bus/usb/devices/4-3/power/wakeup
symlink to/sys/devices/pci0000:00/0000:00:12.1/usb4/4-3/
? - Karena
/sys/bus/usb/devices/4-3/power/wakeup
hanya mengandung satu kata? (yaitu tidak ada spasi)
arch-linux
systemd
sysfs
eang
sumber
sumber
Jawaban:
Saya tidak percaya
tmpfiles.d
adalah cara yang tepat untuk pergi ke sini. Anda benar-benar harus melakukanudev
aturan. Lihat:Dan itu berlanjut, berjalan di pohon perangkat induk. Tetapi pertimbangkan itu, hanya dengan menggunakan informasi di atas, Anda dapat melakukan:
Dan saya percaya hal itu berlaku untuk sebagian besar naskah Anda. Anda akan ingin meletakkan di atas setelah aturan 60, saya pikir. Dan sungguh, Anda harus melakukan ini untuk sisanya - hanya
sleep
sedikit dalam skrip Anda cukup alasan - ini menyiratkan kondisi balapan.udev
adalah orang yang menambah dan mengatur parameter ini - itu yang mengisisysfs
. Hanya meminta untuk melakukan pekerjaan yang sudah dilakukan.Dan untuk keyboard Anda, Anda harus melakukan hal yang sama - dan lampu latar. Dapatkan saja informasi yang Anda perlukan tentang perangkat-perangkat ini
udevadm
, tulis beberapa aturan danudevadm test
semuanya.sumber
ACTION=="add", SUBSYSTEM=="scsi_host", KERNEL=="host*", ATTR{link_power_management_policy}="min_power"
. Bisakah Anda jelaskan mengapa aturan UDEV Anda di sini tidak menyertakan pernyataan TINDAKAN dan tidak dipisahkan koma?ACTION
perlu sedikit.udevadm test /devices/pci0000:00/0000:00:1f.2/ata1/host0/scsi_host/host0/
[Gagasan asli saya bahwa ini bisa jadi karena systemd-tmpfiles menggunakan aliran I / O dan tidak dimaksudkan untuk digunakan dengan proc atau sys salah . Hipotesis kedua saya, tentang pentingnya baris baru, juga salah ...]
Saya baru saja melihat
/usr/lib/systemd/system/systemd-tmpfiles-setup.service
dan ada beberapa bit di sana yang mungkin menarik:The 'Wants', 'After', dan 'Before' memberikan beberapa informasi tentang kapan ini terjadi; Saya pikir perangkat Anda terdaftar pada titik ini, tetapi mungkin ada sesuatu berikutnya yang mengatur ulang nilai sysfs.
Bit yang paling membantu adalah baris ExecStart, karena itulah perintah sebenarnya yang bertanggung jawab atas layanan ini. Ini sebenarnya disebutkan dalam
man systemd-tmpfiles
:Jadi, untuk menguji ini, tetapkan nilai sysfs ke "diaktifkan" dan kemudian coba jalankan
systemd-tmpfiles --create
yang akan memproses arahan 'w' Anda di /etc/tmpfiles.d. Jika itu berhasil (seharusnya!), Maka Anda tahu bahwa metode systemd-tmpfile baik-baik saja, hanya Anda harus melakukannya nanti dalam proses boot, mungkin dengan:Yang berarti menulis file layanan Anda sendiri; jika karena alasan tertentu itu tidak berfungsi, Anda selalu dapat menulis file layanan untuk skrip untuk melakukannya
echo
.sumber
/proc/acpi/wakeup
berfungsi dengan baik, misalnya ( wiki.archlinux.org/index.php/Systemd#Temporary_files )echo -n disabled > /sys/...
karya, jadi mungkin keberadaan baris baru tidak peduli dalam kasus ini. Tapi tmpfiles masih tidak bekerja, saya sudah mencoba baikdisabled\n
dan"disabled\n"
Saya baru-baru ini belajar cara yang sulit bahwa /etc/tmpfiles.d diproses sebelum / sys diisi sehingga Anda harus membuat aturan udev yang tepat sehingga mereka diaktifkan setiap kali perangkat muncul atau ... pergi dengan cara yang kotor (tetapi jika Anda tanya saya, yang lebih fleksibel) dan buat layanan yang menjalankan skrip dengan perintah untuk menulis ke / sys.
Lihatlah contoh di sini tentang cara membuat skrip tersebut, https://bbs.archlinux.org/viewtopic.php?id=148170 yang dapat Anda isi dengan sesuatu seperti:
sumber
Ini mungkin agak berlebihan, tetapi dalam kasus saya kedua metode yang disebutkan dalam jawaban lain gagal. The
tmpfiles.d
membuat perubahan sebelum/sys/
entri dihuni danudev
metode tidak menemukan entri (yang merupakan perangkat jaringan virtualbr0
). Karena itu, saya membuat file layanan baru. Cukup buat file baru/etc/systemd/system/disable-usb-wakeup.service
dan tempatkan yang berikut di dalam:Sekarang, untuk memastikan unit ini dijalankan pada setiap masalah boot saja:
Dan Anda harus baik untuk pergi.
sumber