xev 不显示功能键的名称

xev 不显示功能键的名称

例如,我的笔记本电脑上有功能键XF86AudioLowerVolume。我可以将此键与 openbox 配置文件中的某些命令相关联,并使用它来降低/增加音量。

我用命令找到了这个功能键的名称xev

KeyRelease event, serial 47, synthetic NO, window 0x1c00001,
    root 0x196, subw 0x0, time 85289390, (524,165), root:(525,203),
    state 0x10, keycode 174 (keysym 0x1008ff11, XF86AudioLowerVolume), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

但是,对于我的其他功能键,xev没有显示正确的键名称。例如,应该用于“降低屏幕亮度”。按下时,xev显示NoSymbol

KeyPress event, serial 43, synthetic NO, window 0x1c00001,
    root 0x196, subw 0x0, time 2651872, (850,161), root:(851,199),
    state 0x10, keycode 101 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 43, synthetic NO, window 0x1c00001,
    root 0x196, subw 0x0, time 2651872, (850,161), root:(851,199),
    state 0x10, keycode 101 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

另一个配对密钥“增加屏幕亮度”还显示NoSymbol

KeyPress event, serial 43, synthetic NO, window 0x1c00001,
    root 0x196, subw 0x0, time 2653165, (850,161), root:(851,199),
    state 0x10, keycode 212 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

KeyRelease event, serial 43, synthetic NO, window 0x1c00001,
    root 0x196, subw 0x0, time 2653165, (850,161), root:(851,199),
    state 0x10, keycode 212 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 0 bytes: 
    XFilterEvent returns: False

keycode这两个键只有不同。

这是否意味着我无法使用这些键将它们与某些命令相关联?它们显然可以用作键盘按键,为什么会xev显示NoSymbol

答案1

简单NoSymbol地说,该键没有预定义名称。这些都列在文件中keysymdefs.h,在过去二十多年里没有明显改变(见例如,或者)。

该文件用于生成xev供相关程序参考的名称列表。对于xev,可以使用以下任一方法完成

  • XLookupString, 或者
  • XmbLookupString

无论哪种方式,它都依赖于 生成的表keysymdef.h,如源代码中所述:

    /* 构造 XStringToKeysym 和 XKeysymToString 的哈希表。 */
    # 构建 ks_tables.h 需要 makekeys 实用程序

没有人真正想要添加到该文件,因为它是与 Unicode 相对应(但不匹配)的代码和特殊功能键(例如您询问的键)的混合体。大多数特殊键是在 20 世纪 90 年代初引入 X 键盘扩展之前定义的,并且 (Xkb) 本质上只是根据键盘上的行和列来识别键,而不是尝试命名所有键。

这一页具有指向说明 xterm 如何使用键修饰符的表格的链接。这Name的列键映射表是 Xkb 使用的名称,您可以看到通常只是行/列,除了非常常用键,例如ESC(for Escape)。

相关内容