我想更改布局(映射)联想 ThinkPad 键盘(我讨厌)就像宏碁 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具有某种特殊含义,并且不可能在操作系统级别进行交换。