如何将未充分利用的键盘键更改为修饰键

Ver*_*rax 9 x11 xmodmap xkb keyboard-layout i3

我有一个看起来像这样的韩语键盘:

在此处输入图片说明

Hanja ( ??),就在 的左侧space,即使在输入韩语时也很少使用,但它作为i3 窗口管理器 mod 键在我的左手拇指中占有重要地位。这将释放Alt在我的代码编辑器中使用。

我的问题是:如何将汉字键变成修饰键?

我用以下方法验证了密钥xev

KeyPress event, serial 32, synthetic NO, window 0x2200001,
    root 0x281, subw 0x0, time 11955968, (-132,626), root:(491,646),
    state 0x0, keycode 131 (keysym 0xff34, Hangul_Hanja), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 32, synthetic NO, window 0x2200001,
    root 0x281, subw 0x0, time 11955968, (-132,626), root:(491,646),
    state 0x20, keycode 131 (keysym 0xff34, Hangul_Hanja), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False
Run Code Online (Sandbox Code Playgroud)

键码 131 = 0x83

从 的输出中xmodmap,我看到这mod3是可用的。

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (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)
Run Code Online (Sandbox Code Playgroud)

我尝试xmodmap -e "add mod3 = Hangul_Hanja"导致以下结果......

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3        Hangul_Hanja (0x83)
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
Run Code Online (Sandbox Code Playgroud)

...添加set $mod Mod3到我的 i3 配置文件并重新启动后,我最终没有任何修饰键,即它不起作用。

此外,汉字键的行为不像典型的修饰键。如果我按住该键,它会创建重复的击键,而典型的修饰键则不会。

我希望家里有一些键盘专家可以提供他们的一些专业知识。

Linux Mint 18 (Cinnamon) i3 窗口管理器

Gil*_*il' 3

X11 修饰符处理有点特殊。您不能采用任何键并将其声明为修饰符:修饰符设置和键符号设置之间的某些内容必须保持一致。

经典的修饰符是ShiftControlAltMeta和(各有两个键符号,例如和)(加上 Caps Lock 和 Num Lock,它们Hyper的行为略有不同)。大多数应用程序无法与用作修饰符的其他键符号一起使用。SuperShift_LShift_R

因此,要使用汉字键作为修饰符,请使其成为Hyper_L(例如)。

keycode 131 = Hyper_L
remove Mod4 = Hyper_L
add Mod3 = Hyper_L
Run Code Online (Sandbox Code Playgroud)

这使得该键根本不再用作汉字键。如果您使用 XKB 而不是 xmodmap,可能有办法保留这两个功能,但我不知道如何。

  • 只是想报告一下,我之前的所有尝试都是在 VirtualBox 中完成的,但我最近在裸机上安装了 Linux,只需运行 `xmodmap -e "add mod3 = Hangul_Hanja"` 即可获得我想要的效果。无需将密钥重新映射到“Meta_L”。 (2认同)