如何使Caps Lock键成为第三个Shift键?


18

如何使Caps Lock键像另一个Shift键一样起作用?

关于重新分配它或让它启动自定义命令,这里有很多问题。我只希望它像另一个Shift键一样工作。我不希望任何其他键改变它们的功能,仅此而已。

键盘布局/大写锁定键行为无法实现,我不了解如何在CCSM中重新映射它。

我现在正在使用英国键盘,但是我学会了在美国键盘上打字,较小的左Shift键是“驱动螺母”。



1
@ David-您的朋友OP特别表示xmodmap不起作用。
TheWanderer

1
在xkb中,这似乎与兼容性映射有关,兼容性映射将某些键组合转换为动作而不是符号。与目前相比,这将花费更多的研究和测试时间。如果有机会,我将进一步研究这个问题,如果没有的话,这个面包屑将带领其他人朝着正确的方向前进。
年长者极客

Answers:


13

扩展@ 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切换器有关(可能)

注意:进一步的测试表明即使没有KVM切换器,NumLock指示灯也呈薄片状,必须轻按两次才能与NumLock保持同步。两次使其恢复同步。为什么发生这种情况很可能是新问题的基础...

解决您原始问题的另一种简单方法是简单地购买便宜的美式键盘并使用美式键盘映射。

资料来源:@ Zacharee1答案和分析/usr/share/X11/xkb/symbols/pc以及试错测试


因此,您必须禁用第36行?只需更改为Shift_L就足以完全禁用capslock。
TheWanderer

@ Zacharee1我认为汤姆·布鲁斯曼(Tom Brossman)在对您的帖子的评论中提到对Numlock产生影响的原因仅仅是出于这个原因。
年长者极客

嗯 可能就是这样。我正在查看是否可以让Zanna使用VM进行测试,因为她拥有英国董事会。
TheWanderer '16

@ Zacharee1太酷了,因为我没有可用于测试的硬件,并且在无法进行完整测试的情况下经常依赖于逻辑。
年长者极客

终于做到了,经过测试并可以正常工作(至少目前如此)。奇怪的是,键盘上的Num Lock灯熄灭了,但是默认情况下,当我登录时,额外的数字键是启用的,这就是我想要的。谢谢!
汤姆·布鲁斯曼

10

您可以通过改编如何更改CapsLock键以产生“ a”的方式到达那里(例如)。

LockCaps Lock键中删除(= Caps Lock)修饰符,并声明此键发送了Shift_Lkeyym。

remove Lock = Caps_Lock
keysym Caps_Lock = Shift_L

或者,您可以删除Lock修饰符并添加Shift修饰符。

remove Lock = Caps_Lock
add Shift = Caps_Lock

无论哪种方式,这些行都会进入file ~/.Xmodmap。通过加载进行测试xmodmap ~/.Xmodmap; 在默认环境下登录时(或至少在Gnome时代),将自动读取文件。


2
完美,行得通。我在主目录“ .Xmodmap”中制作了一个新的空文档,并将您的第一个示例粘贴到其中。然后,我在终端中键入“ xmodmap〜/ .Xmodmap”以使其立即生效。这些都在链接的答案中进行了说明。谢谢。
汤姆·布鲁斯曼

第二组命令对我不起作用,但是第一组命令效果很好。按下Caps Lock键甚至不会打开键盘灯,因此它甚至不会触发我潜在的OCD。
Waldir Leoncio

好的答案,吉尔斯!只是为了增加您的答案,这也可以作为一个命令来完成,也可以:xmodmap -e "clear Lock" -e "keysym Caps_Lock = Shift_L" 和撤消setxkbmap -option ,该命令不会写入~/.Xmodmap文件,但是可以在必要时使用,并添加到启动应用程序中。很好的答案!
Sergiy Kolodyazhnyy

7

忽略我先前尝试回答失败的尝试,我发现了使大写锁定完全变成左移的东西。无需切换,我认为它是持久的,而且非常简单。

首先,建议您进行备份,然后再介绍如何进行更改。

sudo cp /usr/share/X11/xkb/symbols/pc ~/pckeybak

现在有了备份,让我们开始编辑。

使用您喜欢的文本编辑器以根用户身份编辑此文件:

/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),此时大写锁定将保持左移。(注意:我的测试机使用GNOME,因此我必须重新启动gdm。但是,这在后备TTY中引起了一些奇怪的闪烁,并且gdm从未重新启动。我必须完全重新启动。)

我实际上可以测试这一点,并且可以确认它是否有效。

改编自Ubuntu 13.04中的永久xmodmap


谢谢,但这会干扰我永久保留的Num Lock。在我的早期疑难解答中,更改Caps_lock> Shift_L /usr/share/X11/xkb/symbols/capslock也干扰了Num Lock。16.04有所不同,例如Num Lock灯在启动时一直保持点亮,但现在在LightDM登录时熄灭。当我测试您的解决方案时,它的确将Caps Lock更改为Shift,但是当我第一次按Caps Lock时,Num Lock会关闭,并且我必须按Num Lock两次才能将其重新打开(仅第一次)。奇怪 真的很感谢到目前为止的帮助。
汤姆·布鲁斯曼

也许我需要问一个新问题“如何防止Caps Lock重新映射对16.04上的Num Lock的干扰?” 但我很想在这里找到根本原因。要么是时候打开键盘并对其进行一些物理上的修改……
汤姆·布鲁斯曼

那真是怪了。如果您运行,numlock可以再次工作xkbset nullify lock吗?
TheWanderer '16

@TomBrossman我不知道这是否会为您带来任何改变,但确实对我有用。而不是仅仅Shift_L投入Shift_L, Caps_Lock。确保括号对齐。
TheWanderer '16

1
@TomBrossman如果不是危险的话,我喜欢使用sudo,只是要确保:p。当我编辑文件时,shift键是大写字母,大写锁定字母也是大写字母。奇怪的。NumLock的事情也很奇怪,因为它对我来说很好用。这整个事情很奇怪:p
TheWanderer'Sep

3

对于14.04

单线:

xmodmap -e 'keycode 66=Shift_L'

但是,在意外情况下,如果66不是正确的键码,请首先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


1
查看赏金讯息:Xmodmap trick no longer works and xkb handles this now.
TheWanderer

天啊!是因为16.04吗?它适用于我的14.04。赏金评论似乎没有指定。

我没有得到赏金,所以我真的不知道。
TheWanderer '16

抱歉,这是一个全新的16.04安装。左移键或右移键就可以了,我选择了左键作为问题,因为它相邻并且xev将它们视为不同的键。
汤姆·布鲁斯曼'16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.