[Solved] Изменение назначения клавиш модификаторов
Dimorphus 5 января, 2011 - 16:12
Хочу переназначить клавиши таким образом ( для работы в X'ах c любой раскладкой ):
Caps Lock -> Shift
Shift -> Caps Lock
LCtrl -> LWin
LWin -> LAlt
LAlt -> LCtrl
RCtrl -> RWin
RWin -> RAlt
RAlt -> RCtrl
Пробовал использовать xmodmap, однако, примерно через 5 минут слетают все настройки.
Полагаю, что нужно менять что-то в файлах из `equery f sys-apps/kbd`.
»
- Для комментирования войдите или зарегистрируйтесь

Можешь пропатчить ядро: в
Можешь пропатчить ядро: в drivers/input/input.c в начале функции input_event (после "unsigned long flags;") допиши что-то вроде этого:
if (type == EV_KEY) { if (code == KEY_CAPSLOCK) code = KEY_LEFTSHIFT; else if (code == KEY_LEFTSHIFT) code = KEY_CAPSLOCK; // ну и так далее, не забывай писать "else if", а не "if" }Названия кодов клавиш: http://fxr.watson.org/fxr/source/include/linux/input.h?v=linux-2.6;im=bigexcerpts#L123
XD... Solved?! Я, конечно,
XD... Solved?!
Я, конечно, понимаю, что сам так патчил, но не подумал бы, что еще кто-то сделал бы так же.
patch
*** linux/drivers/input/input.c 2011-01-09 21:48:09.609000006 +0300 --- linux/drivers/input/input_new.c 2011-01-09 21:47:10.233000073 +0300 *************** *** 348,353 **** --- 348,385 ---- { unsigned long flags; + if (type == EV_KEY) { + switch ( code ) { + case KEY_CAPSLOCK: + code = KEY_LEFTSHIFT; + break; + case KEY_LEFTSHIFT: + code = KEY_CAPSLOCK; + break; + case KEY_LEFTALT: + code = KEY_LEFTCTRL; + break; + case KEY_RIGHTALT: + code = KEY_RIGHTCTRL; + break; + case KEY_LEFTMETA: + code = KEY_LEFTALT; + break; + case KEY_RIGHTMETA: + code = KEY_RIGHTALT; + break; + case KEY_RIGHTCTRL: + code = KEY_RIGHTMETA; + break; + case KEY_LEFTCTRL: + code = KEY_LEFTMETA; + break; + } + } + if (is_event_supported(type, dev->evbit, EV_MAX)) { spin_lock_irqsave(&dev->event_lock, flags);Маниаки!
Маниаки!
Вау О_О
Вау О_О
Per aspera ad astra