我正在尝试重新映射我的键盘以使 emacs 可用。我的人体工学键盘将其单个控制键放置在左侧的一个独立的 4 键岛中。
操作系统是Debian挤压。
以下是我尝试输入的行xmodmap
,我将它们放入文件 ~/.Xmodmap 中:
清晰的控制 清除模块1 !我的键盘上的 Alt 键标有“Option”, !使用 xev 显示它们分别发送 Alt_L 和 Alt_R 键符号 键符号 Alt_L = Control_L 键符号 Alt_R = Control_R ! Super_L 和 Super_R 键是 Windows 键 键符号 Super_L = Alt_L 键符号 Super_R = Alt_R 添加 Control = Control_L Control_R 添加 Mod1 = Alt_L Alt_R
我的目标是让我的 Option(又名Alt)键表现得像 Control 键,并让我的 Windows(又名 Super)键表现得像Alt.
以下是 xev 为相关按键输出的按键代码和按键信息。请注意,我的键盘(Goldtouch 人体工学键盘)只有一个控制键。
键码 37(键符号 0xffe3,Control_L) 键码 64(键符号 0xffe9,Alt_L) 键码 133(键符号 0xffeb,Super_L) 键码 134(键符号 0xffec,Super_R) 键码 108(键符号 0xffea,Alt_R)
这是 xev 在运行时显示的内容xmodmap .Xmodmap
MappingNotify 事件,序列号 34,合成 NO,窗口 0x0, 请求 MappingKeyboard,first_keycode 204,计数 1 MappingNotify 事件,序列号 34,合成 NO,窗口 0x0, 请求 MappingKeyboard,first_keycode 64,计数 1 MappingNotify 事件,序列号 34,合成 NO,窗口 0x0, 请求 MappingKeyboard,first_keycode 108,计数 1 MappingNotify 事件,序列号 34,合成 NO,窗口 0x0, 请求 MappingKeyboard,first_keycode 206,计数 1 MappingNotify 事件,序列号 34,合成 NO,窗口 0x0, 请求 MappingKeyboard,first_keycode 133,计数 1 MappingNotify 事件,序列号 34,合成 NO,窗口 0x0, 请求 MappingKeyboard,first_keycode 134,计数 1
这是返回的错误xmodmap
:
X 请求失败错误:BadValue(整数参数超出操作范围) 失败请求的主要操作码:118 (X_SetModifierMapping) 失败请求中的值:0x17 失败请求的序列号:17 输出流中的当前序列号:17
关于如何解决这个问题有什么建议吗?
答案1
看看贾尔斯链接的解决方法,这对我有用:
clear Mod1
clear Mod4
keycode 204 = NoSymbol NoSymbol NoSymbol NoSymbol
keycode 206 = NoSymbol NoSymbol NoSymbol NoSymbol
keycode 64 = Control_L Control_L Control_L Control_L
keycode 133 = Alt_L Alt_L Alt_L Alt_L
keycode 134 = Alt_R Alt_R Alt_R Alt_R
keycode 108 = Control_R Control_R Control_R Control_R
add Control = Control_L Control_R
add Mod1 = Alt_L Alt_R
我的 Option 键现在的功能类似于 Control 键,而我的 Windows 键的功能类似于 Alt 键。
答案2
这已经被报道为Debian 错误 #564327,Debian 错误 #565279,Ubuntu 错误 #524774, 和FreeDesktop 错误 20145。 FreeDesktop 错误讨论中附有一个源补丁。 Ubuntu bug 讨论中有几个解决方法建议,特别是解决.Xmodmap
方法。
答案3
当您尝试将键符号添加到已添加到另一个修饰键的修饰符时,就会出现问题。重要的是要知道,如果将键符号添加到修饰符,则与该键符号一起使用的所有其他键符号也会添加到该修饰符。
例如:
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 -pke
)
当您还尝试执行类似操作时,这会产生有问题的 BadValue 错误
add lock = Caps_Lock
因为 Caps_Lock 已经添加到 mod5 修饰符中。
答案4
这是您问题的另一种解决方案,尽管它并没有真正回答您的问题。编辑 xorg.conf,将以下内容插入到“InputDevice”部分:
Option "XkbOptions" "ctrl:swapcaps"