Event handlers

Материал из Toshiba AC100 wiki
Перейти к навигации Перейти к поиску

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/.

Файл:Wifi-toggle.sh

  • Выключение ноута по 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

Вообще хорошо было бы улучшить программу, конфигурационные там файлы с действием для каждого значения, итд, но я не осилил.