重新映射大写锁定以控制和退出(不是通常的方式)


27

我知道如何使用xmodmap重新映射Caps锁定键,使其充当Control键或Escape键。我想结合以下两个功能:

当我按下然后释放Caps Lock键时,它会发送Escape。当我按住Caps键并按下另一个键(例如A)时,它将发送Control-A。

是否存在xkb,xmodmap和其他一些可能会使Caps lock在X中以这种方式表现的组合?

我在Macbook Air 3,1上使用Ubuntu Precise。

Answers:


-2

您可以执行第一个操作(映射Caps LockEsc),但不能执行第二个操作。

简单说明: Caps Lock并非设计为在按下时会执行某些操作。

详细说明: 键的类型很多。其中两个是修饰键锁定键

Caps Lock是一个锁定键,而键,如CtrlAltShift修饰键

从其名称可以明显看出,修饰键可修改下一个按下的的功能,而锁定键则用作切换开关以打开或关闭某些特定功能。

现在,由于它 Caps Lock 是一个锁键,因此如果不将其映射到一个修改键,就无法像修改键一样工作。 Caps Lock本身不能用作修改键


感谢您确认X并非旨在满足我的要求。如果X大师想要破解某些东西以使其正常工作,请与我联系。
user372737

4
作为下面无法接受的答案,您当然可以使用许多实用程序(例如xcape或At-Home-Modifier)来完成第二部分。
Sparhawk

34

我在Mac上安装了此设置,并且试图找到一种没有运气的Ubuntu方法。

好吧,现在正在工作。感谢Tungd向我致谢xcape。我所做的确实很简单明了。

  1. 在“系统偏好设置”>“键盘布局”>“选项...”>“ Ctrl键位置”下,我选中了“ Caps Lock as Ctrl”。

  2. xcape -e'Control_L =转义'

完成后,大写锁定在用作修饰符时用作Ctrl,而在单独按下时则用作Esc(如xcape README文件中所述,有几百毫秒的轻微延迟,因此它仍然不如使用Mac的Mac解决方案最佳KeyRemap4MacBook。)


4
我使用gnome-tweak-tool映射Caps LockCtrl,因为没有Keyboard layoutSystem Settings在Ubuntu 14.04。后来xcape -e 'Control_L=Escape'没有用,但是在使用后,xcape -d我发现Caps Lock生成键码66并分别重新映射它:xcape -e '#66=Escape'
谢尔盖·别洛佐洛夫

3
根据此博客文章,可以单独使用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

这确实应该是已被接受的答案@ user372737
阿萨夫·拉维

@LouisSimoneau这个是这个的一千倍。
斯宾塞·布彻

1
延误问题有进展吗?
Toothrot '16

6

我也在寻找这个。截至一周前,我发现自己的局部解决方案是xmodmap

add Control = Caps_Lock
remove Lock = Caps_Lock
keysym Caps_Lock = Escape

这当然不能完美运行,当我按下CapsLock时,它可以同时有效地发送Escape和Ctrl,但是我对此感到满意。

最后,我发现了这个小实用程序https://github.com/alols/xcape。因此,现在我可以简单地将CapsLock重新映射为Ctrl,然后让xcape完成它的工作。


另一种选择是在家修改器。它不是处于积极的开发中,并且通过在根目录下安装与xcape略有不同。但是,它是通过xorg.conf触发的,因此只能在特定的键盘上起作用,而同时使用其他键盘。
Sparhawk

4

编辑:修复了此问题对于大多数智能(较新)的显示管理器。

根据Per Louis和Sergiy的评论,我想出了这个解决方案,该解决方案在具有LightDM和Unity的Ubuntu 16.04(Xenial)上适用于我。

我将以下代码行放入.xprofile主目录中的文件中。

setxkbmap -option 'caps:ctrl_modifier' && xcape -e 'Caps_Lock=Escape' &

尾部的&将xcape命令放到后台,这样它就不会阻塞您的会话。setxkbmap立即进行更改。

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 14年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


3

安装 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的延迟。


sudo apt-get install xcape(typo)
David Shaked 18'Jan

1

我专门为此目的在C中构建了一个工具,它克服了xcape / xmodmap解决方案的许多问题


有什么办法可以关闭Esc到Caps的“交换”,我宁愿完全没有Caps,而将新旧Esc都保持Escape的状态。
dragon788 '17


谢谢,我将必须放置一个链接以将其自动编译到我的dotfile中。我也可以像在Ubuntu 16.04上那样对README.md进行PR,它需要libudev-dev和libevdev-dev才能进行编译。
dragon788 '17

@ dragon788来到Arch(您甚至可以尝试Antergos)。几年前,我从Ubuntu搬出,再也回不去了,这只是更好的选择。
pepper_chico '17
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.