Но есть клавы с кодами и 600+, которые, естественно, не работают - и никакие xev&ko их не видят.
Решением стал патч для evdev:
Этот патч позволяет переназначить коды клавиш так, чтобы они попали в поддерживаемый иксами диапазон 8-255.
В Gentoo процесс лечения evdev будет выглядеть так
Также, т.к. xev не видит коды свыше 255, пришлось поставить т.н. evtest. Пакеты есть во многих дистрах - Fedora, Debian, Arch...для генты не нашёл - потому нарисовал ебилд если нет пакета - можно собрать и руками
ebuild /usr/portage/x11-drivers/xf86-input-evdev/xf86-input-evdev-2.6.0.ebuild prepare cd /var/tmp/portage/x11-drivers/xf86-input-evdev-2.6.0/work/xf86-input-evdev-2.6.0/ patch -p1 < /путь/до/evdev-over-255-2.6.0.patch ebuild /usr/portage/x11-drivers/xf86-input-evdev/xf86-input-evdev-2.6.0.ebuild mergeлибо воспользоваться автопатчером из это статьи
Также, т.к. xev не видит коды свыше 255, пришлось поставить т.н. evtest. Пакеты есть во многих дистрах - Fedora, Debian, Arch...для генты не нашёл - потому нарисовал ебилд если нет пакета - можно собрать и руками
mkdir evtest cd evtest/ wget http://beagleboard.googlecode.com/files/evtest.c gcc -o evtest evtest.cТеперь надо найти клаву
megabaks@desktop ~/evtest USA $ ls -l /dev/input/by-id/ итого 0 lrwxrwxrwx 1 root 0 9 Янв 23 03:30 usb-A4Tech_USB_Mouse-event-mouse -> ../event4 lrwxrwxrwx 1 root 0 9 Янв 23 03:30 usb-A4Tech_USB_Mouse-mouse -> ../mouse0 lrwxrwxrwx 1 root 0 9 Янв 23 19:29 usb-KYE_4D_device_Ergomedia-event-if01 -> ../event3 lrwxrwxrwx 1 root 0 9 Янв 23 19:29 usb-KYE_4D_device_Ergomedia-event-kbd -> ../event2 megabaks@desktop ~/evtest USA $Моя клава здесь - это /dev/input/event2 и /dev/input/event3
Теперь собственно выясняем коды капризных кнопок
./evtest /dev/input/event3Получим после нажатия кнопок что-то типа
Event: time 1295853582.360298, type 4 (Misc), code 4 (ScanCode), value c022d Event: time 1295853582.360305, type 1 (Key), code 418 (?), value 1 Event: time 1295853582.360307, -------------- Report Sync ------------ Event: time 1295853582.464293, type 4 (Misc), code 4 (ScanCode), value c022d Event: time 1295853582.464297, type 1 (Key), code 418 (?), value 0 Event: time 1295853582.464298, -------------- Report Sync ------------ Event: time 1295853583.712333, type 4 (Misc), code 4 (ScanCode), value c022e Event: time 1295853583.712338, type 1 (Key), code 419 (?), value 1 Event: time 1295853583.712339, -------------- Report Sync ------------ Event: time 1295853583.864339, type 4 (Misc), code 4 (ScanCode), value c022e Event: time 1295853583.864344, type 1 (Key), code 419 (?), value 0 Event: time 1295853583.864346, -------------- Report Sync ------------это 2 кнопки, обозначенные как Zoom(+ и -)
Но так как зум мне не нужен, решил сделать из них скролл. Теперь надо дать этим кнопкам соответствующие имена и, естественно, коды. Смотрим что же у нас есть
xmodmap -pkeНаходим подходящие кнопки
keycode 162 = XF86ScrollUp NoSymbol XF86ScrollUp keycode 186 = XF86ScrollDown NoSymbol XF86ScrollDownТеперь собственно и настраиваем кнопки - для этого создаём файл /etc/X11/xorg.conf.d/10-keyboard.conf примерно вот такого содержания
Section "ServerLayout" Identifier "Layout0" Screen 0 "Screen0" 0 0 InputDevice "Keyboard1" "SendCoreEvents" EndSection Section "InputDevice" Identifier "Keyboard1" Driver "evdev" Option "Device" "/dev/input/event3" Option "event_key_remap" "418=162 419=186 423=101 425=156 421=157" EndSectionдумаю тут всё понятно.
Теперь осталось только перезапустить иксы/перезагрузить_комп и убедиться, что "мёртвые" кнопки ожили. для этого воспользуемся уже xev в выхлопе которого, при нажатии ранее не работающих кнопок, увидим что-то типа этого
KeyPress event, serial 34, synthetic NO, window 0x2a00001, root 0x15a, subw 0x0, time 101283197, (208,531), root:(211,535), state 0x10, keycode 162 (keysym 0x1008ff78, XF86ScrollUp), same_screen YES, XLookupString gives 0 bytes: XmbLookupString gives 0 bytes: XFilterEvent returns: False KeyRelease event, serial 34, synthetic NO, window 0x2a00001, root 0x15a, subw 0x0, time 101283341, (208,531), root:(211,535), state 0x10, keycode 162 (keysym 0x1008ff78, XF86ScrollUp), same_screen YES, XLookupString gives 0 bytes: XFilterEvent returns: False KeyPress event, serial 34, synthetic NO, window 0x2a00001, root 0x15a, subw 0x0, time 101285053, (208,531), root:(211,535), state 0x10, keycode 186 (keysym 0x1008ff79, XF86ScrollDown), same_screen YES, XLookupString gives 0 bytes: XmbLookupString gives 0 bytes: XFilterEvent returns: False KeyRelease event, serial 34, synthetic NO, window 0x2a00001, root 0x15a, subw 0x0, time 101285197, (208,531), root:(211,535), state 0x10, keycode 186 (keysym 0x1008ff79, XF86ScrollDown), same_screen YES, XLookupString gives 0 bytes: XFilterEvent returns: FalseТеперь можно вешать на них желаемые действия...короче, пользоваться
Хех, я когда-то linux/include/linux/input.h для этих целей правил
ОтветитьУдалитьпоказывай патчи :)
ОтветитьУдалитьО, даже ядро патчить не надо. Надо бы попробовать на досуге.
ОтветитьУдалитьДа чего там показывать. Просто заменял коды >255 нужных кноп на коды <255 ненужныхю
ОтветитьУдалить