Конфигурирование 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-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)
On 2009-04-03T20:54:00.000+03:00, Анонимный wrote:
а как привязать действие на сочетание клавишь.. к примеру на super_l+Up
в xev сочетания кнопок отоброжаеться только как state
но как это прописать в конфиг? т.е. как сделать что бы это все заработало :)