如何使 Caps Lock 键像另一个 Shift 键一样工作?
这里有很多关于重新分配它或让它启动自定义命令的问题。我只希望它像另一个 Shift 键一样工作。我不希望任何其他键改变它们的作用,只想改变这个键。
键盘布局/大写锁定键行为不起作用,我不明白如何在 CCSM 中重新映射它。
我现在使用的是英国键盘,但我学会了在美国键盘上打字,较小的左 Shift 键让我抓狂。
答案1
扩展@Zacharee1 的回答:
使用以下方式进行备份cp /usr/share/X11/xkb/symbols/pc ~/pckeybak
然后用gksu gedit /usr/share/X11/xkb/symbols/pc
或您最喜欢的编辑器进行编辑。
找到第 (22) 行:
key <CAPS> { [ Caps_Lock ] };
并将其更改为
key <CAPS> { [ Shift_L ] };
(36)行写道:
modifier_map Lock { Caps_Lock };
并将其更改为
//modifier_map Lock { Caps_Lock };
(应该将其注释掉以有效地禁用锁定)
测试表明,它Num Lock仍按预期工作。进一步的测试表明,即使是在未修改的系统上,16.04 中的键盘指示灯似乎也有点阅读障碍。登录时滚动锁定指示灯亮起,但滚动锁定指示灯熄灭,数字锁定指示灯熄灭,但数字锁定指示灯亮起。点击左键Ctrl似乎可以解决此问题,我不确定这是否与我使用 KVM 切换器有关(这是可能的)
笔记:进一步的测试表明NumLock 指示灯不稳定即使没有 KVM 开关,也必须轻按两次才能与 NumLock 重新同步。如果您一直开着它,您可以忽略灯光,或者如果它打扰您,您可以轻按两次以使其重新同步。为什么会发生这种情况可能是新问题的基础...
解决原始问题的另一个简单方法是简单地获得一个便宜的美国键盘并使用美国键盘映射。
资料来源:@Zacharee1 的回答和分析/usr/share/X11/xkb/symbols/pc
以及反复试验
答案2
你可以通过适应来实现这一点如何改变 CapsLock 键以产生“a”?(例如)。
从键中删除Lock
(= Caps Lock) 修饰符Caps Lock,并声明此键发送Shift_L
键符。
remove Lock = Caps_Lock
keysym Caps_Lock = Shift_L
或者,您可以删除Lock
修饰符并添加Shift
修饰符。
remove Lock = Caps_Lock
add Shift = Caps_Lock
无论哪种方式,这些行都放入文件~/.Xmodmap
。通过加载它进行测试xmodmap ~/.Xmodmap
;在默认环境下登录时会自动读取该文件(至少在 Gnome 时代是这样)。
答案3
忽略我之前失败的回答尝试,我发现了一些东西可以将大写锁定完全转换为左移。无需切换,我认为它很持久,而且非常简单。
首先,在介绍如何更改它之前,我建议先进行备份。
跑步sudo cp /usr/share/X11/xkb/symbols/pc ~/pckeybak
现在有了备份,我们开始编辑吧。
使用您最喜欢的文本编辑器以 root 身份编辑此文件:
/usr/share/X11/xkb/symbols/pc
找到如下所示的片段(它位于顶部附近,对我来说是第 22 行):
key <TAB> { [ Tab, ISO_Left_Tab ] };
key <RTRN> { [ Return ] };
key <CAPS> { [ Caps_lock ] };
key <NMLK> { [ Num_Lock ] };
编辑
key <CAPS> { [ Caps_lock ] };
成为
key <CAPS> { [ Shift_L, Caps_Lock ] };
而是。 (Caps_Lock
后面的内容Shift_L,
可能没有必要。)
重新启动显示管理器(通常sudo service lightdm restart
),然后 capslock 现在将变为左移。(笔记:我的测试机器使用 GNOME,因此我不得不重新启动gdm
。但是,这导致后备 TTY 出现一些奇怪的闪烁,并且gdm
从未重新启动。我不得不完全重新启动。)
我实际上已经测试过这个,并且可以确认它有效。
答案4
对于 14.04
单行:
xmodmap -e 'keycode 66=Shift_L'
但,万一出现66
不正确的 keycode,请先xev
在控制台中运行并按CapsLock。然后你会看到类似以下内容:
KeyPress event, serial 27, synthetic NO, window 0x1200001,
root 0x101, subw 0x0, time 6417361, (340,373), root:(342,393),
state 0x0, keycode XX (keysym 0x0207, Caps_Lock), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
正确的键码是 中指示的键码XX
。