태블릿 키코드가 인식되지 않음

태블릿 키코드가 인식되지 않음

현재 그래픽 태블릿의 버튼을 키코드로 선택하려고 합니다. 추가 마우스 버튼보다는 키보드 단축키를 지원하는 프로그램이 더 많기 때문에(예를 들어 Krita는 왼쪽 클릭과 오른쪽 클릭만 지원하는 것 같습니다), 태블릿 버튼을 키코드로 처리하여 바로가기 키를 사용할 수 있게 하고 싶습니다. 프로그램에서 할당됩니다.

내가 지금까지 무엇을 했는지

/etc/udev/hwdb.d/90-huion.hwdb태블릿의 스캔 코드를 키 코드에 매핑하기 위해 udev hwdb 파일( )을 만들었습니다 .

내 hwdb 파일은 다음과 같습니다.

evdev:input:b0003v256Cp006Ee0111*
 KEYBOARD_KEY_90001=a
 KEYBOARD_KEY_90002=a
 KEYBOARD_KEY_90003=a
 KEYBOARD_KEY_90004=a
 KEYBOARD_KEY_90005=a
 KEYBOARD_KEY_90006=a
 KEYBOARD_KEY_90007=a
 KEYBOARD_KEY_90008=a
 KEYBOARD_KEY_90009=a
 KEYBOARD_KEY_9000a=a
 MANUAL_OVERRIDE=1

검색 부분에서는 여기에서 찾은 event23 값을 사용합니다.

cat /sys/class/input/event23/device/id/bustype
> 0003
cat /sys/class/input/event23/device/id/product
> 006e
cat /sys/class/input/event23/device/id/vendor
> 256c
cat /sys/class/input/event23/device/id/version
> 0111

콜론(HID 256c:006e Pad)이 있기 때문에 장치 이름을 기반으로 매핑할 수 없으며 콜론을 구분 기호로 사용하는 hwdb 파일에서는 해당 이름이 잘 작동하지 않는 것 같습니다.

로드 hwdb.bin하고 다시 로드하고 udev 규칙을 (다시) 트리거했습니다.

sudo systemd-hwdb update
sudo udevadmin trigger
sudo udevadm control --reload

또한 hwdb를 이전 버전으로 업데이트해 보았지만 sudo udevadm hwdb --update아무런 차이가 없습니다. 또한 태블릿을 분리했다가 다시 연결해 보았습니다.

를 사용하면 udevadm info내 파일이 사용되고 있음을 알 수 있습니다(따라서 이 MANUAL_OVERRIDE=1섹션에서는 아무 작업도 수행하지 않습니다). udevadm info산출:

P: /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.1/1-2.1.1/1-2.1.1:1.0/0003:256C:006E.0004/input/input23/event23
N: input/event23
L: 0
S: input/by-id/usb-256c_006e-event-mouse
S: input/by-path/pci-0000:00:14.0-usb-0:2.1.1:1.0-event-mouse
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.1/1-2.1.1/1-2.1.1:1.0/0003:256C:006E.0004/input/input23/event23
E: DEVNAME=/dev/input/event23
E: MAJOR=13
E: MINOR=87
E: SUBSYSTEM=input
E: USEC_INITIALIZED=5852671
E: KEYBOARD_KEY_90001=a
E: KEYBOARD_KEY_90002=a
E: KEYBOARD_KEY_90003=a
E: KEYBOARD_KEY_90004=a
E: KEYBOARD_KEY_90005=a
E: KEYBOARD_KEY_90006=a
E: KEYBOARD_KEY_90007=a
E: KEYBOARD_KEY_90008=a
E: KEYBOARD_KEY_90009=a
E: KEYBOARD_KEY_9000a=a
E: MANUAL_OVERRIDE=1
E: ID_INPUT=1
E: ID_INPUT_TABLET=1
E: ID_INPUT_KEY=1
E: ID_VENDOR=256c
E: ID_VENDOR_ENC=256c
E: ID_VENDOR_ID=256c
E: ID_MODEL=006e
E: ID_MODEL_ENC=006e
E: ID_MODEL_ID=006e
E: ID_REVISION=3000
E: ID_SERIAL=256c_006e
E: ID_TYPE=hid
E: ID_BUS=usb
E: ID_USB_INTERFACES=:030102:
E: ID_USB_INTERFACE_NUM=00
E: ID_USB_DRIVER=usbhid
E: ID_PATH=pci-0000:00:14.0-usb-0:2.1.1:1.0
E: ID_PATH_TAG=pci-0000_00_14_0-usb-0_2_1_1_1_0
E: ID_INPUT_TABLET_PAD=1
E: LIBINPUT_DEVICE_GROUP=3/256c/6e:usb-0000:00:14.0-2.1
E: DEVLINKS=/dev/input/by-id/usb-256c_006e-event-mouse /dev/input/by-path/pci-0000:00:14.0-usb-0:2.1.1:1.0-event-mouse
E: TAGS=:power-switch:aaaaaaaaaa

디버그

시험

내가 아는 한, 이것이 태블릿 버튼을 매핑하는 데 필요한 전부이며 (대부분) 유망해 보입니다 evtest.

Testing ... (interrupt to exit)
Event: time 1589801905.094479, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90001
Event: time 1589801905.094479, type 1 (EV_KEY), code 30 (KEY_A), value 1
Event: time 1589801905.094479, -------------- SYN_REPORT ------------
Event: time 1589801905.252456, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90001
Event: time 1589801905.252456, type 1 (EV_KEY), code 30 (KEY_A), value 0
Event: time 1589801905.252456, -------------- SYN_REPORT ------------
Event: time 1589801906.960440, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90002
Event: time 1589801906.960440, type 1 (EV_KEY), code 30 (KEY_A), value 1
...
Event: time 1589801913.582373, -------------- SYN_REPORT ------------
Event: time 1589801913.936376, type 4 (EV_MSC), code 4 (MSC_SCAN), value 9000a
Event: time 1589801913.936376, type 1 (EV_KEY), code 30 (KEY_A), value 1
Event: time 1589801913.936376, -------------- SYN_REPORT ------------
Event: time 1589801914.086370, type 4 (EV_MSC), code 4 (MSC_SCAN), value 9000a
Event: time 1589801914.086370, type 1 (EV_KEY), code 30 (KEY_A), value 0
Event: time 1589801914.086370, -------------- SYN_REPORT ------------
Event: time 1589801914.992371, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90001
Event: time 1589801914.992371, type 1 (EV_KEY), code 304 (BTN_SOUTH), value 1
Event: time 1589801914.992371, -------------- SYN_REPORT ------------
Event: time 1589801915.154366, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90001
Event: time 1589801915.154366, type 1 (EV_KEY), code 304 (BTN_SOUTH), value 0
Event: time 1589801915.154366, -------------- SYN_REPORT ------------
Event: time 1589801915.358379, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90002
Event: time 1589801915.358379, type 1 (EV_KEY), code 305 (BTN_EAST), value 1
Event: time 1589801915.358379, -------------- SYN_REPORT ------------
Event: time 1589801915.446357, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90002
Event: time 1589801915.446357, type 1 (EV_KEY), code 305 (BTN_EAST), value 0
Event: time 1589801915.446357, -------------- SYN_REPORT ------------

매핑되지 않은 것처럼 보이는 마지막 두 개의 버튼(BTN_SOUTH 및 BTN_EAST)을 제외하고(아마도 매핑된 버튼과 동일한 스캔 코드를 갖기 때문일 것입니다) 다른 모든 버튼은 올바르게 보고됩니다 code 30 (KEY_A)(이 버튼이 왜 있는지 아는 경우). d 알고 싶습니다. 두 버튼이 매핑되지 않았지만 지금은 그것에 집중하고 싶지 않습니다.)

셰프

xev올바르게 매핑되지 않은 것 같은 두 개의 버튼 만 사용하면 xev해당 두 버튼에 대한 콘솔 출력은 다음과 같습니다.

ButtonPress event, serial 34, synthetic NO, window 0x3a00001,
    root 0x6bd, subw 0x0, time 8912753, (1,806), root:(971,821),
    state 0x0, button 15, same_screen YES

ButtonRelease event, serial 34, synthetic NO, window 0x3a00001,
    root 0x6bd, subw 0x0, time 8912953, (1,806), root:(971,821),
    state 0x0, button 15, same_screen YES

ButtonPress event, serial 34, synthetic NO, window 0x3a00001,
    root 0x6bd, subw 0x0, time 8913377, (1,806), root:(971,821),
    state 0x0, button 16, same_screen YES

ButtonRelease event, serial 34, synthetic NO, window 0x3a00001,
    root 0x6bd, subw 0x0, time 8913581, (1,806), root:(971,821),
    state 0x0, button 16, same_screen YES

hwdb가 변경되기 전에는 버튼이 1-3 및 8-16 버튼으로 선택되었지만(매핑되지 않은 버튼 15 및 16은 출력에서 ​​각각 BTN_SOUTH 및 BTN_EAST 버튼이었습니다 evtest) 이제는 xev대부분이 표시되지 않습니다(매핑되지 않은 매핑만 해당) 15 및 16).

정보

이것을 사용하면 sudo dmesg --follow알 수 없는 키 누름처럼 보이는 이벤트가 표시되지 않습니다.

에버루메뉴

evemu-describehwdb 변경 전 출력:

# EVEMU 1.3
# Kernel: 5.7.0-1-MANJARO
# DMI: dmi:bvnAmericanMegatrendsInc.:bvr1205:bd05/11/2018:svnSystemmanufacturer:pnSystemProductName:pvrSystemVersion:rvnASUSTeKCOMPUTERINC.:rnPRIMEZ270-P:rvrRevX.0x:cvnDefaultstring:ct3:cvrDefaultstring:
# Input device name: "HID 256c:006e Pad"
# Input device ID: bus 0x03 vendor 0x256c product 0x6e version 0x111
# Supported events:
#   Event type 0 (EV_SYN)
#     Event code 0 (SYN_REPORT)
#     Event code 1 (SYN_CONFIG)
#     Event code 2 (SYN_MT_REPORT)
#     Event code 3 (SYN_DROPPED)
#     Event code 4 ((null))
#     Event code 5 ((null))
#     Event code 6 ((null))
#     Event code 7 ((null))
#     Event code 8 ((null))
#     Event code 9 ((null))
#     Event code 10 ((null))
#     Event code 11 ((null))
#     Event code 12 ((null))
#     Event code 13 ((null))
#     Event code 14 ((null))
#     Event code 15 (SYN_MAX)
#   Event type 1 (EV_KEY)
#     Event code 256 (BTN_0)
#     Event code 257 (BTN_1)
#     Event code 258 (BTN_2)
#     Event code 259 (BTN_3)
#     Event code 260 (BTN_4)
#     Event code 261 (BTN_5)
#     Event code 262 (BTN_6)
#     Event code 263 (BTN_7)
#     Event code 264 (BTN_8)
#     Event code 265 (BTN_9)
#     Event code 304 (BTN_SOUTH)
#     Event code 305 (BTN_EAST)
#     Event code 306 (BTN_C)
#     Event code 331 (BTN_STYLUS)
#   Event type 3 (EV_ABS)
#     Event code 0 (ABS_X)
#       Value        0
#       Min          0
#       Max          1
#       Fuzz         0
#       Flat         0
#       Resolution   0
#     Event code 1 (ABS_Y)
#       Value        0
#       Min          0
#       Max          1
#       Fuzz         0
#       Flat         0
#       Resolution   0
#   Event type 4 (EV_MSC)
#     Event code 4 (MSC_SCAN)
# Properties:
N: HID 256c:006e Pad
I: 0003 256c 006e 0111
...

후에:

# EVEMU 1.3
# Kernel: 5.7.0-1-MANJARO
# DMI: dmi:bvnAmericanMegatrendsInc.:bvr1205:bd05/11/2018:svnSystemmanufacturer:pnSystemProductName:pvrSystemVersion:rvnASUSTeKCOMPUTERINC.:rnPRIMEZ270-P:rvrRevX.0x:cvnDefaultstring:ct3:cvrDefaultstring:
# Input device name: "HID 256c:006e Pad"
# Input device ID: bus 0x03 vendor 0x256c product 0x6e version 0x111
# Supported events:
#   Event type 0 (EV_SYN)
#     Event code 0 (SYN_REPORT)
#     Event code 1 (SYN_CONFIG)
#     Event code 2 (SYN_MT_REPORT)
#     Event code 3 (SYN_DROPPED)
#     Event code 4 ((null))
#     Event code 5 ((null))
#     Event code 6 ((null))
#     Event code 7 ((null))
#     Event code 8 ((null))
#     Event code 9 ((null))
#     Event code 10 ((null))
#     Event code 11 ((null))
#     Event code 12 ((null))
#     Event code 13 ((null))
#     Event code 14 ((null))
#     Event code 15 (SYN_MAX)
#   Event type 1 (EV_KEY)
#     Event code 30 (KEY_A)
#     Event code 256 (BTN_0)
#     Event code 304 (BTN_SOUTH)
#     Event code 305 (BTN_EAST)
#     Event code 306 (BTN_C)
#     Event code 331 (BTN_STYLUS)
#   Event type 3 (EV_ABS)
#     Event code 0 (ABS_X)
#       Value        0
#       Min          0
#       Max          1
#       Fuzz         0
#       Flat         0
#       Resolution   0
#     Event code 1 (ABS_Y)
#       Value        0
#       Min          0
#       Max          1
#       Fuzz         0
#       Flat         0
#       Resolution   0
#   Event type 4 (EV_MSC)
#     Event code 4 (MSC_SCAN)
# Properties:
N: HID 256c:006e Pad
I: 0003 256c 006e 0111
...

다양한 기기를 사용해 보세요

내가 뭔가 잘못하고 있는지 확인하기 위해 USB 마우스로 매우 유사한 것을 시도했습니다(왼쪽 클릭이므로 스캔 코드 90001을 매핑하지 않았습니다). 마우스를 선택 xev하고 마우스 오른쪽 버튼을 클릭하거나 스크롤하면 예상한 문자 "a"가 표시됩니다(따라서 질문에 잘못된 문자 a가 표시되는 이유는 바로 이것이기 때문입니다). xev키보드와 마우스 출력을 비교했습니다 .

키보드가 있는 Xev(매핑 없음)
KeyPress event, serial 34, synthetic NO, window 0x3a00001,
    root 0x6bd, subw 0x0, time 4209087, (-1,721), root:(969,736),
    state 0x0, keycode 38 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (61) "a"
    XmbLookupString gives 1 bytes: (61) "a"
    XFilterEvent returns: False

KeyRelease event, serial 34, synthetic NO, window 0x3a00001,
    root 0x6bd, subw 0x0, time 4209151, (-1,721), root:(969,736),
    state 0x0, keycode 38 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (61) "a"
    XFilterEvent returns: False
마우스가 있는 Xev("a"에 매핑된 버튼)
MappingNotify event, serial 34, synthetic NO, window 0x0,
    request MappingKeyboard, first_keycode 8, count 248

KeyPress event, serial 34, synthetic NO, window 0x3a00001,
    root 0x6bd, subw 0x0, time 4211519, (-1,721), root:(969,736),
    state 0x0, keycode 38 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (61) "a"
    XmbLookupString gives 1 bytes: (61) "a"
    XFilterEvent returns: False

KeyRelease event, serial 35, synthetic NO, window 0x3a00001,
    root 0x6bd, subw 0x0, time 4211679, (-1,721), root:(969,736),
    state 0x0, keycode 38 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (61) "a"
    XFilterEvent returns: False

장치

문제의 태블릿은 내가 설치한 "Huion New 1060Plus"이며 digimend-kernel-drivers-dkms-git내 태블릿이 evdev 드라이버를 사용하고 있다고 생각했습니다(대체 wacom 드라이버를 설치하지 않았지만 및에서 사용 했기 때문에 xf86-input-wacom설치했습니다 ). 버튼 문제 외에도 펜 압력을 포함하여 태블릿이 제대로 작동합니다.libwacomlibinputgnome-settings-daemon

사용 지침

나는 주로 다음 출처의 지침을 따릅니다.

관련 정보