Настройка мультимедийных клавиш на клавиатуре
Автор: Гурьянов Дмитрий
Зачечания и предложения пишите сюда с пометкой в теме '{node 97}'.
Итак, Вы наконец-то добрались до клавиатуры. Конечно, зря что-ли производители стараются, делают по 20-30 дополнительных клавиш. Хочется, чтобы они работали. Под windows они, конечно же выпускают драйвера, различные модные програмки, а под линукс - ничего. Но не надо расстраиваться, в линуксе с этим делом намного лучше, чем в windows, так, например для моих двух клав - sven slim internet 330 и mitsumi internet keyboard - под виндой не было нормального ПО. А в линуксе для всех клавиатур это настраивается абсолютно одинаково. А действия на эти клавиши можно повесить с помощью оболочки, которую используете (во всех по-разному настраивается).
Весь смысл настройки клавиатуры в следующем: чтобы оконная система могда нормально использовать клавишу, для нее (для клавиши ) должно быть установлено соответствие ее скэн-кода с кодом Х-сервера, а для кодов Х-сервера заданы символьные имена, в файле /usr/X11R6/include/X11/XF86keysym.h
находится куча символьных обозначений для мультимедийных клавиш. Лучше выбрать будущие имена для клавиш оттуда, хотя можно также посмотреть файл /usr/X11R6/include/X11/keysymdef.h
. Таким образом нам надо привязать наши клавиши к символьным именам.
Ладно, приступим к настройке.
Во-первых, надо определить скэн-коды всех мультимедийных клавиш и записать их куда-нибудь (ну, или запомнить :)). Сделать это можно с помощью прогрммы xev
, которая отлавливает все сообщения от оконной сисемы и выводит информацию на терминал. При нажатии клавиш должно выводиться что-то вроде этого:
KeyPress event, serial 30, synthetic NO, window 0x2400001, root 0xb6, subw 0x0, time 16490621, (425,88), root:(475,114), state 0x0, keycode 232 (keysym 0x0, NoSymbol), same_screen YES, XLookupString gives 0 bytes: XmbLookupString gives 0 bytes: XFilterEvent returns: False KeyRelease event, serial 30, synthetic NO, window 0x2400001, root 0xb6, subw 0x0, time 16490688, (425,88), root:(475,114), state 0x0, keycode 232 (keysym 0x0, NoSymbol), same_screen YES, XLookupString gives 0 bytes: KeyPress event, serial 30, synthetic NO, window 0x3000001, root 0xb6, subw 0x0, time 17760217, (325,439), root:(375,465), state 0x0, keycode 9 (keysym 0xff1b, Escape), same_screen YES, XLookupString gives 1 bytes: (1b) " XmbLookupString gives 1 bytes: (1b) " XFilterEvent returns: False KeyRelease event, serial 30, synthetic NO, window 0x3000001, root 0xb6, subw 0x0, time 17760346, (325,439), root:(375,465), state 0x0, keycode 9 (keysym 0xff1b, Escape), same_screen YES, XLookupString gives 1 bytes: (1b) "
Это я нажал сначала неизвестную X-серверу клавишу E-mail, а потом Escape. Нам нужен keycode. За ним в скобках идет сначала код клавиши для X-сервера, а затем символьное обозначение клавиши. Видно, что для Escape есть и код X-сервера и символьное обозначение.
Теперь,собственно, займемся настройкой привязки скэн-кодов. Сейчас нужно определить еще одну вещь - символьные имена скэн-кодов. Дело в том, что джля каждого скэн-кода задано имя, и в файле где мы будем описывать наши клавиши надо будет указывать именно эти имена, а не сами скэн-коды. Открываем файл /usr/X11R6/lib/X11/xkb/keycodes/xfree86
, ищем там наши скэн-коды и узнаем их имена. Например для клавиши E-Mail на клаве Genius KB-0138 видим: <I6C> = 236
.
Теперь займемся добавлением новой модели клавиатуры.
Редактируем файлы xorg
, xorg.lst
и xorg.xml
, ну, или xfree86
и xfree86.lst
, если у Вас xfree в /usr/X11R6/lib/xkb/rules
. Добавим нашу клавиатуру к группе inet. В файле xorg добавим имя нашей клавиатуры в конец списка клавиатур группы inet :
! $inetkbds = airkey acpi scorpius azonaRF2300 \ brother \ btc5113rf btc5126t btc9000 btc9000a btc9001ah btc5090\ cherryblue cherrybluea \ chicony chicony9885 \ compaqeak8 compaqik7 compaqik13 compaqik18 armada presario ipaq \ dell inspiron dtk2000 \ dexxa diamond genius geniuscomfy2 \ ennyah_dkb1008 \ hpi6 hp2501 hp2505 hp5181 hpxe3gc hpxe3gf hpxe4xxx hpzt11xx \ hp500fa hp5xx hp5185 \ honeywell_euroboard \ rapidaccess rapidaccess2 rapidaccess2a \ ltcd logiaccess logicdp logicdpa logicink logiciink \ logiinkse logiinkseusb logiik itouch \ mx1998 mx2500 mx2750 \ microsoftinet microsoftpro microsoftprooem microsoftprose \ microsoftoffice microsoftmult \ oretec \ propeller \ qtronix \ samsung4500 samsung4510 \ sk1300 sk2500 sk6200 sk7100 \ sven symplon toshiba_s3000 trust trustda yahoo genius138
В xorg.lst
добавим имя и описание клавиатуры
... toshiba_s3000 Toshiba Satellite S3000 trust Trust Wireless Keyboard Classic trustda Trust Direct Access Keyboard yahoo Yahoo! Internet Keyboard genius138 Genius Internet Keyboard // The entries here should be ordered as follows: ...
В xorg.xml
тоже описание, на всякий случай (аналогично остальным моделям), хотя можно это и пропустить.
Теперь надо указать соответствия между именами скэн-кодов и именами клавих в иксах, это можно сделать в файле /usr/X11R6/lib/X11/xkb/symbols/inet
, так как мы добавили клавиатуру в группу inet. Там в конце файла пишем что-то вроде этого:
partial alphanumeric_keys xkb_symbols "genius138" { name[Group1]= "Genius Internet Keyboard"; key <I6C> { [ XF86Mail ] }; key <I68> { [ XF86Stop ] }; key <I67> { [ XF86Refresh ] }; key <I6A> { [ XF86Back ] }; key <I32> { [ XF86WWW ] }; key <I69> { [ XF86Forward ] }; key <I65> { [ XF86Search ] }; key <I66> { [ XF86Favorites ] }; key <I5F> { [ XF86Sleep ] }; New Action };
Теперь нужно сказать Х-серверу, что клава у нас модели genius138 (для моего случая ). Открываем файл /etx/X11/xorg.conf
или /etc/X11/XF86Config
. Ищем место, где описывается клавиатура, и в качестве модели указываем нашу клавиатуру, вместо pc104
(или что там у Вас раньше стояло :)):
Section "InputDevice" Identifier "Keyboard1" Driver "keyboard" Option "AutoRepeat" "250 30" Option "XkbRules" "xfree86" Option "XkbModel" "genius138" Option "XkbLayout" "us,ru(winkeys)" Option "XkbOptions" "grp:ctrl_shift_toggle,grp_led:scroll,altwin:menu" EndSection
На этом настройка Х-сервера закончена. Осталось его перезапустить, например комбинацией клавивиш Alt-Ctrl-BackSpace ;). Запускаем опять утилиту xev, смотрим, что получилось:
KeyPress event, serial 30, synthetic NO, window 0x2a00001, root 0xb6, subw 0x0, time 521517, (92,-18), root:(142,8), state 0x0,keycode 236 (keysym 0x1008ff19, XF86Mail), same_screen YES, XLookupString gives 0 bytes: XmbLookupString gives 0 bytes: XFilterEvent returns: False KeyRelease event, serial 30, synthetic NO, window 0x2a00001, root 0xb6, subw 0x0, time 521647, (92,-18), root:(142,8), state 0x0, keycode 236 (keysym 0x1008ff19, XF86Mail), same_screen YES, XLookupString gives 0 bytes: KeyPress event, serial 30, synthetic NO, window 0x2a00001, root 0xb6, subw 0x0, time 522087, (92,-18), root:(142,8), state 0x0, keycode 232 (keysym 0x1008ff28, XF86Stop), same_screen YES, XLookupString gives 0 bytes: XmbLookupString gives 0 bytes: XFilterEvent returns: False KeyRelease event, serial 30, synthetic NO, window 0x2a00001, root 0xb6, subw 0x0, time 522155, (92,-18), root:(142,8), state 0x0, keycode 232 (keysym 0x1008ff28, XF86Stop), same_screen YES, XLookupString gives 0 bytes:
Если вместо имени клавиши опять стоит No_Symbol, то значит что-то тут не так. Если у Вас KDE, то можете запустить Control Center->Regional & Accessibility->Keyboard Layouts, найти свою клавиатуру в списке Keyboard Model и порадоваться своей работой :)
Теперь можно заняться настройкой оболочки. В KDE запускайте Control Center идите в раздел Regional & Accessibility->KHotKeys. Во fluxbox'е это можно сделать в файле ~/.fluxbox/keys
.
На этом настройка закончена.
- Для комментирования войдите или зарегистрируйтесь
Есь
Есь простенький демон
Как привязать
Как привязать скан коды к кей кодам ? у меня при нажатии на некоторые клавиши ничего не происходит и xev их не ловит.
HOWTO_Мультимедий
HOWTO_Мультимедийные_кнопки_(клавиши) на вики есть, там давно уже все расписано
вывод dmesg
Это значит, что ядро не имеет кодов клавиш привязанных к сканкодам вашей клавиатуры. Вы должны добавить одну строку в /etc/conf.d/local.start для каждой отсутствующей клавиши, вот так:
Файл: /etc/conf.d/local.start
mandriva 2008 нотик
mandriva 2008
нотик asus g1s.
программой xev определяется только 4 клавиши,на остальные вообще ничего невыдает.
В мопсе,также определились 4 кнопки,но неработали кнопки функция (fn) и кнопка выключения. Как определить другие клавиши? Спасибо.
Советую
Советую сначала по'grep'ать xorg.lst на предмет вендора своей клавиатуры. У меня gtnius kb16-e scrool, вполне нормально заработала как geniuscomfy2, которая судя по камменту - Genius Comfy KB-21e-Scroll.
Просто добавил в xorg.conf
Option "XkbModel" "geniuscomfy2"
Gnome
А как в Гном переназначить комманды навешиваемые на эти клавиши?
т.е. как сделать, чтобы при нажатии на XF86AudioNext вызывался /usr/bin/xmms -f ?
так же как и для
так же как и для всех остальных "виэмов" -- читай выше
Re: так же как и для
т.е. использовать Sven или XBindKeys?
разве без этого нельзя обойтись? я привязал все кейкоды к символьным именам сответственно требованиям xorg, но как на них навешать свои события?
Я пытался настроить через metacity( Гном по умолчанию грузит его )
но что-то работает оччень глючно. у меня зацепило всего один раз...
после пары часов мучений интерес к metacity у меня пропал.
Кто-нибудь знает как и где это разруливет сам Гном?
Re: так же как и для
в гноме разве нет утилит для конфигурации клавиатуры?
посмотри повнимательнее, должна быть такая...
в ICEWM вот проще -- есть файлик keys
iNDiAnFLy написал(а):в гноме
Есть нашел спасибо.
evadim: забанен за спам
да. в ICEWM
да. в ICEWM события на клавиши определяются в этом файлике /etc/X11/icewm/keys
в гноме есть утилита gnome-keybinding-properties, она позволяет назначить запуск заранее определенных приложений при нажатии определенных клавиш. на XF86AudioNext можно навесить событие следующий трек, но оно жестко нацелено на cdplay.
Как и где это можно переназначить?
В конкретном
В конкретном случае с xmms, использовать всякие привязки, запускающие xmms -f и прочая, есть изысканое извращение.
Правильнее будет сделать
emerge xmms-xf86audio
И жить счастливо :-)
Клава в гноме
Догло мучался с гномом но нашел линк:
http://www.linuxquestions.org/questions/showthread.php?s=&threadid=53834
Смотрите в ответах там очень хорошо расписанно про настройку...
а хелп к гному
а хелп к гному не помогает? может на их хоме есть подробная документация?
всё усложнили "донельзя"
зачем столько мучений?
можно же проще поступить: тем же
xev
выясняем кейкоды своей клавы, а затем юзаемxmodmap
тоесть пишем все эти кейкоды и их символьное обозначение в тот же
~/.xinitrc
, ну или куда удобнее ;)я к примеру поступил именно так:
после уже можно как угодно играться с вашим любимым WM`ом
-- про WM это уже другая тема
УДАЧИ
ЗЫ.
приведённый выше пример с успехом используется для клавиатуры Genius KB-19e NB
А почему всё
А почему всё работает ок, но только небольшой пролмежуток времени? У меня через 2-10 минут клавиши опять не пашут...
видимо
видимо управление перехватывается виэмом или какой-либо софтиной
Re: всё усложнили "донельзя"
По моему тут вообще все просто: lineakd, проверено на Logitech Y-ST39
_________________
registered linux user 395622
{node 97}
Думаю, что xbindkeys проще и удобней. Что-то вреде грячих клавиш для запуска команд. http://hocwp.free.fr/xbindkeys/
Всем советую Sven - http://sven.linux.kiev.ua/
Оч хорошая программа, думаю, что она понравится многим.
Ну так это для Sven клавиатур, а если у меня Ligitech?
---
Компилируем всё, что движется, а что не движется - двигаем и компилируем.
sven
"Программа позволяет вам настроить на работу мультимедиа-клавиатуру любой модели" - на сайт то заходил?... ;-)
http://sven.linux.kiev.ua
http://sven.linux.kiev.ua очень красиво работает
А как насчет доп. клавиш на клавиатуре ноута? xev на них не реагирует
Если на них не
Если на них не реагирует клава, то их может поймать acpi. В любом случае dmesg - Ваш друг.
_________________
Вот такие пироги
Можно проверить. Если при нажатии клавиши ядро выдает сообщение, типа:' to make it known." ( - код клавиши, лучше выбрать незанятый, смотреть занятые командой getkeycodes).
atkbd.c: Unknown key released (translated set 2, code 0xa3 on isa0060/serio0).
atkbd.c: Use 'setkeycodes e023
то можно. (посмотреть сообщение ядра: dmesg | tail )
Если у Вас gentoo то в /etc/conf.d/local.start нужно добавить "setkeycodes e023
Потом выполнить /etc/init.d/local restart, после чего xev будет опознавать заданные клавишы.
ЗЫ: getkeycodes/setkeycodes - нужно выполнять в "чистой" консоли.
А они случайно не только для функций ноута ? Может они в принципе к клавиатуре отношения нее имеют.
---
Gentoo / 2.6.12-rc1 / kde-3.4 (sometimes fluxfox)
Очень может быть, но в виндах (с дровами) они работают. Может есть способ их задействовать?
Попробуй как
Попробуй как тут написано: http://www.fedoralinux.ru/forum/viewtopic.php?id=601
Статья конечно интересная
Но использование lineakd существенно упростит задачу, и не придется редактировать раскладки в XFree/XOrg.
Впрочем оба способа хороши, т.к. lineakd может и не поддерживать вашу клавиатуру. Но если поддерживает - то лучше использовать его. Так что emerge likeakd ;)
---
With best regards, Albert R. Valiev
-----------------------------------
ALT Linux Team [www.altlinux.org]
emerge lineakd
emerge lineakd
Настройка мультимедийных клавиш н
Cтатья без доработок бесполезна на 2.6 ядре' to make it known.
потому что xev при нажатии мульимидийных клавиш ничего не покажет
и только ядро выведет что то типа
atkbd.c: Unknown key released (raw set 2, code 0xdb on isa0060/serio0).
atkbd.c: Use 'setkeycodes e05b
Re: Настройка мультимедийных клавиш
Та же самая проблема. Как ее можно решить? Использовать ту ж lineakd не хотелось бы...
Я нас настраивал по ней, все работает и на ядрах 2.6.
а вы не могли бы сразу дополнить?