是否可以在系统范围内重新映射 CapsLock 键,以便当单独按下 CapsLock 按钮时,它充当退出键,而当用另一个键按下时,它充当控制键?
答案1
我找到了一个非常好的解决方案,称为X角。来自自述文件:
xcape 作为守护进程运行并拦截 Control 键。如果按下并自行释放 Control 键,则会生成 Escape 键事件。
如果您已将 Caps Lock 键重新映射到 Control,这会更有意义。该程序的未来版本可能会为您完成该映射,但目前您必须自己完成此操作。
答案2
我将 Caps 映射为 Escape,这样我在 Vim 中打字会更舒服。我用过xmodmap
,把这个放进去~/.Xmodmap
。
clear Lock
keycode 0x42 = Escape
申请:xmodmap ~/.Xmodmap
。您可以将其放入 ~/.bash_profile 等文件中(我放入 ~/.xinitrc 中,因为我不使用登录管理器。
要映射 CapsLock + [另一个键],请考虑使用xbindkeys
.
答案3
用于在系统范围内重新映射密钥的仅限 Linux 的解决方案是编写一个简单的 udev 规则。它不依赖于 X,可以在任何终端或应用程序上运行,并且只需复制两个文件即可在任何最近安装的 Linux 之间移植。
您需要编写 2 个文件:一个包含 udev 规则,告诉内核重新映射键,另一个包含您需要的实际映射。
使用这种方法,我重新映射了我的整个键盘,也许代码可以作为灵感https://github.com/10ne1/carpalx-keyboard
答案4
我在 AskUbuntu 上遇到了一个措辞不同的问题一个很好的答案,但我必须稍微修改它才能在我的系统上工作。
根据 Louis 和 Sergiy 的评论,我想出了这个在 Ubuntu 16.04 (Xenial) 上适用的解决方案,我将把它带到我使用的其他 Linux 系统上。
我安装了X角并将以下代码行放入我.profile
的主目录中的文件中。
更新的方法:
由于各种显示管理器(gdm / kdm / sddm /等)以奇怪的方式表现并setxbmap
在挂起/恢复或锁定/解锁后重置,我发现了如何以它们继承它的方式设置选项并且不'不要一直重置它。因为我经常暂停和恢复,所以我需要确保我没有获得大量xcape
运行副本,这在下面的新脚本中得到了解决。
sudo gedit /etc/default/keyboard
首先使用和 set修改键盘配置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'
谢尔盖:
我使用 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 2015-08-04 10:06