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, 지난 20년 동안 크게 변하지 않았습니다(참조:이것예를 들어, 또는이것).

xev이 파일은 관련 프로그램에서 참조할 이름 목록을 생성하는 데 사용됩니다 . 의 경우 xev다음 방법 중 하나를 사용하여 이 작업을 수행할 수 있습니다.

  • XLookupString, 또는
  • XmbLookupString.

keysymdef.h어느 쪽이든 소스 코드에 명시된 대로 생성된 테이블에 의존합니다 .

    /* XStringToKeysym 및 XKeysymToString의 해시 테이블을 구성합니다. */
    # ks_tables.h를 빌드하려면 makekeys 유틸리티가 필요합니다.

유니코드에 해당하는(일치하지 않는) 코드와 귀하가 요청한 것과 같은 특수 기능 키가 혼합되어 있기 때문에 아무도 해당 파일에 추가하고 싶어하지 않습니다. 대부분의 특수 키는 1990년대 초 X 키보드 확장이 도입되기 전에 정의되었으며 (Xkb)는 기본적으로 모든 키에 이름을 지정하는 대신 키보드의 행과 열을 기반으로 키를 식별했습니다.

이 페이지xterm이 키 수정자를 사용하는 방법을 설명하는 표에 대한 링크가 있습니다. 이것Name기둥키 맵는 Xkb에서 사용하는 이름입니다. 일반적으로 행/열로만 구성되어 있음을 알 수 있습니다.매우ESC(for Escape) 와 같이 일반적으로 사용되는 키입니다 .

관련 정보