Event handlers
input-event-daemon
https://github.com/gandro/input-event-daemon
Программа позволяет повесить на любые системные события определённые действия.
Чтобы посмотреть, какое событие и на каком устройстве генерируется, нужно запустить демона в режиме монитора:
sudo input-event-daemon -m
Теперь при нажатии на разные кнопки, закрывании/открывании крышки, действиях с тачпадом и втыкании/вытыкании наушников будет появляться информация о событиях.
После этого в man'е нужно посмотреть, как выглядит конфиг и создать нужный на основе отловленных событий.
Вот мой конфиг:
# # /etc/input-event-daemon.conf # [Global] # Keyboard listen = /dev/input/event0 # Power Button listen = /dev/input/event2 # Lid Switch listen = /dev/input/event3 # Headset Jack listen = /dev/input/event7 [Keys] POWER = wifi-toggle.sh CTRL+ALT+ESC = systemctl poweroff [Switches] LID:1 = cat /sys/class/backlight/pwm-backlight/brightness > /tmp/.brightness_value; echo 0 > /sys/class/backlight/pwm-backlight/brightness LID:0 = cat /tmp/.brightness_value > /sys/class/backlight/pwm-backlight/brightness HEADPHONE_INSERT:1 = amixer sset "Int Spk" mute HEADPHONE_INSERT:0 = amixer sset "Int Spk" unmute
Реализовано:
- При закрытии/открытии крышки соответственно выключается/включается подсветка экрана.
- Выключение внутреннего динамика при подключении наушников.
- Включение/выключение wifi по нажатию на кнопку Power. Для этого нужно положить скрипт wifi-toggle.sh, к примеру, в /usr/local/bin/.
- Выключение ноута по Ctrl+Alt+Esc. Если у вас не systemd, тогда замените просто на poweroff.
Недостатки:
- при использовании комбинации из двух кнопок (например META+F1), событие генерится при отпускании второй кнопки. Поэтому, чтобы сделать авторепит, надо как-то исхитряться. Правильное определение репита не нужно, есть другой софт.
- при открытии крышки ноут не просыпается, поэтому после нажати кнопки на клавиатуре событие об открытии крышки не приходит. Скорее всего это касается всех обработчиков событий. С некоторых пор не актуально, ибо на ядре 3.1.10 события генерируются всегда - проблем с определением открытия/закрытия крышки нет.
inputmon
В связи с тем, что input-event-daemon умеет всё то же самое и ещё больше, считаю, что данная прога более не актуальна. http://dl.dropbox.com/u/20806392/untitled.c
Это исходник программы, которая следит за /dev/input/eventX и выполняет действие при изменении состояния в 0 и 1, например:
inputmon /dev/input/input0 "action0.sh" "action1.sh"
Собственно, с использованием amixer, насколько я помню, и переключается выход с колонок на наушники. Чуть позже моуг посмотреть точные параметры запуска.
Сон по закрытию крышки, кстати, реализован так же, ибо всяческие gnome-settings-daemon и прочие удалены.
Cобранный http://dl.dropbox.com/u/20806392/inputmon
Вообще хорошо было бы улучшить программу, конфигурационные там файлы с действием для каждого значения, итд, но я не осилил.