Fluxbox и аппаратные горячие клавиши

Итак, имеется клавиатура A4Tech KL-7MU (с рядом горячих клавиш, выполненных в виде отдельных кнопок) и Debian GNU/Linux с Fluxbox’ом в качестве менеджера окон. Давайте-ка заставим горячие кнопки делать то, что им положено — к примеру, управлять MPD.

Собственно, управление сводится к добавлению в ~/.fluxbox/keys строк вида:

None      ИмяКнопки      :ExecCommand mpc действие

Как видите, совершенно ничего сложного. Осталось только определится с именами кнопок и действиями для mpc.

Итак, какие в иксах есть кнопки для управления звуком:

Имя кнопки             Производимое действие
XF86AudioPrev          Предыдущий трек
XF86AudioNext          Следующий трек
XF86AudioPlay          Играть/пауза
XF86AudioStop          Остановить воспроизведение
XF86AudioRaiseVolume   Повысить громкость
XF86AudioLowerVolume   Понизить громкость
Всё, что нам нужно сделать — объяснить X.Org’у, где какие клавиши. Клавиши компьютер воспринимает по так называемым кэйкодам (keycode). Для того, чтобы их определить, надо открыть терминал и запустить программу xev. Появится маленькое квадратное окно — именно оно нам и нужно. Не переключаясь на другие окна, поочерёдно нажимайте горячие клавиши и записывайте из кэйкоды (в моём примере вывода они выделены полужирным):
KeyPress event, serial 32, synthetic NO, window 0x2200001,
root 0x87, subw 0x0, time 12449423, (-155,433), root:(584,456),
state 0x10, keycode 234 (keysym 0x0, NoSymbol), same_screen YES,
XLookupString gives 0 bytes: 
XmbLookupString gives 0 bytes: 
XFilterEvent returns: False

KeyRelease event, serial 35, synthetic NO, window 0x2200001,
root 0x87, subw 0x0, time 12449548, (-155,433), root:(584,456),
state 0x10, keycode 234 (keysym 0x0, NoSymbol), same_screen YES,
XLookupString gives 0 bytes: 
XFilterEvent returns: False

Обратите внимание на то, что выделено зелёным — важно, чтобы там было именно NoSymbol. Если там какое-то другое значение, значит этой кнопке уже назначено имя. В таком случае не записывайте код, запишите имя — и пропустите следующий шаг, где мы будем модифицировать .Xmodmap. Хотя для надёжности наблюдайте, чтобы имя совпадало со значением кнопки — и, если оно не совпадает, записывайте кэйкод, чтобы переназначить имя.

Ну что же, у нас есть кэйкоды — теперь будем назначать имена.

Для этого создадим и отредактируем файл ~/.Xmodmap. Он должен выглядеть примерно так:

keycode 144 = XF86AudioPrev
keycode 153 = XF86AudioNext
keycode 164 = XF86AudioStop
keycode 162 = XF86AudioPlay
keycode 176 = XF86AudioRaiseVolume
keycode 174 = XF86AudioLowerVolume
keycode 160 = XF86AudioMute

Для того, чтобы сразу применить созданную схему, наберите:

xmodmap ~/.Xmodmap

Итого, осталась самая малость — прописать хоткеи в конфиге Fluxbox’а. Делается это, естественно, в ~/fluxbox/keys.

Маленькое замечание: перед прописыванием команд в конфиг вам нужно выяснить, как управлять вашим плеером командами из консоли. У меня MPD, так что я буду использовать mpc. Если у вас amaroK, поглядите в сторону dcop. По остальным плеерам советовать не берусь — гуглите. Я не буду долго объяснять, что да как писать — просто продемонстрирую свой участок конфига:

None    XF86AudioPrev        :ExecCommand mpc prev
None    XF86AudioPlay        :ExecCommand mpc toggle
None    XF86AudioStop        :ExecCommand mpc stop
None    XF86AudioNext        :ExecCommand mpc next
None    XF86AudioRaiseVolume :ExecCommand mpc volume +5
None    XF86AudioLowerVolume :ExecCommand mpc volume -5
Control XF86AudioPrev        :ExecCommand mpc seek -00:00:05
Control XF86AudioNext        :ExecCommand mpc seek +00:00:05

Пробуйте. Удачи! ;) P.S. Спасибо Bob R.’у за идею с Ctrl+кнопка — очень удобно :)

Drop me a line! (wonder where’s the comments form?)