Saya ingin mengeksekusi skrip pada headphone putuskan tetapi saya tidak menyukai gagasan polling konstan status ketika sudah ada beberapa kode yang dieksekusi ketika itu diubah.
Saya ingin mengeksekusi skrip pada headphone putuskan tetapi saya tidak menyukai gagasan polling konstan status ketika sudah ada beberapa kode yang dieksekusi ketika itu diubah.
Jawaban:
Dalam kebanyakan sistem jika tidak semua, ACPI dapat menangani acara ini. Untuk mengujinya:
acpi_listen
Cabut & pasang kembali headphone, contoh output: (mic / telinga berbagi di jack yang sama di laptop saya)
jack/headphone HEADPHONE unplug
jack/microphone MICROPHONE unplug
jack/headphone HEADPHONE plug
jack/microphone MICROPHONE plug
Dimasukkan ke your-script.sh
dalam/etc/acpi/
Tambahkan file pemicu acara untuk skrip Anda di /etc/acpi/events/
event=jack/headphone HEADPHONE unplug
action=/etc/acpi/your-script.sh
Periksa file lain di sana untuk belajar.
Anda mungkin perlu memulai kembali acpid
layanan untuk memuat kembali aturan yang diubah/etc/acpi/events/
sudo service acpid restart
Referensi: man acpid
DBUS_SESSION_BUS_ADDRESS
variabel environment ke dalam file di homedir Anda dengan skrip yang dimulai ~/.config/autostart/dbus.desktop
. Maka Anda dapat lari su YOURUSER -c "DBUS_SESSION_BUS_ADDRESS=$(cat ~/.dbus_address) amixer ......."
dari/etc/acpi/your-script.sh
Versi skrip Anda sekarang berisi sleep 0.25
perintah.
sleep
timer berbasis sehingga tidak menggunakan setiap siklus pengolahan saat tidur ...
Memang menggunakan sedikit CPU untuk mengatur timer, tetapi sleep 1
(tidur 1 detik), sleep 60
(tidur sebentar) dan sleep 86400
(tidur selama sehari) semua menggunakan siklus CPU nomor yang sama.
Namun menggunakan ACPI adalah solusi yang tepat karena ACPI didorong oleh peristiwa dan bukan berdasarkan polling.