Event handlers: различия между версиями

Материал из Toshiba AC100 wiki
Перейти к навигации Перейти к поиску
Нет описания правки
 
(Fix link to wifi-toggle.sh (it was wifi-toggle on wikispaces). Fix page representation.)
 
Строка 1: Строка 1:
==input-event-daemon==  
==input-event-daemon==  
https://github.com/gandro/input-event-daemon
https://github.com/gandro/input-event-daemon
Программа позволяет повесить на любые системные события определённые действия.
Программа позволяет повесить на любые системные события определённые действия.
Чтобы посмотреть, какое событие и на каком устройстве генерируется, нужно запустить демона в режиме монитора:
Чтобы посмотреть, какое событие и на каком устройстве генерируется, нужно запустить демона в режиме монитора:
<pre>
<pre>
Строка 7: Строка 9:
</pre>
</pre>
Теперь при нажатии на разные кнопки, закрывании/открывании крышки, действиях с тачпадом и втыкании/вытыкании наушников будет появляться информация о событиях.
Теперь при нажатии на разные кнопки, закрывании/открывании крышки, действиях с тачпадом и втыкании/вытыкании наушников будет появляться информация о событиях.
После этого в man'е нужно посмотреть, как выглядит конфиг и создать нужный на основе отловленных событий.
После этого в man'е нужно посмотреть, как выглядит конфиг и создать нужный на основе отловленных событий.
Вот мой конфиг:
Вот мой конфиг:
<pre>
<pre>
Строка 25: Строка 29:


[Keys]
[Keys]
POWER = wifi-toggle
POWER = wifi-toggle.sh
CTRL+ALT+ESC = systemctl poweroff
CTRL+ALT+ESC = systemctl poweroff


Строка 35: Строка 39:
</pre>
</pre>
Реализовано:
Реализовано:
- При закрытии/открытии крышки соответственно выключается/включается подсветка экрана.
* При закрытии/открытии крышки соответственно выключается/включается подсветка экрана.
- Выключение внутреннего динамика при подключении наушников.
* Выключение внутреннего динамика при подключении наушников.
- Включение/выключение wifi по нажатию на кнопку Power. Для этого нужно положить скрипт '''wifi-toggle''', к примеру, в /usr/local/bin/.
* Включение/выключение wifi по нажатию на кнопку Power. Для этого нужно положить скрипт '''wifi-toggle.sh''', к примеру, в /usr/local/bin/.
[http://paz00.ruwifi-toggle wifi-toggle]
[[File:wifi-toggle.sh]]
- Выключение ноута по Ctrl+Alt+Esc. Если у вас не systemd, тогда замените просто на poweroff.
* Выключение ноута по Ctrl+Alt+Esc. Если у вас не systemd, тогда замените просто на poweroff.


Недостатки:
Недостатки:
<span style="text-decoration: line-through;">- при использовании комбинации из двух кнопок (например META+F1), событие генерится при отпускании второй кнопки. Поэтому, чтобы сделать авторепит, надо как-то исхитряться.</span> Правильное определение репита не нужно, есть другой софт.
* <span style="text-decoration: line-through;">при использовании комбинации из двух кнопок (например META+F1), событие генерится при отпускании второй кнопки. Поэтому, чтобы сделать авторепит, надо как-то исхитряться.</span> Правильное определение репита не нужно, есть другой софт.
<span style="text-decoration: line-through;">- при открытии крышки ноут не просыпается, поэтому после нажати кнопки на клавиатуре событие об открытии крышки не приходит. Скорее всего это касается всех обработчиков событий.</span> С некоторых пор не актуально, ибо на ядре 3.1.10 события генерируются всегда - проблем с определением открытия/закрытия крышки нет.
* <span style="text-decoration: line-through;">при открытии крышки ноут не просыпается, поэтому после нажати кнопки на клавиатуре событие об открытии крышки не приходит. Скорее всего это касается всех обработчиков событий.</span> С некоторых пор не актуально, ибо на ядре 3.1.10 события генерируются всегда - проблем с определением открытия/закрытия крышки нет.


==inputmon==  
==inputmon==  
'''В связи с тем, что input-event-daemon умеет всё то же самое и ещё больше, считаю, что данная прога более не актуальна.'''
'''В связи с тем, что input-event-daemon умеет всё то же самое и ещё больше, считаю, что данная прога более не актуальна.'''
http://dl.dropbox.com/u/20806392/untitled.c
http://dl.dropbox.com/u/20806392/untitled.c
Это исходник программы, которая следит за /dev/input/eventX и выполняет действие при изменении состояния в 0 и 1, например:
Это исходник программы, которая следит за /dev/input/eventX и выполняет действие при изменении состояния в 0 и 1, например:
<pre>
<pre>
Строка 53: Строка 58:
</pre>
</pre>
Собственно, с использованием amixer, насколько я помню, и переключается выход с колонок на наушники. Чуть позже моуг посмотреть точные параметры запуска.
Собственно, с использованием amixer, насколько я помню, и переключается выход с колонок на наушники. Чуть позже моуг посмотреть точные параметры запуска.
Сон по закрытию крышки, кстати, реализован так же, ибо всяческие gnome-settings-daemon и прочие удалены.
Сон по закрытию крышки, кстати, реализован так же, ибо всяческие gnome-settings-daemon и прочие удалены.
Cобранный http://dl.dropbox.com/u/20806392/inputmon
Cобранный http://dl.dropbox.com/u/20806392/inputmon
Вообще хорошо было бы улучшить программу, конфигурационные там файлы с действием для каждого значения, итд, но я не осилил.
Вообще хорошо было бы улучшить программу, конфигурационные там файлы с действием для каждого значения, итд, но я не осилил.

Текущая версия от 08:28, 20 октября 2014

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

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