내 키를 모두 가져와 키 코드를 보내는 방법


14

XFCE와 함께 젠투를 사용하고 있습니다. 로지텍 K350 키보드가 있는데, 키를 제외한 모든 키가 예상대로 작동하지만 사용하려는 특정 키가 있지만 실행할 때 showkey키 코드가 전송되지 않습니다. 키는 키보드 왼쪽 하단의 창 정렬 버튼입니다.

여기에 이미지 설명을 입력하십시오.

이것은 드라이버 문제입니까? 조치를 맵핑 할 수 있도록 해당 키를 가져 와서 코드를 보낼 수 있습니까?


실행하는 동안 xev키를 누를 때 출력이 생성됩니까? 또한를 사용하는 이전 답변을 살펴보십시오 xev. : 그들은 당신이 시작할 수 있어야 unix.stackexchange.com/search?q=user%3A7453+xev
SLM

@slm 키 누르기와 관련된 xev의 출력이 없습니다.
Andrew Redd

이 게시물이 도움이 될 것입니다 : unix.stackexchange.com/questions/116629/…
slm

어떤 신호가 전송되는지 알아낼 수 있도록 julien.danjou.info/blog/2012/logitech-k750-linux-support 가이드를 따르려고합니다 . 키 누름 코드가 아니라 hid-logitech-dj 드라이버가 처리하지 않는 다른 유형의 USB 신호와 함께 전달 해야하는 특정 키가 있다고 생각합니다.
Andrew Redd

USB 키보드를 사용하면 명령 xinput을 사용하여 추가 정보를 얻을 수 있습니다.
slm

답변:


10

사용하지 마십시오 showkey또는 xev사용 - udev하고 evtest대신합니다.

의 출력을 봐 evtest

# evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0:      Logitech Logitech USB Keyboard
/dev/input/event1:      Logitech Logitech USB Keyboard
/dev/input/event2:      Power Button
/dev/input/event3:      Power Button
/dev/input/event4:      PC Speaker
/dev/input/event5:      A4Tech USB Mouse
/dev/input/event6:      ACPI Virtual Keyboard Device
Select the device event number [0-6]: 0
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x46d product 0xc30f version 0x110
Input device name: "Logitech Logitech USB Keyboard"
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 85 (KEY_ZENKAKUHANKAKU)
    Event code 86 (KEY_102ND)
    Event code 87 (KEY_F11)
    Event code 88 (KEY_F12)
    Event code 89 (KEY_RO)
    Event code 90 (KEY_KATAKANA)
    Event code 91 (KEY_HIRAGANA)
    Event code 92 (KEY_HENKAN)
    Event code 93 (KEY_KATAKANAHIRAGANA)
    Event code 94 (KEY_MUHENKAN)
    Event code 95 (KEY_KPJPCOMMA)
    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 113 (KEY_MUTE)
    Event code 114 (KEY_VOLUMEDOWN)
    Event code 115 (KEY_VOLUMEUP)
    Event code 116 (KEY_POWER)
    Event code 117 (KEY_KPEQUAL)
    Event code 119 (KEY_PAUSE)
    Event code 121 (KEY_KPCOMMA)
    Event code 122 (KEY_HANGUEL)
    Event code 123 (KEY_HANJA)
    Event code 124 (KEY_YEN)
    Event code 125 (KEY_LEFTMETA)
    Event code 126 (KEY_RIGHTMETA)
    Event code 127 (KEY_COMPOSE)
    Event code 128 (KEY_STOP)
    Event code 129 (KEY_AGAIN)
    Event code 130 (KEY_PROPS)
    Event code 131 (KEY_UNDO)
    Event code 132 (KEY_FRONT)
    Event code 133 (KEY_COPY)
    Event code 134 (KEY_OPEN)
    Event code 135 (KEY_PASTE)
    Event code 136 (KEY_FIND)
    Event code 137 (KEY_CUT)
    Event code 138 (KEY_HELP)
    Event code 183 (KEY_F13)
    Event code 184 (KEY_F14)
    Event code 185 (KEY_F15)
    Event code 186 (KEY_F16)
    Event code 187 (KEY_F17)
    Event code 188 (KEY_F18)
    Event code 189 (KEY_F19)
    Event code 190 (KEY_F20)
    Event code 191 (KEY_F21)
    Event code 192 (KEY_F22)
    Event code 193 (KEY_F23)
    Event code 194 (KEY_F24)
    Event code 240 (KEY_UNKNOWN)
  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
  Event type 17 (EV_LED)
    Event code 0 (LED_NUML)
    Event code 1 (LED_CAPSL)
    Event code 2 (LED_SCROLLL)
    Event code 3 (LED_COMPOSE)
    Event code 4 (LED_KANA)
Properties:
  Property type 20 (EV_REP)
    Property code 0 (REP_DELAY)
      Value    250
    Property code 1 (REP_PERIOD)
      Value     33
Testing ... (interrupt to exit)

두 번째 장치 (같은 키보드이지만 멀티미디어 키가 있음) :

# evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0:      Logitech Logitech USB Keyboard
/dev/input/event1:      Logitech Logitech USB Keyboard
/dev/input/event2:      Power Button
/dev/input/event3:      Power Button
/dev/input/event4:      PC Speaker
/dev/input/event5:      A4Tech USB Mouse
/dev/input/event6:      ACPI Virtual Keyboard Device
Select the device event number [0-6]: 1
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x46d product 0xc30f version 0x110
Input device name: "Logitech Logitech USB Keyboard"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 113 (KEY_MUTE)
    Event code 114 (KEY_VOLUMEDOWN)
    Event code 115 (KEY_VOLUMEUP)
    Event code 116 (KEY_POWER)
    Event code 131 (KEY_UNDO)
    Event code 138 (KEY_HELP)
    Event code 140 (KEY_CALC)
    Event code 142 (KEY_SLEEP)
    Event code 143 (KEY_WAKEUP)
    Event code 155 (KEY_MAIL)
    Event code 156 (KEY_BOOKMARKS)
    Event code 158 (KEY_BACK)
    Event code 159 (KEY_FORWARD)
    Event code 163 (KEY_NEXTSONG)
    Event code 164 (KEY_PLAYPAUSE)
    Event code 165 (KEY_PREVIOUSSONG)
    Event code 166 (KEY_STOPCD)
    Event code 168 (KEY_REWIND)
    Event code 171 (KEY_CONFIG)
    Event code 172 (KEY_HOMEPAGE)
    Event code 182 (KEY_REDO)
    Event code 208 (KEY_FASTFORWARD)
    Event code 210 (KEY_PRINT)
    Event code 217 (KEY_SEARCH)
    Event code 234 (KEY_SAVE)
    Event code 319 (?)
    Event code 328 (BTN_TOOL_QUINTTAP)
    Event code 329 (?)
    Event code 330 (BTN_TOUCH)
    Event code 331 (BTN_STYLUS)
    Event code 418 (KEY_ZOOMIN)
    Event code 419 (KEY_ZOOMOUT)
    Event code 420 (KEY_ZOOMRESET)
    Event code 421 (KEY_WORDPROCESSOR)
    Event code 423 (KEY_SPREADSHEET)
    Event code 425 (KEY_PRESENTATION)
    Event code 430 (KEY_MESSENGER)
  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
Properties:
Testing ... (interrupt to exit)

코드가 255보다 큰 모든 이벤트는 작동하지 않으므로 키를 다시 매핑해야합니다. 그러나 먼저 스캔 코드를 가져와야합니다.

# /lib/udev/keymap -i input/event1
Press ESC to finish, or Control-C if this device is not your primary keyboard
scan code: 0xC022D   key code: zoomin
scan code: 0xC022E   key code: zoomout

작동하지 않는 키를 누르십시오. 여기에 스캔 코드가 없으면 키가 죽었을 가능성이 있으며 아무것도 할 수 없습니다.

이제 어떤 키 코드가 무료인지 확인해야합니다. /usr/include/linux/input.h파일을 기반으로 촬영하여 수행 할 수 있습니다 .

#define KEY_PROG3        202
#define KEY_PROG4       203

또는 키보드의 각 키를 누르고 수동으로 매핑 할 수 있습니다.

어쨌든 어떤 키 코드가 무료인지 알고 있다면 다음과 비슷한 내용의 파일을 만들 수 있습니다.

0xC022D PROG3
0xC022E PROG4

당신은 그것을 저장할 수 있습니다 /lib/udev/keymaps/logitech-media-keyboard-elite- 그것은 나의 키보드를위한 것입니다.

이제에 대한 규칙을 만들어야합니다 udev.

KERNEL=="event*", ACTION=="add", SUBSYSTEM=="input", SUBSYSTEMS=="usb", ENV{ID_VENDOR_ID}=="046d", ENV{ID_MODEL_ID}=="c30f", RUN+="/lib/udev/keymap $name /lib/udev/keymaps/logitech-media-keyboard-elite"

ENV{ID_VENDOR_ID}, ENV{ID_MODEL_ID}및 기타 매개 변수 당신이 읽을 수 :

# udevadm info /dev/input/event0

또는:

# udevadm info --name /dev/input/event0 --attribute-walk

이 규칙을 저장 /etc/udev/rules.d/95-keymap-media-keyboard-elite.rules하고 키보드를 다시 연결하십시오. 그것은 나를 위해 잘 작동하며, 당신도 마찬가지입니다.


evtest는 내가 관심있는 키에 대한 이벤트를 캡처하지 않습니다. 잃어버린 것이 있습니다. Wireshark는 이벤트를 보지만 다른 이벤트는 보이지 않습니다. 이것이 드라이버 문제라고 생각합니다. 내가 알 수있는 한 hid-logitech-dj 드라이버는 출력을 캡처하여 hid 코어로 전달합니다. 어딘가에 없어졌습니다.
Andrew Redd

어쩌면 당신은 잘못된 장치를 사용하고 있습니까?
Mikhail Morfikov

/lib/udev/keymap외관상으로는 제거되었으므로 현재는 구식 입니다. askubuntu.com/questions/362373/…
Karthik T

1
예, 여기서 설명한 아이디어는 최신이 아닙니다. 대신, udev는에 넣은 파일을 사용합니다 /etc/udev/hwdb.d/.
Mikhail Morfikov
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.