Конфигурирование Hotkeys: In A True Way

    •     ,

Недавно XstyLe опубликовал небольшую заметочку по замечательной утилите hotkeys, которая уже описывалась ранее virens’ом в статье “Мультимедийные клавиатуры в Linux”. Но так как статья Михаила носила очень общий характер (была кратко описана настройка hotkeys + приведены названия программ такого же класса), а XstyLe в своём посте слишком кратко описал редактирование конфигов — по сути, краеугольного камня использования утилиты — то я попытаюсь восполнить сей пробел.

Итак, утилита hotkeys имеет два важных конфига — общесистемный /etc/hotkeys.conf и описание клавиатуры /urs/share/hotkeys/модель_клавиатуры.def. Их-то нам и надо поправить под свои нужды.

Начнём с описания клавиатуры. В качестве примера я буду рассматривать написание конфига для своей клавиатуры — A4Tech KL-7MU. В стандартной поставке hotkeys конфига для неё нет, поэтому я написал свой, глядя на уже существующие. Сейчас мы его построчно разберём.

Итак, добываем права рута (в консоли su и ввести пасс рута) и создаём файлик a4tech_kl-7mu.def:

cd /usr/share/hotkeys/ && nano a4tech_kl-7mu.def

Перед вами будет окно nano с пустым (пока что) конфигом–описаловом клавиатуры.

Первым делом напишем вот это:

<?xml version="1.0"?>

Эта строка означает, что конфиг — это XML документ.

Теперь добавим блок описания клавиш и команд для них:

<definition></definition>

Внутри секции definition у нас будут два элемента — собственно описание команд (секция config) и описание того, кто создал данный документ и как с ним связаться.

Добавим внутрь тегов definition секцию config:

<config model="A4Tech KL-7MU"></config>

Как видите, всё просто. Внутри этой секции мы должны будем дописать строки, описывающие нашу клавиатуру.

Откройте новую консоль (не рутовую!) и запустите программу xev:

$ xev

Появится окошко, на которое вам не надо обращать внимания. Сделайте окно активным (просто кликните по его заголовку) и нажмите какую–нибудь из мультимедийных клавиш. В консоли, из которой вы запускали xen, появится что–то типа такого:

KeyPress event, serial 34, synthetic NO, window 0x2e00001,
    root 0x6a, subw 0x0, time 31031317, (486,21), root:(1031,312),
    state 0x10, keycode 160 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x2e00001,
    root 0x6a, subw 0x0, time 31031478, (486,21), root:(1031,312),
    state 0x10, keycode 160 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

Как видите, в обоих сообщениях упоминается некий keycode. Это именно то, зачем мы запускали xev. Теперь осталось только дописать в конфиг строку, описывающую, какое именно действие выполняет данная клавиша. В моём случае это была клавиша включения/выключения звука. В секции config пишем:

<Mute   keycode="160"/>

Тут всё просто: действие включения/выключения звука я назвал Mute, а в кавычки написал кейкод клавиши. Сделайте то же самое с другими кнопками, которые вы хотите задействовать.

У меня секция config имеет следующий вид:

<config model="A4Tech KL-7MU">
  <PrevTrack  keycode="144"/>
  <Stop       keycode="164"/>
  <Play       keycode="162"/>
  <NextTrack  keycode="153"/>
  <VolUp      keycode="176"/>
  <VolDown    keycode="174"/>
  <Mute       keycode="160"/>
</config>

Здесь описан только блок клавиш, относящихся к мультимедиа — мне пока что ничего другого и не нужно.

Теперь осталась чистая формальность — описать, кто изготовил этот конфиг. Для этого пишем нечто вроде этого:

<contributor>
  <name>Programmaster</name>
  <email>eual.jp@gmail.com</email>
</contributor>

Ну вот, такой конфиг не стыдно и людям показать!

Перейдём ко второй части повествования — правке /etc/hotkeys.conf

Закомментируйте (поставьте знак “#” в начале строки) все незакомментированные строки файла — нам не нужно, чтобы какие–то дефолтные опции помешали нашим. Итак, первым делом укажем тип клавиатуры, которую мы используем:

Kbd=a4tech_kl-7mu

Вы сможете указывать любой другой тип клавиатуры при запуске hotkeys, но по умолчанию будет использоваться указанный здесь. Обратите внимание, что тип клавиатуры совпадает с именем файла в /usr/share/hotkeys, но расширение .def не указывается.

Дальше следует указать конкретные команды, которые будут выполнятся при нажатии кнопок. Например, в конфиге клавиатуры я назначил кнопке с кейкодом 162 приостанавливать/запускать воспроизведение (действие я назвал Play). Теперь, чтобы это действие реально выполнялось, мне надо дописать в конф вот такую вот простую строку:

Play=mpc toggle

Здесь всё просто: действие=строка для консоли, которая выполняет это действие. В итоге у меня получился вот такой вот набор команд:

PrevTrack=mpc prev
Play=mpc toggle
Stop=mpc stop
NextTrack=mpc next
VolUp=mpc volume +5
VolDown=mpc volume -5

У вас, естественно, может получится что-то другое — плееры есть разные. Если у вас amaroK, советую посмотреть в сторону DCOP для управления им из консоли.

Надеюсь, эта статья помогла вам. Удачи! ;)

Comments (migrated from Blogger)

On 2009-04-03T20:54:00.000+03:00, Анонимный wrote:

а как привязать действие на сочетание клавишь.. к примеру на super_l+Up
в xev сочетания кнопок отоброжаеться только как state
но как это прописать в конфиг? т.е. как сделать что бы это все заработало :)

On 2009-04-03T21:09:00.000+03:00, Programmaster wrote:

Хм… Сочетания клавиш я в hotkeys не привязывал (и не уверен, что это возможно).

Your thoughts are welcome by email
(here’s why my blog doesn’t have a comments form)