linux - 如何在 Linux 中模拟集成数字键盘光标键

标签 linux numeric keypad emulation integrated

在许多旧笔记本电脑和一些紧凑型键盘上有一个 integrated numeric keypad在主键盘区。这个备用键盘是通过左侧 Ctrl 键旁边的特殊“Fn”键激活的。

作为一名程序员,我学会了使用光标移动键(箭头、PgUp、PgDn 等)并发现它大大提高了我的编程速度。而且这些好处并不像使用专用快捷键那样仅限于单个应用程序。

在传统 PC 键盘上,“Windows 键”可用于模拟“Fn”键和相应的集成数字小键盘。当我以前使用 MS Windows 时,我发现 Autohotkey能够使用 a simple script 映射键.

最近我了解了 xkb 以及它如何用于 map keystrokes at a very low level .

什么是 xkb 键盘映射配置文件,它将使用 windows 键作为 fn 键来模拟集成数字小键盘?

提示(?):我怀疑该文件看起来很像 Debian 衍生 linux 发行版上的“/usr/share/X11/xkb/symbols/keypad”文件。这个“键盘”文件包含在“/usr/share/X11/xkb/symbols/pc”文件的顶部。

corresponding autohotkey script供引用(# == 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 键配合使用。

最佳答案

在 Linux/XKB 的主键盘上安装类似数字小键盘的光标键的步骤...

  1. xkbcomp $DISPLAY original.xkb(以防万一;)
  2. xkbcomp $DISPLAY custom.xkb
  3. 编辑 custom.xkb
  4. 在部分末尾添加以下内容:xkb_types "..."{

    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. 在 xkb_symbols "..."部分末尾添加以下内容 {

     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”和“,”处理鼠标滚动。

编辑: 上述解决方案不能与 Google Chrome 和基于 Chrome 的应用程序(如 Slack)配合使用。

另一种方法是使用可编程键盘。我使用 after-market PCB for a CoolerMaster Masterkeys S keyboard . Easy AVR布局是 available online (虽然目前左侧的 win 键现在不能单独使用...我使用右侧的)。

关于linux - 如何在 Linux 中模拟集成数字键盘光标键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32822857/

相关文章:

java - J2ME 文本字段异常

c - 将 4x4 键盘矩阵与 Atmega32 连接

php - 设置 cron 作业为绝对路径

linux - 仅向特定应用程序授予文件夹的写权限

c# - 大写锁定的数字 ID 是什么?

r - 查找最近的较小数字

python - 使用树莓派 3 从 4x4 键盘读取多个数字

python - 用于 (1x4) 矩阵键盘的 Circuitpython

linux - 安装新内核时如何自动编译linux内核模块?

linux - 用于更改文本文件的 Shell 脚本/linux 命令