将 CapsLock 重新映射到系统范围内的转义和控制

将 CapsLock 重新映射到系统范围内的转义和控制

是否可以在系统范围内重新映射 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

相关内容