xmodmap 中重要的是区分键码(来自键盘的原始数字)、键符(键的最终含义)和修饰符标志,它们是键上的标志(不是键符)。说“我说的这个东西是shift键应该修改其他键为shift键”
让我们用这些“类型”注释您的示例
keycode (keycode)66 = (keysym)Control_L
clear (modifier)Lock
add (modifier)Control = (keysym)Control_L
keycode (keycode)117 = (keysym)Caps_Lock
add (modifier)Lock = (keysym)Caps_Lock
现在我们可以更好地了解每一行的作用:
keycode 66 = Control_L
将大写锁定键与控制键的含义相关联(但不作为修饰符)
clear Lock
将删除以前具有修饰符的任何键的修饰符标志Lock
(如代码 66 所代表的大写锁定键最有可能具有)
add Control = Control_L
将 control 修饰符添加到与 keysym 关联的键Control_L
(可能是键码 66 和原始左控制键)
keycode 117 = Caps_Lock
将键码为 117 的键分配为大写锁定(我不确定 117 是什么,我的键盘没有。)
add Lock = Caps_Lock
使用闪亮的新绑定 117 键码将Lock
修饰符重新
添加到键符上。Caps_Lock
所以,直接回答你的问题:
1、Control_L已经映射到66了,为什么还要在第3行加上Control?
您需要修饰符和键符才能使修饰键正确地充当修饰符。(对我来说似乎有点奇怪,但就是这样)
2. 为什么我在实际添加Control时必须清除Lock?
因为与 keycode 66 关联的键仍然会Lock
设置修饰符。修饰符不会被覆盖,您必须清除它们。
3. 为什么在我真正添加 Caps_Lock 之前不清除 Lock?
你也可以这样做,它同样可以很好地工作,因为Lock
目标是修饰符,当你弄乱键盘符号时它不会改变。
xmodmap 可能是一个非常难以配置的野兽,以下是我在尝试理解它时使用的一些链接:
- http://cs.gmu.edu/~sean/stuff/n800/keyboard/old.html
- http://www.jwz.org/xkeycaps/man.html
- http://www.in-ulm.de/~mascheck/X11/xmodmap.html
如果有什么我可以尝试更清楚的,请告诉我。