STM32 마이크로컨트롤러를 사용하여 테스트 HID 키보드를 구현했습니다.
특별한 것은 없습니다. 연결 후 10/초에 "A" 연속 스트림을 보내는 것뿐입니다.
Windows에서는 잘 작동합니다. 하지만 Ubuntu 16 시스템에 연결할 때 올바르게 인식되었음에도 불구하고 아무것도 표시되지 않으며 dmesg에 오류도 표시되지 않습니다.
dmesg 로그:
[ +9.163248] usb 2-1.1.2: new full-speed USB device number 34 using ehci-pci
[ +0.110516] usb 2-1.1.2: New USB device found, idVendor=0483, idProduct=5710
[ +0.000005] usb 2-1.1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ +0.000003] usb 2-1.1.2: Product: Root Password Unlock Key
[ +0.000002] usb 2-1.1.2: Manufacturer: Nomadic Controls
[ +0.000002] usb 2-1.1.2: SerialNumber: 123456789
[ +0.002741] input: Nomadic Controls Root Password Unlock Key as /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1.2/2-1.1.2:1.0/0003:0483:5710.0012/input/input39
[ +0.059560] hid-generic 0003:0483:5710.0012: input,hidraw2: USB HID v1.00 Keyboard [Nomadic Controls Root Password Unlock Key] on usb-0000:00:1d.0-1.1.2/input0
evtest로 테스트한 결과 데이터가 제대로 작동하는 것으로 나타났습니다. 어떤 이유로든 화면에 표시되지 않았습니다.
테스트 로그
Input device ID: bus 0x3 vendor 0x483 product 0x5710 version 0x100
Input device name: "Nomadic Controls Root Password Unlock Key"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 1 (KEY_ESC)
Event code 2 (KEY_1)
Event code 3 (KEY_2)
Event code 4 (KEY_3)
Event code 5 (KEY_4)
Event code 6 (KEY_5)
Event code 7 (KEY_6)
Event code 8 (KEY_7)
Event code 9 (KEY_8)
Event code 10 (KEY_9)
Event code 11 (KEY_0)
Event code 12 (KEY_MINUS)
Event code 13 (KEY_EQUAL)
Event code 14 (KEY_BACKSPACE)
Event code 15 (KEY_TAB)
Event code 16 (KEY_Q)
Event code 17 (KEY_W)
Event code 18 (KEY_E)
Event code 19 (KEY_R)
Event code 20 (KEY_T)
Event code 21 (KEY_Y)
Event code 22 (KEY_U)
Event code 23 (KEY_I)
Event code 24 (KEY_O)
Event code 25 (KEY_P)
Event code 26 (KEY_LEFTBRACE)
Event code 27 (KEY_RIGHTBRACE)
Event code 28 (KEY_ENTER)
Event code 29 (KEY_LEFTCTRL)
Event code 30 (KEY_A)
Event code 31 (KEY_S)
Event code 32 (KEY_D)
Event code 33 (KEY_F)
Event code 34 (KEY_G)
Event code 35 (KEY_H)
Event code 36 (KEY_J)
Event code 37 (KEY_K)
Event code 38 (KEY_L)
Event code 39 (KEY_SEMICOLON)
Event code 40 (KEY_APOSTROPHE)
Event code 41 (KEY_GRAVE)
Event code 42 (KEY_LEFTSHIFT)
Event code 43 (KEY_BACKSLASH)
Event code 44 (KEY_Z)
Event code 45 (KEY_X)
Event code 46 (KEY_C)
Event code 47 (KEY_V)
Event code 48 (KEY_B)
Event code 49 (KEY_N)
Event code 50 (KEY_M)
Event code 51 (KEY_COMMA)
Event code 52 (KEY_DOT)
Event code 53 (KEY_SLASH)
Event code 54 (KEY_RIGHTSHIFT)
Event code 55 (KEY_KPASTERISK)
Event code 56 (KEY_LEFTALT)
Event code 57 (KEY_SPACE)
Event code 58 (KEY_CAPSLOCK)
Event code 59 (KEY_F1)
Event code 60 (KEY_F2)
Event code 61 (KEY_F3)
Event code 62 (KEY_F4)
Event code 63 (KEY_F5)
Event code 64 (KEY_F6)
Event code 65 (KEY_F7)
Event code 66 (KEY_F8)
Event code 67 (KEY_F9)
Event code 68 (KEY_F10)
Event code 69 (KEY_NUMLOCK)
Event code 70 (KEY_SCROLLLOCK)
Event code 71 (KEY_KP7)
Event code 72 (KEY_KP8)
Event code 73 (KEY_KP9)
Event code 74 (KEY_KPMINUS)
Event code 75 (KEY_KP4)
Event code 76 (KEY_KP5)
Event code 77 (KEY_KP6)
Event code 78 (KEY_KPPLUS)
Event code 79 (KEY_KP1)
Event code 80 (KEY_KP2)
Event code 81 (KEY_KP3)
Event code 82 (KEY_KP0)
Event code 83 (KEY_KPDOT)
Event code 86 (KEY_102ND)
Event code 87 (KEY_F11)
Event code 88 (KEY_F12)
Event code 96 (KEY_KPENTER)
Event code 97 (KEY_RIGHTCTRL)
Event code 98 (KEY_KPSLASH)
Event code 99 (KEY_SYSRQ)
Event code 100 (KEY_RIGHTALT)
Event code 102 (KEY_HOME)
Event code 103 (KEY_UP)
Event code 104 (KEY_PAGEUP)
Event code 105 (KEY_LEFT)
Event code 106 (KEY_RIGHT)
Event code 107 (KEY_END)
Event code 108 (KEY_DOWN)
Event code 109 (KEY_PAGEDOWN)
Event code 110 (KEY_INSERT)
Event code 111 (KEY_DELETE)
Event code 119 (KEY_PAUSE)
Event code 125 (KEY_LEFTMETA)
Event code 126 (KEY_RIGHTMETA)
Event code 127 (KEY_COMPOSE)
Event type 4 (EV_MSC)
Event code 4 (MSC_SCAN)
Event type 17 (EV_LED)
Event code 0 (LED_NUML) state 1
Event code 1 (LED_CAPSL) state 0
Event code 2 (LED_SCROLLL) state 0
Event code 3 (LED_COMPOSE) state 0
Event code 4 (LED_KANA) state 0
Key repeat handling:
Repeat type 20 (EV_REP)
Repeat code 0 (REP_DELAY)
Value 250
Repeat code 1 (REP_PERIOD)
Value 33
Properties:
Testing ... (interrupt to exit)
Event: time 1517685567.317551, type 1 (EV_KEY), code 30 (KEY_A), value 2
Event: time 1517685567.317551, -------------- SYN_REPORT ------------
Event: time 1517685567.357555, type 1 (EV_KEY), code 30 (KEY_A), value 2
Event: time 1517685567.357555, -------------- SYN_REPORT ------------
Event: time 1517685567.397568, type 1 (EV_KEY), code 30 (KEY_A), value 2
Event: time 1517685567.397568, -------------- SYN_REPORT ------------
Event: time 1517685567.421168, type 17 (EV_LED), code 0 (LED_NUML), value 0
Event: time 1517685567.421168, -------------- SYN_REPORT ------------
Event: time 1517685567.437542, type 1 (EV_KEY), code 30 (KEY_A), value 2
Event: time 1517685567.437542, -------------- SYN_REPORT ------------
Event: time 1517685567.477549, type 1 (EV_KEY), code 30 (KEY_A), value 2
Event: time 1517685567.477549, -------------- SYN_REPORT ------------
Event: time 1517685567.517555, type 1 (EV_KEY), code 30 (KEY_A), value 2
Event: time 1517685567.517555, -------------- SYN_REPORT ------------
Event: time 1517685567.557554, type 1 (EV_KEY), code 30 (KEY_A), value 2
Event: time 1517685567.557554, -------------- SYN_REPORT ------------
Event: time 1517685567.597552, type 1 (EV_KEY), code 30 (KEY_A), value 2
Event: time 1517685567.597552, -------------- SYN_REPORT ------------
Event: time 1517685567.637564, type 1 (EV_KEY), code 30 (KEY_A), value 2
여기서 무슨 일이 일어나는지 아시나요?
답변1
작동 하면 evtest
관련된 모든 커널 계층(HID, 입력)이 작동하므로 문제는 /dev/input/event*
X 또는 Wayland(실행 중인 모든 항목)로 변환하는 것입니다. 그래서 어떤 이유로 X evdev
드라이버나 libinput
(당신이 사용하는 것이 무엇이든) HID 장치를 선택하지 않습니다.
X11의 경우 단서를 찾고 강제로 포함되도록 /var/log/Xorg.0.log
사용자 정의를 작성할 수도 있습니다 . xorg.conf
이를 사용하여 xev
X 이벤트를 보고 xinput
X 입력 장치를 제어할 수 있습니다. Wayland에 관해서는 도움을 드릴 수 없습니다.