Event handlers

Материал из Toshiba AC100 wiki
Версия от 08:13, 15 октября 2014; Unknown user (обсуждение)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

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
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, к примеру, в /usr/local/bin/. wifi-toggle - Выключение ноута по 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 Вообще хорошо было бы улучшить программу, конфигурационные там файлы с действием для каждого значения, итд, но я не осилил.