Настройка дополнительных клавиш ноутбука, если у них нет сканкодов под Fedora, стандартными средствами
Сегодня я озадачился дополнительными клавишами клавиатуры типа Play, Next, Mail.
Имеется скромный ноутбук Toshiba M55-S139 - настоящая рабочая лошадка, которую я использую ежедневно. Еще полгода назад я читал, что для этих и более современных ноутбуков нет поддержки на уровне ядра linux, чтобы задействовать дополнительные клавиши. В качестве доказательства приводилось поведение программы xev, которая действительно ничего не выдавала при нажатии вышеупомянутых клавиш.
Однако сегодня я, заглянув в сообщения dmesg, я обнаружил очень странные строчки вида:
Unknown key pressed (translated set 2, code 0xf3 on isa0060/serio0)
Конечно же я заинтересовался и стал нажимать все кнопки подряд, пытаясь узнать, что это за клавиши. Оказалось, что это якобы не опрашиваемые кнопки.
В сообщении об ошибке содержалась подсказка - чтобы не было сообщения, назначьте клавише код. Где взять код я не знал и потому полез в google.
Там я нашел два документа - один из рассылки разработчиков ядра, где было сказано, что кейкоды больше 240 не работают (так и не понял почему, т.к. у меня все работает). И документ о
настройке ноутбука HP Pavilion ze4300.
Итак, пользуясь этим документом, удалось узнать, как найти пустые кейкоды. Для этого в статье рекомендуется выполнить команду:
xmodmap -pm
Выдает она непонятно что, поэтому я выполнил
xmodmap -pk
и получил полный список занятых и свободных сканкодов.
Согласно dmesg у меня были следующие коды, которым нужно было назначить кейкоды:
e013
e014
e077
e012
e039
e074
Свободные кейкоды начинались со 130-го.
Ну их и назначил:
setkeycodes e013 130
setkeycodes e014 131
setkeycodes e077 132
setkeycodes e012 133
setkeycodes e039 134
setkeycodes e074 135
После этого я запустил xev и попробовал понажимать клавиши. Тут началась магия, упомянутая в статье про HP: клавиши получили иные кейкоды.
130 превратилось в 134
131 превратилось в 135
132 превратилось в 140
133 превратилось в 248
134 превратилось в 191
135 превратилось в 192
Соответственно, теперь берем
док по настройке клавиатуры, сто лет назад включенный нами в
LinuxOrgRu FAQ, и читаем как действовать дальше. Дальше мне нужно было как-то при запуске назначать кейкоды, которые впоследствии распознавались X-сервером как нормальные дополнительные клавиши.
А теперь, собственно, пошаговый алгоритм для Fedora 8 (и ранее).
1. Открываем текстовый файл, терминал и после каждого нажатия на дополнительную клавишу выписываем сообщение dmesg вида:
setkeycodes e013 = CODE.
2. Запускаем
xmodmap -pk
и ищем пустые кейкоды.
3. В /etc/rc.local добавляем наши setkeycodes вот примерно так:
setkeycodes e013 130
setkeycodes e014 131
и т.п.
И сразу запускаем, если у вас там нет чего-то критичного (если есть, пока запускайте из отдельного файлика).
4. Запускаем xev и поочередно нажимая наши клавиши смотрим, какие коды получились реально. Эти коды мы записываем в файлик .Xmodmap, находящийся в вашей домашней папке, в таком виде:
keycode 134 =
keycode 135 =
и т.п.
5. Открываем файл /usr/include/X11/XF86keysym.h и находим названия нашим клавишам, например, XF86XK_HomePage и добавляем их в .Xmodmap вот так:
keycode 134 = XF86HomePage
keycode 135 = XF86AudioMedia
keycode 140 = XF86AudioPlay
keycode 248 = XF86AudioStop
keycode 191 = XF86AudioNext
keycode 192 = XF86AudioPrev
Когда все добавили, закрываем сеанс и заходим заново. По большой и светлой идее, если мы запустим xev, то увидим, что помимо кейкода выдается и название клавиши. Полученные клавиши можно теперь назначить приложениям. У меня в KDE, например, они большей частью назначены на amarok.
Все.