CapsLock作为应用程序键映射的修改键


11

我是开发人员,当前正在将Ubuntu Linux与PyCharm IDE结合使用来开发网站。为了提高键入性能,我考虑将CapsLock更改为Hyper_L,然后使用xmodmap将其分配给mod3。之后,我想将“ i”键的mod3映射到“ Up”。到目前为止,我所做的是:

xmodmap -e "keysym Caps_Lock = Hyper_L"

输出是这样的:

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Hyper_L (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

然后我从mod4中删除Hyper_L

xmodmap -e "remove Mod4 = Hyper_L"

之后,我尝试将Hyper_L分配给mod3

xmodmap -e "add Mod3 = Hyper_L"

但是我得到如下错误:

X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  118 (X_SetModifierMapping)
  Value in failed request:  0x17
  Serial number of failed request:  11
  Current serial number in output stream:  11

那么,这里出了什么问题?我该如何运作?我的方法正确吗?还是我应该使用其他方法才能将mod3用于自定义键?

PS我正在使用Microsoft Natural Ergonomic 7000键盘

Answers:


20

互联网上有不计其数的答案,其中大多数令人困惑。

密钥是您需要将“密钥代码66”映射到您的超级密钥,从其他mod {1,2,4,5}(仅在存在的情况下)删除该密钥的映射,然后设置mod3。

打开〜/ .Xmodmap并输入以下内容:

! Unmap capslock
clear Lock
keycode 66 = Hyper_L

! Leave mod4 as windows key _only_
remove mod4 = Hyper_L

! Set mod3 to capslock
add mod3 = Hyper_L

运行这个

xmodmap ~/.Xmodmap

如果出现问题,可以使用以下方法重置键盘:

setxkbmap -layout us

发生爆炸的可能原因是Hyper_L被映射到其他地方。通过运行不带参数的xmodmap来解决此问题,以找出与Hyper_L绑定的其他内容。当您知道需要删除的内容时,请在您的.Xmodmap文件中添加一个“删除绑定= Hyper_L”。

当您打开X11会话时,将加载.Xmodmap文件,您下次登录或重新引导时应具有此映射。

此配置适用于我的ubuntu 14.04设置。如果您使用其他* nix,但此方法不起作用,请在此处发布您为解决此问题所做的工作,我将其纳入答案。


@antindexer对您有用吗?
heymatthew 2014年

我尝试了很多答案,这是对我有用的答案。至少,它是在裸机linux安装上完成的。奇怪的是,它在QEMU / KVM中失败,仅在按两次大写锁定键时才起作用。
对角线

0

我知道这个问题已经很老了,但是我需要分享我的解决方案,因为(令人沮丧地)heymantthew的答案对我不起作用。最终为我工作的是:

setxkbmap -layout us -option lv3:caps_switch -variant intl

这将启用capslock作为mod3键,将布局设置为“ us”,并将变体设置为“ intl”。如果您使用像fish这样的交互式外壳,则可以在“ -layout”,“-option”或“ -variant”之后按Tab键以获得可能参数的完整列表。

进一步的背景知识:一年前,我在运行i3窗口管理器的Ubuntu计算机上尝试了xmodmap方法,从标准的gnome环境切换到该模式。我已经修改了“我们”的xkb键盘布局,特别是带有死键的国际键盘布局-在使用gnome-desktop-manager(可以将大写锁定设置为mod3键的选项)下,它可以很好地工作,但是我无法使它与xmodmap一起使用。这是我的错误:我认为gdm GUI使用xmodmap将大写锁定映射到mod3,但实际上它是在设置X11选项。现在我切换到Arch,我不得不弄清楚它。

我建议任何打算对此进行处理的人都可以通过添加睡眠和还原部分来阅读有关localectl,xmodmap,setxkbmap和测试布局的手册页:

setxkbmap ... ; sleep 10; setxkbmap <INSERT DEFAULT SETTINGS>

这节省了我很多时间。

我仍然不明白xmodmap方法如何行得通,但是。希望这对某人有帮助。

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.