问题描述
我知道如何使用xmodmap重新映射Caps锁定键,使其充当Control键或Escape键。我想将两个功能合并如下:
当我按下然后释放Caps Lock键时,它会发送Escape。当我按住Caps键并按下另一个键(例如A)时,它将发送Control-A。
是否存在xkb,xmodmap和其他一些可能使Caps lock在X中以这种方式表现的组合?
我在Macbook Air 3,1上使用Ubuntu Precise。
最佳方案
您可以执行第一个操作(将Caps Lock
映射到Esc
),但是不能执行第二个操作。
简单说明:Caps Lock
并非旨在按时执行某些操作。
详细说明:键的类型很多。其中两个是Modifier Keys和Lock Keys。
Caps Lock
是锁定键,而Ctrl
,Alt
和Shift
等键是修饰键。
从它们的名称可以明显看出,修饰键可修改下一个按下的键的功能,而锁定键则用作切换开关以打开或关闭某些特定功能。
现在,由于Caps Lock
是一个锁定键,如果不将其映射到一个修改键,就无法使其表现得像修饰键。 Caps Lock
本身不能用作修改键。
次佳方案
我在Mac上安装了此设置,并且试图找到一种没有运气的Ubuntu方法。
好吧,现在正在工作。感谢tungd将我回复到xcape。我所做的确实很简单明了。
-
在“系统偏好设置”下,>键盘布局>选项…> Ctrl键的位置,我选中了“ Caps Lock as Ctrl”。
-
xcape -e ‘Control_L=Escape’
完成后,大写锁定在用作修饰符时用作Ctrl,而在单独按下时用作Esc(如xcape自述文件中所述,有几百毫秒的轻微延迟,因此它仍不如使用Mac的Mac解决方案最佳KeyRemap4MacBook。)
第三种方案
我也在寻找这个。截至一周前,我发现自己使用xmodmap
是部分解决方案:
add Control = Caps_Lock
remove Lock = Caps_Lock
keysym Caps_Lock = Escape
这当然不能完美运行,当我按下CapsLock时,它可以同时有效地发送Escape和Ctrl,但是我对此感到满意。
最后,我找到了这个小工具https://github.com/alols/xcape。因此,现在我可以简单地将CapsLock重新映射为Ctrl,然后让xcape完成它的工作。
第四种方案
编辑:修复了此问题对于大多数智能(较新)的显示管理器。
根据Per Louis和Sergiy的评论,我想出了这个解决方案,该解决方案在具有LightDM和Unity的Ubuntu 16.04(Xenial)上适用于我。
我将以下代码行放入主目录中的.xprofile
文件中。
setxkbmap -option 'caps:ctrl_modifier' && xcape -e 'Caps_Lock=Escape' &
尾随将xcape命令置于后台,以免阻塞您的会话。 setxkbmap立即进行更改。
Sergiy:
I’ve used gnome-tweak-tool to map Caps Lock to Ctrl as there is no Keyboard layout in System Settings on Ubuntu 14.04. Then xcape -e ‘Control_L=Escape’ didn’t work, but after using xcape -d I’ve discovered that Caps Lock generates keycode 66 and remapped it respectively: xcape -e ‘#66=Escape’. – Sergiy Byelozyorov Sep 4 ’14 at 10:08
路易斯:
As per this blog post, it is possible to do this with xcape alone: 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 Aug 4 ’15 at 10:06
第五种方案
安装xcape
sudo apt-get install xcape
在~/.bashrc
中添加两行
/usr/bin/setxkbmap -option 'caps:ctrl_modifier'⏎
/usr/bin/xcape -e 'Caps_Lock=Escape' -t 100
注意部分-t 100
,如果您未设置它,则使用vim可能会注意到Esc的延迟。