重新映射CapsLock以逃逸和控制系统范围


18

是否有可能在整个CapsLock键系统上重新映射,以便当CapsLock按钮本身被按下时,它充当转义键,而与另一个键一起按下时,它充当控制键?


5
这似乎很难。例如,它无法生成按键事件,因为您不知道刚刚按下了哪个按键。如果在没有按下另一个键的情况下将其释放,则为Escape,否则为Control。
cjm 2012年

Answers:


16

我找到了一个非常好的解决方案xcape。从自述文件:

xcape作为守护程序运行,并截获Control键。如果单独按下并释放Control键,它将生成一个Escape键事件。

如果您将Caps Lock键重新映射为Control,则更有意义。该程序的未来版本可能会为您完成该映射,但是现在这是您必须自己做的事情。


我做了一个骇人的
cam

6

我将Caps映射到Escape,这样我在输入Vim时会更舒适。我用过xmodmap,把它放进去~/.Xmodmap

clear Lock
keycode 0x42 = Escape

申请:xmodmap ~/.Xmodmap。您可以将其放入〜/ .bash_profile之类的文件中(我放入〜/ .xinitrc中,因为我不使用登录管理器。

要映射CapsLock + [另一个键],请考虑使用xbindkeys


4

仅Linux的用于在系统范围内重新映射键的解决方案是编写一个简单的udev规则。它不依赖X,可以在任何终端或应用程序上运行,并且只需复制两个文件即可在最近的Linux安装之间移植。

您需要编写2个文件:一个文件包含udev规则,该规则告诉内核重新映射密钥,而另一个文件包含所需的实际映射。

使用这种方法,我重新映射了整个键盘,也许代码对启发灵感很有用http://git.adirat.com/carpalx-keyboard


链接无效,请您更新一下吗?谢谢!
QED

我更新了它,为延迟感到抱歉
gimmesudo 2013年

Bitbucket说:“您无权访问此存储库。” 您可以再次公开吗?谢谢!
天一崔

@TianyiCui现在检查链接
gimmesudo

1
链接对我而言已死或被阻止。您是否有可能将实际文件放入答案中?
迷宫


1

我在AskUbuntu上遇到措辞不同的问题,答案很好,但是我必须对其稍加修改才能在我的系统上工作。

Per Louis和Sergiy在那儿的评论是我想出了这个在Ubuntu 16.04(Xenial)上适用于我的解决方案,我将把它带到我使用的其他Linux系统上。

我安装了xcape并将以下代码行放入.profile主目录中的文件中。

更新方法:

由于各种显示管理器(gdm / kdm / sddm / etc)行为异常,并重置了setxbmap后挂起/恢复或锁定/解锁,因此我发现了如何设置选项以使其继承和不设置。始终将其重置。因为我暂停并恢复了很多工作,所以我需要确保没有得到很多副本xcape正在运行下面的新脚本已解决了该问题。

首先使用sudo gedit /etc/default/keyboard和修改键盘配置,XKBOPTIONS="ctrl:nocaps"然后在~/.xprofile下面的单行中输入。

ps aux | grep -i '[x]cape' && killall -9 xcape; hash xcape 2>&1 >/dev/null && xcape -e 'Control_L=Escape' -t 100 &

希望脚本的各个部分可以为您节省一些时间/麻烦,并防止卡住的登录。首先,它检查是否已有实例在运行并杀死它,因为唯一要做的xcape就是将Ctrl映射到Esc,这是安全的,然后该hash部分确保您拥有xcape 安装,否则您尝试登录时系统可能会挂起,因为所有启动脚本有望干净退出。

旧方法:

setxkbmap -option 'caps:ctrl_modifier'; xcape -e '#66=Escape'

Sergiy:

我已经使用gnome-tweak-tool将Caps Lock映射到Ctrl,因为在Ubuntu 14.04的“系统设置”中没有键盘布局。然后xcape -e'Control_L = Escape'不起作用,但是在使用xcape -d之后,我发现Caps Lock生成键码66并分别重新映射它:xcape -e'#66 = Escape'。– Sergiy Byelozyorov 2014年9月4日10:08

路易斯:

根据此博客文章,可以单独使用xcape来做到这一点:setxkbmap -option'caps:ctrl_modifier'; xcape -e'Caps_Lock = Escape'setxkbmap -option'caps:ctrl_modifier'; xcape -e'Caps_Lock = Escape; Control_L = Escape; Control_R = Escape'– Louis Simoneau 15年8月4日在10:06

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.