Làm thế nào để có được tất cả các khóa của tôi để gửi mã khóa


14

Tôi đang sử dụng Gentoo với XFCE. Tôi có bàn phím K350 logitech, tất cả trừ một vài phím hoạt động như mong đợi nhưng có một phím cụ thể mà tôi muốn sử dụng nhưng khi tôi chạy showkeykhông có mã khóa nào được gửi. Chìa khóa là nút sắp xếp cửa sổ ở phía dưới bên trái của bàn phím.

nhập mô tả hình ảnh ở đây.

Đây có phải là sự cố trình điều khiển không và có thể lấy khóa đó để gửi mã để tôi có thể ánh xạ một hành động tới nó không?


Trong khi chạy, xevđiều đó có tạo ra bất kỳ đầu ra nào khi bạn nhấn phím không? Ngoài ra hãy xem các câu trả lời trước đây của tôi sử dụng xev. Họ sẽ giúp bạn bắt đầu: unix.stackexchange.com/search?q=user%3A7453+xev
slm

@slm không có đầu ra từ xev liên quan đến phím nhấn.
Andrew Redd

Bài đăng này có thể hữu ích: unix.stackexchange.com/questions/116629/ trên
slm

Tôi đang cố gắng làm theo hướng dẫn ở đây julien.danjou.info/blog/2012/logitech-k750-linux- support để có thể tìm ra tín hiệu nào đang được gửi. Tôi nghĩ rằng có một số phím nhất định phải được chuyển không phải bằng mã bấm phím mà với một số loại tín hiệu usb khác không được xử lý bởi trình điều khiển hid-logitech-dj.
Andrew Redd

Với bàn phím USB, bạn có thể sử dụng lệnh xinputđể nhận thêm thông tin từ họ.
slm

Câu trả lời:


10

Đừng sử dụng showkeyhoặc xev- sử dụng udevevtestthay vào đó.

Nhìn vào đầu ra của 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)

và thiết bị thứ hai (cùng bàn phím nhưng có phím đa phương tiện):

# 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)

Tất cả các sự kiện có mã> 255 sẽ không hoạt động và bạn phải sắp xếp lại các phím. Nhưng trước tiên, bạn phải có được một số mã quét:

# /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

và nhấn các phím không hoạt động. Nếu bạn sẽ không nhận được bất kỳ scancodes nào ở đây, khóa có thể đã chết và bạn không thể làm gì về nó.

Bây giờ bạn phải kiểm tra mã khóa nào là miễn phí - bạn có thể làm điều đó bằng cách chụp dựa trên /usr/include/linux/input.htệp, giả sử:

#define KEY_PROG3        202
#define KEY_PROG4       203

hoặc bạn có thể nhấn từng phím trên bàn phím và ánh xạ chúng theo cách thủ công.

Dù sao, nếu bạn biết mã khóa nào là miễn phí, bạn có thể tạo một tệp có nội dung tương tự như mã này:

0xC022D PROG3
0xC022E PROG4

Bạn có thể lưu nó trong /lib/udev/keymaps/logitech-media-keyboard-elite - đó là cho bàn phím của tôi.

Và bây giờ, bạn phải tạo một quy tắc cho udev, nó sẽ trông như thế này:

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}Và các thông số khác mà bạn có thể đọc từ:

# udevadm info /dev/input/event0

hoặc là:

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

Lưu quy tắc này dưới /etc/udev/rules.d/95-keymap-media-keyboard-elite.rulesvà cắm lại bàn phím của bạn. Nó hoạt động tốt cho tôi, và nó cũng nên cho bạn.


evtest không nắm bắt được các sự kiện cho khóa mà tôi quan tâm. Có một cái gì đó đang bị mất. Wireshark nhìn thấy các sự kiện nhưng không có gì khác xuất hiện khi nhìn thấy chúng Tôi nghĩ rằng đây phải là một vấn đề về trình điều khiển. theo như tôi có thể nói trình điều khiển hid-logitech-dj nắm bắt đầu ra và chuyển tiếp nó đến lõi ẩn. Ở đâu đó có mất.
Andrew Redd

Có lẽ bạn đang sử dụng thiết bị sai?
Mikhail Morfikov

Điều này xuất hiện lỗi thời bây giờ, vì /lib/udev/keymaprõ ràng đã được gỡ bỏ. Askubfox.com/questions/362373/ trên
Karthik T

1
Vâng, ý tưởng tôi mô tả ở đây đã lỗi thời. Thay vào đó, udev sử dụng các tập tin mà bạn đưa vào /etc/udev/hwdb.d/.
Mikhail Morfikov
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.