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これら2つのキーはただ違います。

これは、このキーを特定のコマンドに関連付けるために使用できないという意味ですか?明らかに、キーボードキーとして機能するのになぜxev表示されますかNoSymbol

答え1

簡単にNoSymbol言えば、キーには事前定義された名前はありません。これらはファイルにリストされていますkeysymdefs.h、過去20年間で大きく変わりませんでした(参照:これたとえば、またはこれ)。

xevこのファイルは、関連プログラムによって参照される名前のリストを生成するために使用されます。の場合、xev次のいずれかの方法を使用してこれを実行できます。

  • XLookupStringまたは
  • XmbLookupString

keysymdef.hどちらもソースコードで指定されているように生成されたテーブルに依存します。

    /* XStringToKeysymとXKeysymToStringのハッシュテーブルを設定します。 */
    # ks_tables.h をビルドするには makekeys ユーティリティが必要です。

Unicodeに対応する(一致しない)コードとあなたが要求したものなどの特殊機能キーが混在しているため、誰もそのファイルに追加したくありません。ほとんどの特殊キーは、1990年代初頭にXキーボード拡張が導入される前に定義され(Xkb)、デフォルトではすべてのキーに名前を付けるのではなく、キーボードの行と列に基づいてキーを識別しました。

このページxtermがキー修飾子を使用する方法を説明する表へのリンクがあります。これNameキーマップは Xkb が使用する名前です。通常、行/列のみで構成されていることがわかります。非常にESC(for Escape)などの一般的に使用されるキー。

関連情報