9/05/2006

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

Многие современные клавиатуры комплектуются разного рода мультимедийными клавишами и мультимедийными кнопками для управления плеерами и броузерами. Часто не работают эти мультимедийные кнопки правильно. О настройке мультимедийных клавиш в Linux и посвящён этот пост.

Коды мультимедийных клавиш
Прежде, чем мы начнём настраивать мультимедийные кнопки, нужно узнать, видят ли иксы эти самые мультимедийные клавиши - потом нам эта информация очень пригодится. Сделать это просто, стандартными средствами иксов - программой xev.

Запускаем консольку xterm (или другую, которая больше нравится), пишем в ней xev (от пользователя). Появится белое окошко, которое будет регистрировать всё, что происходит с мышью (в нём можно перетаскивать чёрный прямоугольник, но это детали). Пробуем нажимать клавиши и смотрим, что получается. Например, жмём на кнопку Down, должны увидеть вот что:
KeyRelease event, serial 32, synthetic NO, window 0xe00001, root 0x4c, subw 0x0, time 8095640, (-57,293), root:(753,322), state 0x0, keycode 104 (keysym 0xff54, Down), same_screen YES, XLookupString gives 0 bytes:
То, что написано после keycode, и есть код клавиши (выделение - моё). Пробуем нажать и отпустить мультимедийную кнопку - если видим какой-нибудь keycode, радуемся. Осталось только поставить соответствующий софт, чем и займёмся.

Софт для использования мультимедийных кнопок

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

Итак, в Debian Linux есть единственная программа, которая позволяет комфортно использовать в Иксах мультимедийные кнопки:
hotkeys - A hotkeys daemon for your Internet/multimedia keyboard in X
Ставим:
# apt-get install hotkeys
Отлично, теперь запускаем её, указывая параметр клавиатуры:
hotkeys -t btc8190
Предопределённых конфигов довольно много, но они друг от друга отличаются только тем, какие коды клавиш определены для каких действий. Поэтому идём в каталог /usr/share/hotkeys и смотрим, какой конфиг (по содержимому) нам ближе. Его можно и нужно редактировать под свою клавиатуру и потребности. На код клавиши можно поставить всё, что угодно. Например, мне удобно управлять только плеером с клавиатуры (у меня Dialog KP-105UH), поэтому я напряг xev на предмет кодов клавиш мультимедиа, поправил конфиг и вот что получилось:
А вот собственно текст конфига:

<?xml version="1.0"?>

<definition>

<config model="BTC Smart Office (8190)">

<NextTrack keycode="153"/>
<PrevTrack keycode="144"/>
<Play keycode="162"/>
<Stop keycode="164"/>

<VolUp keycode="176" adj="2"/>
<VolDown keycode="174" adj="2"/>
<Mute keycode="160"/>
<userdef keycode="231" command="/usr/bin/myscript/cdem">CDchange</userdef>
<userdef keycode="223" command="/usr/bin/myscript/cdem">CDchange</userdef>
<userdef keycode="222" command="/usr/bin/myscript/cdem">CDchange</userdef>
</config>

<contributor>
<name>Petrisor Eddy Marian</name>
<email>marian.petrisor@siemens.com</email>
</contributor>

</definition>


Другие программы использования мультимедийных кнопок в Linux
На этом история не заканчивается - есть и другие приёмы работы с мультимедийными кнопками. На никс-форуме советовали для борьбы с клавиатурами обратить внимание на следующие программы:
1) keytouch - это, думаю, лучшее, что есть, но, возможно, вы не найдёте среди поддерживаемых свою клавиатуру;
2) sven - глючная, собирать из исходников надо, когда устанавливаешь. Правда, включает в себя многие вкусности, которые у меня не заработали.
3) xmodmap - подключаем клавиатуры через xmodmap ~/.xmodmaprc, в ~/.xmodmaprc в свою очередь прописываем сопоставления функций кодам клавиш, все замечательно. Один из подходов к использованию мультимедийных кнопок с использованием xmodmap дан здесь.

Ссылки:
Есть интересная информация на форумах Убунту:
https://www.ubuntulinux.org/wiki/MultimediaKeys
http://www.ubuntuforums.org/showthread.php?t=109377
О программе keyTouch http://keytouch.sf.net/

29 комментариев:

  1. У меня Defender'овская дешовка с клавишей Fn для защиты от случайного нажатия "Power-Sleep-Wake".
    Может удастся приспособить. 8-)

    ОтветитьУдалить
  2. У меня Defender'овская дешовка с клавишей Fn
    По идее, возможно. А xev эти клавиши ловит?

    ОтветитьУдалить
  3. Мимо пролетела птица обломинго! 8-)
    Не катит,в сочетании с ней работает только эта тройка,отдель но они не опознаются,как-будто не нажимаются.
    В применении к остальным Fn эффекта недает. 8-(

    ОтветитьУдалить
  4. Ух ты!!!
    Чего за замуть?!

    ОтветитьУдалить
  5. Муть такая, что у движка Блоггер.ком сейчас перемены. Дубликаты снёс. Пиши ещё :-)

    ОтветитьУдалить
  6. Уважаемый virens, Вы почему-то не упомянули программу xbindkeys, которая очень удобна и понятна даже новичку.

    P.S. Материалы на Вашем блоге интересные и познавательные.

    chitatel с наилучшими пожеланиями.

    ОтветитьУдалить
  7. Действительно, xbindkeys, по-моему, лучшая программа подобного рода. Подходит как для мыши, так и для клавиатуры.

    ОтветитьУдалить
  8. 2chitatel: Вы почему-то не упомянули программу xbindkeys
    Что-то о ней слышал, но решил привести сначала то, чем пользуюсь сам. Спасибо, пост обязательно поправлю в ближайшие выходные - поставлю xbindkeys, поиграюсь и опишу :-)

    2igor: Действительно, xbindkeys, по-моему, лучшая программа подобного рода.
    Верю - просто на неё не наткнулся. Внёс в список обязательных исправлений.

    Уважаемым комментаторам огромное спасибо за конструктивную критику - за это блоггинг и люблю: если что пропустишь, тебе обязательно поставят на вид :-)

    ОтветитьУдалить
  9. Пытался я этой штукой воспользоватся, когда нашел. В результате вернул назад то, что было.(sven.linux.kiev.ua). Ни разу не дебиан, согласен. Вылетает, и хуже того, виснет - на ура. Но. Описанная софтина у меня при полноэкранном mplayer все попытки изменить громкость нехило лагает. А свен - нет. Потому и оставил, это для меня приоритетно.

    ОтветитьУдалить
  10. Посмотрел я на xbindkeys... Что-то оно не шибко простое в пользовании. Надо будет ещё раз посмотреть.

    ОтветитьУдалить
  11. А что там сложного-то? Т.Е. для простого задействования мультимедийных клавиш - просто, по-моему.
    Сделал так:
    1.xev - получил сканы кодов
    2.xmodmap - их подгрузка
    3. xbindkeys - их, соответственно, обработка.
    наверняка можно всё это организовать как-то и по-другому (с тем же xbindkeys).
    С наилучшими пожеланиями - chitatel

    ОтветитьУдалить
  12. 2chitatel:
    наверняка можно всё это организовать как-то и по-другому (с тем же xbindkeys).
    С наилучшими пожеланиями - chitatel

    Не сомневаюсь, что сложного там ничего нет :-) Буду копать. Тогда либо изменю этот пост, либо напишу новый. В любом случае спасибо за информацию.

    ОтветитьУдалить
  13. Вот, например:
    "xterm"
    c:223
    При нажатии на клавишу, имеющую код "223" вызовется xterm. Аналогичные привязки делаются и для остальных клавиш.

    ОтветитьУдалить
  14. У меня Oklick 330M. Xev ловит не все кнопки, зато стандортные гномовские "Горячие кнопки" (или как-то так) легко понимают все клавиши. Хотя, есть и ограничения - браузером, например, управлять не получится...

    ОтветитьУдалить
  15. xbindkeys и вправду хорошее впечатление производит, но есть одно но: "из коробки" она обучена работать только внутри аккаунта.
    Сейчас пытаюсь заставить работать из-под рута, чтобы при запущенном окне для ввода логина работало. Но пока что-то не получается. Разбираюсь.

    Нужно это мне для того, чтобы с помощью мультимедийных кнопок управлять mpd (Music Player Daemon) -- то есть чтобы включать и выключать музыку, изменять громкость и переключать треки -- не залогиниваясь.

    ОтветитьУдалить
  16. перестал пользоваться всякими нештатными биндерами, после того, как заметил что во всех прогах под эмулятором, забинденные клавиши не пашут вообще, ни привязанные функции не выполняются, ни штатные.
    поэтому сейчас использую xmodmap + стандартный биндер оконного менеджера

    Ещё есть очень сильно гнетущий вопрос
    есть мышь a4tech NB-95 с 5 кнопками и 2 колёсами, никак не получается заставить работать одновременно и второе колесо и все доп-кнопки...

    ОтветитьУдалить
  17. У меня xbindkeys выдает следующую ошибку на стандартном конфигурационном файле. Чтобы это могло значить? Где копать?

    [msaushkin@k26 ~]$ xbindkeys -s
    ERROR: In procedure read:
    ERROR: Unknown # object: #\space

    Some deprecated features have been used. Set the environment
    variable GUILE_WARN_DEPRECATED to “detailed” and rerun the
    program to get more information. Set it to “no” to suppress
    this message.

    ОтветитьУдалить
  18. Mike, как разобрался? Второе колесо скроллит по горизонтали? У меня не получилось
    mityaz@mail.ru

    ОтветитьУдалить
  19. у меня Acer Aspire 9123 WLMI vex - никакие мультимедийные клавиши не ловит. А очень бы хотелось их юзить. как включить их поддержку? Заранее спасибо

    ОтветитьУдалить
  20. 1. hotkeys - сначала я пользовался им, это единственное, что я нашёл с поддеркой OSD, но.. Но во-первых он не стабилен, а во вторых osd меню затормаживало графику.
    2. keytouch - затем почитав данный тред я попробовал его. Небо и земля, великолепная софтина, имеет keytouch-editor для созданий профиля клавиатуры (при его использовании не имеет значения какая у тебя клавиатура, главное, чтобы ядро поддерживало мультимедийные клавиши). Всё бы хорошо, но во-первый нет OSD меню (а мне без него в DWM как-то грустно), а во вторых слишком сложный он, громоздкий и работает из коробки демоном под root-ом.
    3. Пошёл я искать дальше :) И нашёл! Лучше на данный момент для мультимедийных клавиш наверное нет. Маленький, стабильный, быстрый, с osd меню и возможностью подключения плагинов. И кроме всего прочего это единственная софтина в которой по дефолту в списке была моя клавиатура - MNEK4K (хотя это имеет не большое значение, профиль легко редактировать, но всё же приятно). Итак, встречайте - lineakd.

    lineakd -l выводим список профилей для кейбордов
    lineakd -c MNEK4K - указываем профиль
    vim/nano ~/.lineak/lineakd.conf - редактируем действия

    PS: 1. для osd меню нужен плагин xosd, лежит в пакете lineak-xosdplugin. 2. для управления микшером и cdrom тоже нужны плагины - lineak-defaultplugin

    ОтветитьУдалить
  21. Так замечательно, но я не понял, главного, вы пишете
    hotkeys -t btc8190
    А затем -
    Например, мне удобно управлять только плеером с клавиатуры (у меня Dialog KP-105UH)
    То есть чем соотносится btc8190 и KP-105UH
    Соответственно, если у мну KF-L3SP мну с какой hotkeys врубать.

    ОтветитьУдалить
  22. 2 Boot комментирует...
    у меня Acer Aspire 9123 WLMI vex - никакие мультимедийные клавиши не ловит.
    Надо настраивать ACPI, менять ядро. Без этого мультимедийные клавиши могут быть недоступны.

    2 GiNeR комментирует...
    Спасибо за такой развёрнутый и интересный комментарий! Я его часть попользую для постов :-)

    ОтветитьУдалить
  23. пользовал xbindkeys для клавы и мышки, настраивается легко при помощи xbindkeys-config. Управление приложениями при помощи DCOP.

    ОтветитьУдалить
  24. Спасибо за статью. Лично я попробовал все вышеперечисленное, но остановился на keytouch

    ОтветитьУдалить
  25. а можно ли делать подмену кейкодов? тоесть чтоб при нажатии на одну кнопку он имитировал нажатие на другую.

    ОтветитьУдалить
  26. А что делать, если код клавиши не отловился? У меня так произошло на Samsung R510-FA01 для кнопок подсветки монитора. Работают они через Fn.

    ОтветитьУдалить
  27. Она регулирует яркость железно. Без операционки.

    ОтветитьУдалить
  28. Привет. Ребят, а как мне просто поменять один кейкод на другой?... Мне не нужны мультимедиа клавиши, просто у меня на клаве не работает клавиша девять и я хочу поменять её на клавишу вызова контекстного меню и таким образом мне надо просто поменять код 18 на код 135, как?

    ОтветитьУдалить