
我在韩国买了一个看起来很花哨的机械键盘。总的来说,它工作得很好,除了一件事——尽管它的右侧有Alt和键,但这些键不会生成与“普通”键盘相同的代码。Ctrl
长话短说,右键Alt是韩文键(在拉丁字母和韩文字母之间转换),也是Ctrl汉字键(在韩文和“旧”韩文字符之间转换)。我想使用多种布局 - 韩文和我本地的布局(波兰文),并保持两全其美 - 这意味着让右键在输入波兰文时Alt发出键码Alt,在输入韩文时发出韩文键码。
韩语开箱即用(因为那里的键码是正确的),但波兰语需要调整。我/usr/share/X11/xkb/symbols/pl
通过在活动部分添加以下几行来更改布局()xkb_symbols
:
key <HNGL> { [ ISO_Level3_Shift ] };
key <HJCV> { [ Control_R ] };
我已经注释掉了“inet”布局中与HNGL
和相关的行,因为这些行覆盖了我的更改。HJCV
经过这些更改后,我的Alt工作变得完美了,但仍然存在按键无法正常工作的问题Ctrl。一般情况下它可以正常工作,但在编辑文本时,我应该能够使用Ctrl+Backspace组合删除一个单词,但我无法这样做。
我已经执行了xset -r 131
禁用此Ctrl/Hanja 键的按键重复的操作,但它仍然不能像真正的Ctrl
这是xev
重新映射的输出Hanja
:
KeyPress event, serial 34, synthetic NO, window 0x1000001,
root 0x13f, subw 0x0, time 49086462, (88,89), root:(3928,141),
state 0x10, keycode 131 (keysym 0xffe4, Control_R), same_screen YES,
XKeysymToKeycode returns keycode: 105
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
以下是常规输入Ctrl(来自其他键盘):
KeyPress event, serial 39, synthetic NO, window 0x1000001,
root 0x13f, subw 0x0, time 49144922, (616,377), root:(4456,429),
state 0x10, keycode 105 (keysym 0xffe4, Control_R), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
我可以进行任何更改以使我的系统将该密钥视为完整的密钥Ctrl吗?
答案1
当键是修饰键时,将一个键分配给另一个键是唯一的。这回答有一个很好的解释:
当操作是这样的修饰键操作时,它会更改当前的修饰键状态,该状态(简单地说)是操作系统中记录的一组标志,用于记录当前“打开”的修饰键。[此记录]会影响后续按键映射到的操作。
因此,当您尝试映射按键时,它会被映射为常规按键,并丢失指定按下多个按键时其行为的信息。
为了演示,请运行xmodmap
。请注意,有两个默认键(Control_L 和 Control_R)映射到控制修饰键。如果您运行xmodmap -e 'keycode 131 = Control_L'
然后xmodmap
,控制修饰键应该仍然有两个键,因此您的键不会被识别为修饰键。
要将地图作为修改器:
清除修饰键control
xmodmap -e 'clear control'
添加 Hanja 键的键码
xmodmap -e 'keycode 131 = Control_L'
最后,添加回默认修饰符:
xmodmap -e 'add control = Control_L'
xmodmap -e 'add control = Control_R'
现在,如果您再次运行 xmodmap,您会注意到为修饰符控件添加了一个新键,并且现在它应该可以正常工作。
这里是有关重新分配键盘上按键修饰键的 Arch Linux 官方说明的链接。
编辑:
对于持久更改,请添加到/usr/share/X11/xkb/symbols/pl
:
key <HJCV> { [ Control_L ] };
modifier_map Control { Control_L, Control_R, <HJCV> };