重新分配Ctrl和Alt键-xmodmap'BadValue'错误


13

我正在尝试重新映射键盘以使emacs可用。我的人体工程学键盘将其单个Control键放在一个孤立的4键孤岛上,位于左侧。

操作系统被Debian压榨。

这是我要输入的行xmodmap,将它们放入文件〜/ .Xmodmap中:

明确控制
清除Mod1
!Alt键在我的键盘上标记为“选项”,
!使用xev显示它们分别发送Alt_L和Alt_R keysym
按键符号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(aka Alt)键的行为类似于Control键,并使Windows(aka Super)键的行为类似于Alt

这是xev为有问题的键输出的键代码和keyms。请注意,我的键盘(Goldtouch人体工学键盘)只有一个控制键。

键码37(keysym 0xffe3,Control_L)
键码64(keysym 0xffe9,Alt_L)
键码133(keysym 0xffeb,Super_L)
键码134(键符号0xffec,Super_R)
按键代码108(keysym 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

关于如何解决此问题的任何建议?


在什么操作系统和版本上?什么类型的键盘(PC / Mac / Sun / ...)?尝试xev在一个终端中运行,然后xmodmap在另一个终端中运行。您应该MappingNotify从中看到一些节xev,将它们添加到您的问题中。另外,在xev窗口中,按下涉及的各个键,并告诉我们它们对应的键代码和键符号(xev输出的“键代码37(键符号0xffe3,Control_L)”部分)。
吉尔斯(Gillles)“所以-别再邪恶了”

Answers:



7

查看Giles链接的解决方法,这对我有用:

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键现在像控制键一样起作用,而我的Windows键像Alt键一样起作用。


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中(通过查看当前的键码到keyym的映射xmodmap -pke

当您还尝试执行类似操作时,将产生有问题的BadValue错误

add lock    = Caps_Lock

因为Caps_Lock已经添加到mod5修饰符中。


2

尽管它并不能真正回答您的问题,但这是您解决问题的另一种方法。编辑xorg.conf,将以下内容插入“ InputDevice”部分:

 Option "XkbOptions" "ctrl:swapcaps"
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.