четверг, 19 марта 2009 г.

Настройка дополнительных кнопок мультимедийной клавиатуры

Настройка дополнительных кнопок мультимедийной клавиатуры | Kubuntu

В интернете полным-полно статей на эту тему, однако мне пришлось столкнуться с некоторыми тонкостями, поэтому я рискнула написать свою.
Итак, я обзавелась красоткой Genius ErgoMedia 700 с аж 36-ю дополнительными кнопками, но сразу на ней заработало только колесо прокрутки, и то только потому, что оно посылало те же кей-коды, что и стрелки.

1. Узнаем, какие кнопки система не видит.

Пишем в консоли xev и начинаем нажимать дополнительные кнопки (стараясь при этом не шевелить мышкой, потому что ее движения тоже отслеживаются). Если на каждое нажатие хоть что-то выводится, вам повезло. А если вы найдете модель своей клавиатуры в одной из таких программ, как hotkeys, keytouch, lineakd (есть в репозиториях) или sven (надо скачивать и собирать) - вам повезло вдойне, дальше можно настраивать с их помощью в красивых гуях. Если не повезло и на некоторые клавиши xev не реагирует, переходим к шагу 2.

2. Привязываем скан-коды.

Пишем в консоли dmesg и внимательно смотрим. В выводе должны быть строчки вида: [17183435.892000] atkbd.c: Unknown key pressed (translated set 2, code 0xa8 on isa0060/serio0).
[17183435.892000] atkbd.c: Use 'setkeycodes e028 <keycode>' to make it known.
Если даже dmesg ничего не пишет о ваших кнопках, тут я могу лишь посоветовать переткнуть клавиатуру из USB в PS/2 (у Genius переходник был в комплекте). У меня через USB половина дополнительных кнопок не виделась вообще, а половина посылала какие-то невероятные скан-коды, которые setkeycodes отказывалась назначать.

Вооружаемся бумажкой и ручкой и переписываем скан-коды, на которые ругается ядро (запоминать, к каким клавишам они относятся, не стоит - все равно не пригодится). В моем примере это e028. Теперь нужно узнать, какие кей-коды свободны. Для этого пишем например sudo getkeycodes|grep 215 (число в десятичной записи, желательно между 128 и 256). Если ничего не выводится, значит кей-код не занят. Но не торопитесь писать по совету ядра setkeycodes e028 215. Это назначение будет работать до первого рестарта, поэтому нужно озаботиться каким-нибудь загрузочным скриптом. Я выбрала /etc/rc.local (поправьте меня, если это не кошерно), получилось следующее:#!/bin/sh -e
exec sudo setkeycodes e025 220 &
exec sudo setkeycodes e02f 221 &
...
exec sudo setkeycodes e023 239 &
exit 0

3. Присваиваем кнопкам имена.

Итак, после запуска скрипта xev должен увидеть все кнопки. Кстати, обратите внимание, что кей-коды, выводимые xev, не совпадают с теми, что мы писали в setkeycodes. Где-то написано, что это баг, где-то - что это фича, но не суть важно. Снова вооружаемся бумажкой и ручкой, но теперь отмечаем, к каким именно кнопкам это относится. Вывод xev выглядит примерно так: KeyRelease event, serial 31, synthetic NO, window 0x2600001,
root 0x67, subw 0x0, time 265877259, (883,334), root:(886,358),
state 0x0, keycode 161 (keysym 0x0, NoSymbol), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
Нам интересны те кнопки, которые названы NoSymbol. Или же кнопка XF86Mail, совсем не являющаяся Mail - ее стоит переименовать. Переписываем их кей-коды.
Нам понадобится утилита xmodmap (из пакета x11-xserver-utils). В домашней директории создаем (или редактируем) файл .Xmodmap примерно следующего содержания: keycode 129=XF86AudioMedia
keycode 148=XF86Music
keycode 202=XF86Pictures
keycode 101=XF86Documents
Числа - переписаные из вывода xev кей-коды. А возможные имена нужно подсмотреть в конце файла /usr/share/X11/XKeysymDB. В принципе видно, что все они строятся одинаково: префикс XF86 и осмысленное название. Не забываем добавить xmodmap в автозагрузку.

4. Назначаем действия.

В принципе после команды xmodmap .Xmodmap можно настраивать действия кнопок KDE-шными средствами. Многие программы, например Dolphin, Amarok, Kmix имеют в меню пункт Комбинации клавиш, где сами отлавливают нажатия. Можно воспользоваться маленькой программкой xbindkeys из репозиториев, которая ассоциирует комбинации клавиш с консольными командами. Ее настроечный файл ~/.xbindkeysrc также имеет простейший синтаксис и состоит из блоков вида:"konsole"
XF86Book
Соответственно в кавычках команда, в следующей строке клавиша или комбинация. Однако я рекомендую воспользоваться xbindkeys-config, которая сама отлавливает нажатия и позволяет проверить работу команд. Почему-то она отлавливала мои дополнительные кнопки как Mod2+XF86Book, а без Mod2 не работала. Теперь можем с садистским удовольствием назначить на кнопки Power Point, Excel и Word соответственно konsole, ksysguard и xkill :) xbindkeys -f .xbindkeysrc в автозагрузку.

5. Для пользователей Opera.

И не только, возможно для некоторых других браузеров это тоже верно. Повесить на кнопки WWW и Search команды opera и opera yandex.ru несложно, а вот с кнопками навигации, а также Mail и Favorites не все так просто. Если пойти в Инструменты-Настройки-Дополнительно-Управление-Профили клавиатуры, то можно убедиться, что опера нажатия отлавливать не умеет и названия типа XF86Forwad и XF86Back не понимает. Много где написано, что это до сих пор не исправленный баг, однако не расстраивайтесь - все возможно! После мучительной, но победоносной войны было выяснено, что достаточно в .Xmodmap назначить этим кнопкам не заковыристые имена, начинающиеся на XF86, а простые F19, F20 и так далее! Их-то опера поймет :)

Все, можете поздравить себя с победой! А у меня еще 6 кнопок, для которых нужно придумать действие...

Комментариев нет: