14 November 2008

Настройка Apple Slim keyboard под Linux

Configuring Linux
Недавно праздновал свой 23 день рождения и был одарен коллегами замечательнейшим девайсом. Apple Slim Aluminium Keyboard.
Да-да-да. Именно с большой буквы каждое слово.
По моему скромному мнению, лучшей клавиатуры для разработчика не найти. Особенно для такого любителя Linux как я.
Клавиатура удобная, ничего не скажешь, писать об этом больше не буду, и так уже везде понаписано. Однако не без проблем.
Мой любимый рабочий компьютер с Gentoo напрочь отказался работать с мультимедийными клавишами и прочими радостями современного мира. Немного погуглив я обнаружил что я не одинок и огромное количество народа тоже страдает от этого. Однако четкой и подробной инструкции на русском (да и на английском ) я так и не нашел. Специально для таких как я страдальцев и предназначен сей коротенький мануал.
Тут в комментариях просят картинку клавиатуры:
image
А вот тут можно про неё почитать.

Оговорюсь, что все последующие операции мы будем выполнять в режиме суперпользователя. А также, все предложенные кейкоды работают только для Slim клавиатуры. Для клавиатуры ноутбука придется повторить все самому.

1.Компилим ведро.


Первое что пришлось сделать мне как пользователю столь дружелюбного дистрибутива как Gentoo, это конечно перекомпилировать ядро.
Без этого X-сервер напрочь отказывается видеть недостающие клавиши.
Замечу, что пользователям Ubuntu этого делать не придётся так как для них разработчики уже всё что надо сделали.
Предполагаю что исходные тексты ядра у вас уже лежат /usr/src/linux
Идем туда и делаем make menuconfig
В открывшемся диалоге находим:
Device Drivers → HID Devices
И жмакаем галочку на «Enable support for Apple laptop/aluminium USB special keys».
Далее, как обычно следует make && make modules_install && make install
Если не скомпилилось — зовем соседа-линуксоида, гуглим форумы и.т.д в поисках солюшена, что бы узнать что не так и как эту проблему побороть.

2.Немного шаманства.


Замечу, что после того как ядро успешно установилось, всё практически заработает. Но, как это принято в мире Linux, не без подвоха.
Теперь, для того что бы нажать, к примеру, кнопку F1 надо предварительно удерживать до этого не работающую клавишу Fn. Что, поверьте, очень раздражает и навевает мысли о суициде.
Что бы поправить это безобразие, делаем такую штуку:
echo 2 > /sys/module/hid/parameters/pb_fnmode
Что бы данное изменение применялось каждый раз при загрузке системы, надо добавить эту команду в конец стартового скрипта.
В разных дистрибутивах он находится в разных местах.
Приведу пример для Gentoo:
/etc/conf.d/local.start
и для Ubuntu:
/etc/rc.local

3. И это ещё не всё.


А вы как думали? Осталось совсем чуть-чуть.
К сожалению не работает кнопка «Ё», она же «~». А ещё на ней есть обратные апострофы. Нужная в общем-то кнопка.
Также не работают кнопки в верхнем ряду: Print Screen, Scrool Lock и Pause.
Не так часто я их использую, но всё же не по себе от того что они не работают.
Ну и самый пожалуй главный недочет — это то что нет кнопки Insert, зато есть F16-F19 которые как бы некуда девать.
Этими проблемами мы и займемся.

Для изменения раскладки клавиатуры мы будем использовать две стандартные X-утилиты: xev и xmodmap. Изменения будут производится уже не под суперпользователем, а под вашим системным пользователем, в вашем домашнем каталоге.

Запускаем xev и пробуем нажимать на клавиши.
После нажатия читаем что вываливается на экран. Я нажал на букву «ё» и увидел вот что:

KeyRelease event, serial 34, synthetic NO, window 0x3c00001,
root 0x1a6, subw 0x0, time 31989750, (533,667), root:(538,692),
state 0x10, keycode 94 (keysym 0x3c, less), same_screen YES,
XLookupString gives 1 bytes: (3c) "<"
XFilterEvent returns: False


О чём это нам говорит?
Была нажата клавиша с keycode 94. На неё назначен печатный символ «<». Что нам не подходит.
Запускаем утилиту xmodmap с ключами -pke
На экран вывалится текущая раскладка клавиатуры.
Ищем нужный keycode:
keycode 94 = less greater slash bar bar brokenbar
Создаем новый файл в корневом каталоге с именем .Xmodmap.
В нем мы будем формировать свою новую раскладку.
Копируем строчку найденную выше в этот файл и правим.
Для того что бы знать на что заменить «less greater …» придется почитать весь вывод xmodmap -pke и найти то что нам подходит.
А вот и оно:
keycode 49 = grave asciitilde Cyrillic_io Cyrillic_IO
Заменяем так что бы получилось:
keycode 94 = grave asciitilde Cyrillic_io Cyrillic_IO

Для теста запускаем: xmodmap ~/.Xmodmap
И пробуем по нажимать. Ура? Всё работает.

Тем же путем находим коды клавиш F13 — F15 и назначаем на них нужные действия.
Я назначил вот так:
keycode 191 = Print Sys_Req Print Sys_Req Print Sys_Req
keycode 192 = Scroll_Lock NoSymbol Scroll_Lock NoSymbol Scroll_Lock
keycode 193 = Pause Break Pause Break Pause Break


Ну а Insert повесим на F16:
keycode 194 = Insert NoSymbol Insert NoSymbol Insert

В итоге я получил такой файл .Xmodmap:

keycode 94 = grave asciitilde Cyrillic_io Cyrillic_IO
keycode 191 = Print Sys_Req Print Sys_Req Print Sys_Req
keycode 192 = Scroll_Lock NoSymbol Scroll_Lock NoSymbol Scroll_Lock
keycode 193 = Pause Break Pause Break Pause Break
keycode 194 = Insert NoSymbol Insert NoSymbol Insert


Замечу, что после того как этот файл появился в вашем домашнем каталоге, ничего больше делать не надо. Он сам автоматически применится после рестарта X-сервера.

4. Для маньяков


Некоторые, привыкшие к типичному для обычных клавиатур расположению клавиш: Ctrl | Win | Alt не могут привыкнуть к тому, что на эппловской клавиатуре это расположение изменено на: Ctrl | Alt | Cmd.
Сmd — это как бы то же самое что и Win. Для linux она выглядит как «Meta» или «Super».
Для этого, используя тот самый xmodmap мы придумали следующий ремапинг:

clear Mod4
clear Mod1
keycode 115=Alt_L
keycode 64=Super_L
add Mod4 = Super_L
add Mod1 = Alt_L


5. Для несогласных.


Конечно, предложенная схема удобна далеко не всем. Но руководствуясь этой инструкцией каждый сможет настроить свою клавиатуру так как он хочет.
Ну и конечно, та часть инструкции которая отвечает за ремапинг клавиш, может помочь и тем кто не является счастливым обладателем клавиатуры от Apple.
Например можно отлично настроить мультимедийные клавиши на клавиатурах на которых они присутствуют. :) Или подпрвить не устраивающую вас раскладку.

З.Ы: Во время экспериментов, может случится так что вы не сможете нажать какую-то кнопку и захочется всё вернуть как было.
Что бы не перезагружать X-сервер можно воспользоваться следующей командой: setxkbmap -model evdev -layout us,ru
Это вернёт раскладку в рабочее состояние. Вместо «evdev» нужно попробовать подставить вашу модель клавиатуры. Заранее подсмотреть это название можно коммандой: cat /etc/X11/xorg.conf | grep XkbModel или в настройках клавиатуры вашего десктоп менеджера.

UPD: Добавил картинку клавиатуры.
Tags:linuxapplekeyboardxmodmapxevxorg
Hubs: Configuring Linux
+48
8.7k 43
Comments 65
Popular right now