[Solved] Изменение назначения клавиш модификаторов

Хочу переназначить клавиши таким образом ( для работы в 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

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".