xcb键盘按键掩码含义

时间:2013-10-15 08:18:49

标签: x11 xcb

我正在尝试通过以下方式确定处理键:

  • XCB_MOD_MASK_1
  • XCB_MOD_MASK_2
  • XCB_MOD_MASK_3
  • XCB_MOD_MASK_4
  • XCB_MOD_MASK_5

在xcb中,对于XCB_MOD_MASK_1,它似乎是Alt(我是正确的?),但对于其他人按钮我找不到任何地方的映射(我试图在发布之前谷歌他们,但没有成功)。

那么与这些面具相关的常用密钥是什么?

2 个答案:

答案 0 :(得分:5)

通常Mask1是Alt或Meta,Mask2是Num lock,Mask3是AltGr,Mask4是Win,Mask5是Scroll lock,但这在X实现和/或键盘模型之间有所不同。

资料来源:我自己的电脑运行X11,以及网上的各种各样的代码。并非所有这些都是一致的,例如有人说Mod1是Alt,Mod4是Meta。

X11程序通常允许用户配置与Mask1 ... Mask5相对应的操作,并让他们找出哪些键设置掩码。

答案 1 :(得分:2)

您可以使用xmodmap等实用程序实际配置这些键(或任何键)映射到的内容。在X服务器下有八个修饰符。 8个修饰符是

  1. shift
  2. lock
  3. control
  4. mod1
  5. mod2
  6. mod3
  7. mod4
  8. mod5
  9. 要查看当前映射到这些修改器的键,您可以运行xmodmap -pm,打印修改器地图。例如。对我来说输出是

    xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
    
    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)
    

    因此,Alt会生成mod1

    现在使用mod1更改mod5xmodmap,打开~/.Xmodmap并写下如下内容:

    clear mod1
    clear mod2
    clear mod3
    clear mod4
    clear mod5
    
    add mod1 = Alt_L Alt_R Meta_L
    add mod2 = Num_Lock
    add mod3 = ISO_Level3_Shift
    add mod4 = Super_L Super_R Super_L Hyper_L
    add mod5 = ISO_Level5_Shift
    

    然后运行xmodmap ~/.Xmodmap

    例如,截至目前,ISO_Level3_Shift正是为您提供mod3。如何从键盘上实际获取密钥以生成与ISO_Level3_Shift对应的密钥代码是另一项挑战。

    EG。要获取密钥代码100以生成ISO_Level3_Shift(现在为mod3),请将以下内容添加到~/.Xmodmap文件中并运行xmodmap ~/.Xmodmap

    keycode 100 = ISO_Level3_Shift
    

    您可能会听到xmodmap已被弃用,并且您应该使用XKB配置文件和内容,但使用XKB会更糟糕。

    在X协议中,8个修饰符(shift,...,mod1,...,mod5)具有与之关联的位掩码。这是XCB使用C 枚举实现的位掩码,其精确值为:

    enum xcb_mod_mask_t{
      XCB_MOD_MASK_SHIFT                    = 1<<0,
      XCB_MOD_MASK_LOCK                     = 1<<1,
      XCB_MOD_MASK_CONTROL                  = 1<<2,
      XCB_MOD_MASK_1                        = 1<<3,
      XCB_MOD_MASK_2                        = 1<<4,
      XCB_MOD_MASK_3                        = 1<<5,
      XCB_MOD_MASK_4                        = 1<<6,
      XCB_MOD_MASK_5                        = 1<<7,
      XCB_MOD_MASK_ANY                      = 1<<15,
    };
    

    这些值不是XCB的选择,但它们是由X协议规范规定的,您可以在通过X协议与X服务器通信时使用它们。例如。当X服务器向您发送XCB_KEY_PRESS事件时,此事件是一个32字节的结构,其中一个字段是位掩码,其中的位根据在该按键事件期间按下的修饰符设置。例如。如果设置了第3位,则表示XCB_MOD_MASK_CONTROL已设置,这意味着Control修饰符已帮助关闭。