xmodmap
尝试使用摆脱大写锁定时出现此错误:
$ xmodmap -e 'clear Lock'
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: 8
Current serial number in output stream: 8
我正在运行xfce。在我将键盘布局小程序添加到面板之前,不会出现此问题;在此之前,我可以运行 xmodmap 脚本来交换 Esc 和 CapsLock:
!Remap Caps_Lock as Escape
remove Lock = Caps_Lock
keysym Caps_Lock = Escape
我在“键盘布局”首选项中选择了 alt-capslock 作为键盘开关组合,这可能是相关的。
我以前也遇到过类似的问题,在另一台机器上运行 openbox。在那台机器上,当我升级到 Lucid 时,这个问题就开始出现。我举报了一个漏洞在 xorg.然而,目前还不清楚这是否真的是 xorg 的问题,或者只是我的配置出了问题。
其他人有遇到过这个问题吗?有人可以解释一下这里发生的事情吗?似乎涉及很多层,而且我对其中任何一层都不是特别了解,所以任何信息都会有帮助。
更新
我发现该问题是通过添加加拿大布局变体“多语言”(ca-multix)专门触发的。如果我改为添加变体“多语言(第一部分)”(ca-multi),则不会出现问题。我认为这可能最终成为一个可用的解决方法,但我还不知道这些变体之间有什么区别。
答案1
现代 Xorg 使用 XKB 扩展来支持键盘布局。 Xmodmap 是通过兼容层模拟的,但它有一些怪癖。您可以完全禁用 XKB,Xorg 将恢复使用旧的 Xmodmap 键盘映射。我认为它在 xorg.conf 中将选项 XkbDisable 设置为 true,但您可能希望使用 XKB 方法来执行此操作。 /usr/share/X11/xkb/rules/xorg.xml 中有许多可配置选项,我认为您需要 caps:swapescape 来交换 Caps Lock 和 Escape。尝试 setxkbmap -option caps:swapescape
答案2
当您尝试将键符号添加到已添加到另一个修饰键的修饰符时,就会出现问题。重要的是要知道,如果您将一个键符号添加到修饰符,则与该键符号一起使用的所有其他键符号也会添加到该修饰符。
例如:
clear mod5
add mod5 = ISO_Level3_Shift Mode_switch
可以导致
mod5 backslash (0x33), Caps_Lock (0x42), ISO_Level3_Shift (0x5c), Mode_switch (0xcb)
因为你有类似的东西
keycode 66 = Caps_Lock NoSymbol ISO_Level3_Shift
在您的 ~/.Xmodmap (或 .xmodmap,...您可以通过“查看当前键码到键符号映射”xmodmap-pke”)
当您还尝试执行类似操作时,这会产生有问题的 BadValue 错误
add lock = Caps_Lock
因为 Caps_Lock 已经添加到 mod5 修饰符中。
答案3
setxkbmap -option caps:escape # use caps as esc
或者
setxkbmap -option caps:swapescape # to swap caps with esc