Настройка обработчиков специальных клавиш
- Автор:
- Вадим Цесько
Это небольшое HOWTO по настройке обработчиков специальных клавиш. Всё,
описанное здесь, тестировалось на ноутбуке Lenovo ThinkPad X200s. Ноутбуки
Lenovo, как и многие другие ноутбуки, характеризуются наличием специальных
клавиш, активируемых по нажатию Fn + F*, Fn + <стрелка>, или даже
аппаратных специальных клавиш (у меня это Volume Mute, Volume Up/Down,
Forward, Next).
Условно можно разделить обработчики нажатий на такие клавиши на два класса:
- обрабатываемые при помощи
acpid - обрабатываемые при помощи
Xmodmap/Xbindkeys
При помощи acpid обрабатываются нажатия на такие клавиши как:
- переход в ждущий/спящий режим
- включение/выключение внешнего монитора
- включение/выключение WiFi/Bluetooth
При помощи Xmodmap/Xbindkeys обрабатываются:
- регулировка громкости звука
- мультимедийные клавиши (
Fn + <стрелка>) - клавиши навигации вперёд/назад
Требуемый софт
Понадобятся следующие пакеты:
acpiacpidacpitoolxorg-server-utilsxbindkeys
Настройка ACPI
После установки пакета acpi укажите в /etc/rc.conf ACPI-модуль для
Вашей машины. У меня это thinkpad_acpi.
Настройка обработчиков нажатий осуществляется в файле /etc/acpi/handler.sh.
Демон ACPI перенаправляет события ACPI этому скрипту. Мой скрипт выглядит
следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #!/bin/sh # Default acpi script that takes an entry for all actions set $* case "$1" in ibm/hotkey) case "$2" in HKEY) case "$4" in 00001004) # Suspend to RAM /usr/sbin/pm-suspend ;; 00001008) # Switch Bluetooth if [ "$(grep "status.*enabled" /proc/acpi/ibm/bluetooth)" ]; then /etc/rc.d/bluetooth stop echo "disable" > /proc/acpi/ibm/bluetooth else echo "enable" > /proc/acpi/ibm/bluetooth /etc/rc.d/bluetooth start fi ;; 00001007) # Toggle external display if [ "$(xrandr -q | grep "VGA connected")" ]; then if [ "$(xrandr -q | grep "VGA connected [0-9]")" ]; then xrandr --output VGA --off else xrandr --output VGA --auto fi else xrandr --output VGA --off fi ;; 0000100c) # Hibernate /usr/sbin/pm-hibernate ;; esac ;; esac ;; esac |
Посмотреть номера клавиш можно при помощи утилиты acpi_listen, например:
$ acpi_listen ibm/hotkey HKEY 00000080 00001003 ^C
Скрипт /etc/acpi/handler.sh по частям обрабатывает код события (разбивая
строку на параметры при помощи set $*) и выполняет соответствующие им
действия. Таким образом Вы можете добавлять новые обработчики.
Настройка Xmodmap
Сервер X ведёт свою таблицу символов. Посмотреть какой символ соответствует
нажатию специальной клавиши можно при помощи утилиты xev. Для клавиш,
которым сервер X самостоятельно не сопоставил правильных символов, можно
задать символы при помощи утилиты Xmodmap в файле ~/.Xmodmap:
keycode 121 = XF86AudioMute keycode 122 = XF86AudioLowerVolume keycode 123 = XF86AudioRaiseVolume keycode 166 = XF86Back keycode 167 = XF86Forward
Список символов можно посмотреть в файле /usr/include/X11/keysymdef.h.
Не забудьте прописать запуск Xmodmap при старте менеджера окон в ~/.xinitrc:
xmodmap ~/.Xmodmap xbindkeys while : do wmii done
Настройка Xbindkeys
Опишите действия, которые нужно выполнять при обработке символов X в файле
~/.xbindkeysrc:
"mocp -G" XF86AudioPlay "mocp -s" XF86AudioStop "mocp -r" XF86AudioPrev "mocp -f" XF86AudioNext "amixer sset Master 5%-" XF86AudioLowerVolume "amixer sset Master 5%+" XF86AudioRaiseVolume "amixer sset Master toggle" XF86AudioMute "xbacklight -inc 10" XF86MonBrightnessUp "xbacklight -dec 10" XF86MonBrightnessDown
Как легко понять, клавиши мультимедиа управляют демоном mocp, клавиши
регулировки громкости управляют микшером ALSA, а клавиши регулировки яркости
вызывают утилиту xbacklight.
Так же как и в случае Xmodmap, не забудьте запустить xbindkeys при старте
менеджера окон (см. ~/.xinitrc выше).
