Linux 上的按键映射

Linux 上的按键映射

我想更改布局(映射)联想 ThinkPad 键盘(我讨厌)就像宏碁 TravelMate 8000(我喜欢)。

宏碁 TravelMate 8000 键盘

这主要意味着:

  • 交换 Fn 和左 Ctrl
  • Tab-left 作用类似于 PgUp
  • Fn' + Tab-left 用作 Home
  • Tab-right 作用类似于 PgDown
  • Fn' + Tab-right 作用类似于 End
  • PgUp 用作 Delete
  • 首页 行事像 插入

我尝试xev查看代码。
我找到了以下符号列表:http://cs.gmu.edu/~sean/stuff/n800/keyboard/keysymdef.h
这是我的结果:

xmodmap -e 'keycode 112 = XF86Back'     # Remap PgUp to TabPrev
xmodmap -e 'keycode 117 = XF86Forward'  # Remap PgDn to Tabnext
xmodmap -e 'keycode 166 = Prior Home XF86Back'        # Remap TabPrev to PgUp.
xmodmap -e 'keycode 167 = Next End XF86Forward'       # Remap TabNext to PgDn.
xmodmap -e 'keycode 151 = Control_L'    # Remap FN to be Ctrl.
xmodmap -e 'keycode  37 = XF86WakeUp'   # Remap Ctrl to be FN.
xmodmap -e 'keycode  94 = Shift_L'      # Remap stupid left |\*& to be Shift too.

然而,这并不是我真正需要的,因为它将 Shift + Tab* 映射到 Home,这使我无法使用Shift+Home'组合键(选择文本)并且仅在某些应用程序中有效(例如,在 Firefox 中无法转到顶部)。

那么——我应该如何映射它?


更新:我使用setkeycodes并发现了以下扫描码:

                 Press            Release
TabLeft  - 158   ^[[5~0xe0 0x6a   0xe0 0xea 
TabRight - 159   ^[[6~0xe0 0x69   0xe0 0xe9
PgUp:            0xe0 0x49        0xe0 0xc9 
PgDn:            0xe0 0x51        0xe0 0xd1 

Ctrl:            0x1d             0x9d 
FN:              0xe0 0x63        0xe0 0xe3

更新:我还发现其中dumpkeys显示了有趣的信息。例如,某些键的字符串别名;例如,^[[5~显示的showkey -s是在那里定义的。


更新: 我试过了setkeycodes

sudo setkeycodes 0xE063  29  ##  Fn   to Ctrl
sudo setkeycodes 0x1d   143  ##  Ctrl to Fn
sudo setkeycodes 0x56    42  ##  |\*& to Shift

showkeys-k 显示正确的键码,但它们仍然不起作用 - 例如,Ctrl+T不会在 FF 等中打开选项卡。
恢复更改后,一切都像以前一样正常工作。

sudo setkeycodes 0xE063 143  ##  Fn   to Ctrl
sudo setkeycodes 0x1d    29  ##  Ctrl to Fn

我错过了什么?

答案1

在查找无法将大于 128 的键码映射为修饰键的问题状态时,我偶然发现了这篇文章。上次我检查时,这就是我无法交换 fn/ctrl 的原因。

答案2

在 BIOS 中可以进行 ThinkPad 中的 交换Ctrl和按键:fnhttps://support.lenovo.com/us/en/solutions/ht074187-how-to-swap-the-fn-function-and-ctrl-control-keyboard-keys-in-bios

据我所知,这是唯一可行的方法,因为它Ctrl具有某种特殊含义,并且不可能在操作系统级别进行交换。

相关内容