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

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

我是一名开发人员,目前我正在使用 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 键盘

答案1

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

关键是您需要将“keycode 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 文件中添加“remove BINDING = Hyper_L”。

当您打开 X11 会话时,.Xmodmap 文件将被加载,您下次登录或重新启动时应该已准备好此映射。

此配置适用于我的 ubuntu 14.04 设置。如果您有不同的 *nix 并且这不起作用,请在此处发布您为解决该问题所做的工作,我会将其合并到答案中。

答案2

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

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

这将启用大写锁定作为 mod3 键,将布局设置为“us”并将变体设置为“intl”。如果您使用像 Fish 这样的交互式 shell,那么您可以在“-layout”、“-option”或“-variant”后按 Tab 键来获取可能参数的完整列表。

进一步的背景:一年前,我在运行 i3 窗口管理器的 Ubuntu 机器上尝试了 xmodmap 方法,从标准 gnome 环境切换过来。我修改了“us”xkb 键盘布局,特别是带有死键的国际键盘布局 - 使用 gnome-desktop-manager 时效果很好(有一个选项可以将 caps-lock 设置为 mod3 键),但我不能让它与 xmodmap 一起工作。这是我的错误:我以为 gdm GUI 使用 xmodmap 将大写锁定映射到 mod3,但实际上它正在设置此 X11 选项。现在我切换到 Arch,我被迫弄清楚这一点。

我建议任何打算解决这个问题的人都阅读 localectl、xmodmap、setxkbmap 的手册页,并通过添加睡眠和恢复部分来测试布局:

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

这节省了我很多时间。

然而,我仍然不明白为什么 xmodmap 方法不起作用。希望这对某人有帮助。

相关内容