Как эмулировать клавиши курсора встроенной цифровой клавиатуры в Linux

На многих старых ноутбуках и некоторых компактных клавиатурах есть встроенная цифровая клавиатура в основную клавиатуру. площадь. Эта альтернативная клавиатура активируется специальной клавишей «Fn» рядом с левой клавишей Ctrl.

Как программист я научился использовать клавиши перемещения курсора (стрелки, PgUp, PgDn и т. д.) и обнаружил, что это значительно повысило мою скорость программирования. И преимущества не были связаны только с одним приложением, как в случае со специализированными сочетаниями клавиш.

На обычных клавиатурах ПК «клавиша Windows» может использоваться для эмуляции клавиши «Fn» и соответствующей встроенной цифровой клавиатуры. Когда я использовал MS Windows, я обнаружил, что Autohotkey может сопоставлять ключи, используя простой сценарий.

Недавно я узнал о xkb и о том, как его можно использовать для отображать нажатия клавиш на очень низком уровне.

Какой профиль сопоставления клавиатуры xkb будет эмулировать встроенную цифровую клавиатуру с использованием клавиши Windows в качестве клавиши Fn?

Подсказка(?): Я подозреваю, что файл будет очень похож на файл '/usr/share/X11/xkb/symbols/keypad' в дистрибутиве Linux, производном от Debian. Этот файл «клавиатуры» включен в начало файла «/usr/share/X11/xkb/symbols/pc».

соответствующий скрипт autohotkey для справки (# == WinKey ):

#8::Up
#k::Down
#u::Left
#o::Right

#7::Home
#j::End
#9::PgUp
#l::PgDn

#m::Insert
#.::Delete

;(Scroll with the left-over keys)
#i::WheelUp
#,::WheelDown

Обратите внимание, что все эти клавиши должны работать с любой комбинацией Ctrl, Alt, Shift, а также с клавишей Windows.


person Peter L    schedule 28.09.2015    source источник
comment
Я добился некоторого прогресса в этом, но мне не хватает опыта работы с xkb. На сайте unix был задан более конкретный связанный вопрос.   -  person Peter L    schedule 21.10.2015


Ответы (1)


Шаги по установке клавиш курсора, похожих на цифровую клавиатуру, на основную клавиатуру в Linux / XKB...

  1. xkbcomp $DISPLAY original.xkb (на всякий случай ;)
  2. xkbcomp $DISPLAY custom.xkb
  3. Изменить custom.xkb
  4. #P2# <блочная цитата>
    type "WinKeyAsFnKey" {
      modifiers = Shift+Super;
      map[Shift] = level2;
      map[Super] = level3;
      map[Super+Shift] = level3;
      level_name[Level1] = "Base";
      level_name[Level2] = "Caps";
      level_name[Level3] = "Fn";
    };
    
  5. #P3# <блочная цитата>
     key <AE07> {type="WinKeyAsFnKey",symbols[Group1]=[7,ampersand,NoSymbol],actions=[NoAction(),NoAction(),RedirectKey(key=<HOME>,clearmods=Super)]};
     key <AE08> {type="WinKeyAsFnKey",symbols[Group1]=[8,asterisk,NoSymbol],actions=[NoAction(),NoAction(),RedirectKey(key=<UP>,clearmods=Super)]};
     key <AE09> {type="WinKeyAsFnKey",symbols[Group1]=[9,parenleft,NoSymbol],actions=[NoAction(),NoAction(),RedirectKey(key=<PGUP>,clearmods=Super)]};
     key <AD07> {type="WinKeyAsFnKey",symbols[Group1]=[u,U,NoSymbol],actions=[NoAction(),NoAction(),RedirectKey(key=<LEFT>,clearmods=Super)]};
     key <AD09> {type="WinKeyAsFnKey",symbols[Group1]=[o,O,NoSymbol],actions=[NoAction(),NoAction(),RedirectKey(key=<RGHT>,clearmods=Super)]};
     key <AC07> {type="WinKeyAsFnKey",symbols[Group1]=[j,J,NoSymbol],actions=[NoAction(),NoAction(),RedirectKey(key=<END>,clearmods=Super)]};
     key <AC08> {type="WinKeyAsFnKey",symbols[Group1]=[k,K,NoSymbol],actions=[NoAction(),NoAction(),RedirectKey(key=<DOWN>,clearmods=Super)]};
     key <AC09> {type="WinKeyAsFnKey",symbols[Group1]=[l,L,NoSymbol],actions=[NoAction(),NoAction(),RedirectKey(key=<PGDN>,clearmods=Super)]};
     key <AB07> {type="WinKeyAsFnKey",symbols[Group1]=[m,M,NoSymbol],actions=[NoAction(),NoAction(),RedirectKey(key=<INS>,clearmods=Super)]};
     key <AB09> {type="WinKeyAsFnKey",symbols[Group1]=[period,greater,NoSymbol],actions=[NoAction(),NoAction(),RedirectKey(key=<DELE>,clearmods=Super)]};
    
  6. Сохранить пользовательский.xkb

  7. xkbcomp custom.xkb $DISPLAY

Я все еще работаю над прокруткой мыши с помощью «i» и «,».

EDIT: приведенное выше решение не работает с Google Chrome и приложениями на основе Chrome (например, Slack).

Альтернативный подход заключается в использовании программируемой клавиатуры. Я использую послепродажную плату для клавиатуры CoolerMaster Masterkeys S . Макет Easy AVR — это доступно онлайн (хотя в настоящее время левая клавиша win не работает сама по себе.. .Я использую правильный).

person Peter L    schedule 23.10.2015