30 июля 2009 г.

Мультимедийные клавиши в XMonad



Напишу, как пользоваться "дополнительными" клавишами на современных ноутбуках, клавиатурах, мышках.
Во-первых, нам потребуется определить keysym нужной клавиши. Для этого существует прграмма xev. Она открывает белое окошко, которое выводит в консоль все события, вызванные устройствами ввода (перемещения мыши, нажатия на клавиши). Строго говоря, не все клавиши можно определить этим способом. Например, если клавиша задумана для какой-то особой функции Windows и имеет соответствующий драйвер. О таких исключениях можно прочитать в Gentoo Wiki, но, скорее всего, все необходимые коды удастся получить и "обычным" нижеприведённым способом.
Итак, запустив xev, нажимаем нужную клавишу. В терминале, откуда запущена программа появится блок, соответствующий нажатой кнопке. Примерно такого вида:

KeyPress event, serial 27, synthetic NO, window 0x1600001,
root 0x125, subw 0x0, time 1218923, (277,178), root:(1119,196),
state 0x0, keycode 162 (keysym 0x1008ff14, XF86AudioPlay), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False


Отсюда можно увидеть, что код нажатой клавиши 0x1008ff14. Ещё полезным может оказаться "внутреннее" обозначение этой клавиши - XF86AudioPlay. Хотя, в данном случае оно не пригодится.
Эту процедуру нужно повторить для каждой клавиши.
В xmonad.hs полученные коды используются следующим образом:

-- XF86AudioNext
, ((0 , 0x1008ff17), spawn "ncmpcpp next")
-- XF86AudioPrev
, ((0 , 0x1008ff16), spawn "ncmpcpp prev")
-- XF86AudioStop
, ((0 , 0x1008ff15), spawn "ncmpcpp stop")
-- XF86AudioPlay
, ((0 , 0x1008ff14), spawn "ncmpcpp toggle")


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

1 комментарий:

Анонимный комментирует...

А что делать, если xev не реагирует на нажатия клавиши?