Это старая версия документа.


Покоряй и Властвуй: Советы по работе в терминале. Часть 4

Автор - Лукас Вестерман (Lucas Westermann)

Вам когда-нибудь доводилось нажимать дополнительную клавишу на клавиатуре ноутбука и обнаруживать, что она ничего не делает, а программа обработки комби-наций клавиш вообще её не распознаёт? Я столкнулся с такой проблемой, когда установил Openbox на свой нетбук. Поэтому я решил показать вам, как назначать клавишам функции, даже если клавиши не распознаны.

Шаг первый: распознавание клавиш

Сперва мы должы выяснить, распознана ли клавиша ядром. Откройте терминал и выпол-ните команду

xev | grep -A2 --line-buffered '^KeyRelease' | 
sed -n '/keycode /s/^.*keycode \([0-9]*\).* 
(.*, \(.*\)).*$/\1 \2/p'

Эта команда должна вывести коды и соответству-ющие им названия клавиш (XF86AudioMute, XF86MonBrightnessDown, a, b и так далее). Если после кода вывелось «NoSymbol», это означает, что клавише ещё не назначен код, тогда приступайте сразу ко второму шагу. Если ни одна клавиша ничего не возвратила, следует попробовать showkey.

Переключитесь на tty0, нажав ctrl + alt + F1, и выполните вход, используя своё имя пользователя. Сделав это, выполните команду:

showkey

Программа вернёт коды нажатых клавиш и автоматически завершится через 10 секунд после нажатия последней клавиши. Когда эта команда запущена, нажмите клавиши, которые хотите протестировать, и запомните коды, которые она возвратит. Если код не вывелся, необходимо проверить, есть ли у этой клавиши код опроса.

Проделать это можно, нажав тестируемую клавишу. После этого проверьте dmesg командой

dmesg|tail -5

Если на выходе dmesg появилось что-то подобное:

atkbd.c: Unknown key pressed (translated set 2, code 0xf1 on isa0060/serio0).

atkbd.c: Use 'setkeycodes e071 <keycode>' to make it known.

то вы можете назначить код опроса коду клавиши. Делается это с помощью HAL или setkeycodes (инструмент ядра), как показано в выводе dmesg. В разделе «Читайте также» в конце статьи предлагается ссылка на страницу, описыва-ющую процесс назначения клавиш при помощи HAL. Я не буду сейчас вдаваться в детали, поскольку знаю, что в этом нет необходимости из-за редкости такой проблемы.

Шаг второй: назначение кодов клавиш

Я расскажу о назначении кодов к клавишам в Xorg, поскольку большинство мультимедийных клавиш не нужны в консоли tty0. Для начала создайте файл .Xmodmap либо командой touch, либо редактированием и сохранением в gedit. Строки в файле должны быть в таком формате:

keycode <Xkeycode> = keysymbol

Вот несколько примеров:

keycode 153 = XF86MonBrightnessDown

keycode 154 = XF8MonBrightnessUp

Шаг третий: тестирование кодов клавиш

Выполните команду

xmodmap ~/.Xmodmap

Теперь вы сможете назначать клавишам любые функции, какие хотите. Если нет, проверьте ещё раз коды и названия клавиш на предмет опечаток. Полный список символов находится здесь:

/usr/include/X11/keysymdef.h

Для дополнительных клавиш:

/usr/include/X11/XKeySymDB

Как только вы убедились, что клавиши работают, приступайте к следующему шагу.

Шаг четвёртый: закрепляем эффект

Чтобы изменения оставались всегда, вам придётся запускать команду xmodmap каждый раз после входа в систему. Я бы рекомендовал добавить её в ваш .xprofile.

xbindkeys — это альтер-натива xmodmap, причём довольно эффективная. У неё есть GUI, который называется xbindkeys_config, но я не уверен, есть ли он в репозиториях Ubuntu.

Читайте также: Хитрости HAL: http://people.freedesktop.org/~hughsient/quirk/quirk-keymap-index.html