Я хочу виконати сценарій на відключенні навушників, але обурююсь ідеєю постійного опитування статусу, коли вже є якийсь код, виконаний при його зміні.
Я хочу виконати сценарій на відключенні навушників, але обурююсь ідеєю постійного опитування статусу, коли вже є якийсь код, виконаний при його зміні.
Відповіді:
У більшості систем, якщо не у всіх, ACPI може впоратися з цією подією. Щоб перевірити це:
acpi_listen
Відключіть навушники та відключіть навушники, наприклад, вихід: (мікрофон / вуха поділяються в одному гнізді на моєму ноутбуці)
jack/headphone HEADPHONE unplug
jack/microphone MICROPHONE unplug
jack/headphone HEADPHONE plug
jack/microphone MICROPHONE plug
поміщений your-script.sh
в/etc/acpi/
Додайте файл запуску події для свого сценарію в /etc/acpi/events/
event=jack/headphone HEADPHONE unplug
action=/etc/acpi/your-script.sh
Перевірте інші файли, у яких можна дізнатися
Можливо, вам доведеться перезапустити acpid
службу, щоб перезавантажити змінити правила в/etc/acpi/events/
sudo service acpid restart
Довідка: man acpid
DBUS_SESSION_BUS_ADDRESS
змінну оточуючого середовища у файл у своєму homedir зі скриптом, розпочатим з ~/.config/autostart/dbus.desktop
. Тоді можна бігти su YOURUSER -c "DBUS_SESSION_BUS_ADDRESS=$(cat ~/.dbus_address) amixer ......."
з/etc/acpi/your-script.sh
Поточна версія вашого сценарію тепер містить sleep 0.25
команду.
sleep
заснований на таймері, тому не використовує жодних циклів обробки під час сну ...
Він використовує дуже маленький біт процесора, щоб налаштувати таймер, але sleep 1
(спати 1 секунду), sleep 60
(спати хвилину) і sleep 86400
(спати протягом дня) всі використовують однакове число циклів процесора.
Однак використання ACPI є ідеальним рішенням, оскільки ACPI керується подіями замість опитування.