是否有可能在整个CapsLock键系统上重新映射,以便当CapsLock按钮本身被按下时,它充当转义键,而与另一个键一起按下时,它充当控制键?
是否有可能在整个CapsLock键系统上重新映射,以便当CapsLock按钮本身被按下时,它充当转义键,而与另一个键一起按下时,它充当控制键?
Answers:
我找到了一个非常好的解决方案xcape。从自述文件:
xcape作为守护程序运行,并截获Control键。如果单独按下并释放Control键,它将生成一个Escape键事件。
如果您将Caps Lock键重新映射为Control,则更有意义。该程序的未来版本可能会为您完成该映射,但是现在这是您必须自己做的事情。
仅Linux的用于在系统范围内重新映射键的解决方案是编写一个简单的udev规则。它不依赖X,可以在任何终端或应用程序上运行,并且只需复制两个文件即可在最近的Linux安装之间移植。
您需要编写2个文件:一个文件包含udev规则,该规则告诉内核重新映射密钥,而另一个文件包含所需的实际映射。
使用这种方法,我重新映射了整个键盘,也许代码对启发灵感很有用http://git.adirat.com/carpalx-keyboard
为此,我专门用C语言构建了一个工具 了xcape / xmodmap解决方案的许多问题:
我在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