Как evtest определяет список событий клавиш клавиатуры PS/2?

Вопрос или проблема

У меня есть довольно старая клавиатура PS/2 с 125 клавишами, из которых некоторые только генерируют сканкоды, которые не привязаны к каким-либо кодам клавиш. Теперь я хотел бы запустить setkeycodes как сервис systemd, чтобы назначить коды клавиш для этих “проблемных” клавиш. Однако при выполнении evtest мне показываются странные коды клавиш, которые не соответствуют ни одной (физической) клавише на моей клавиатуре, в то время как клавиши F16 по F22 (и еще несколько клавиш, которые я опускаю для ясности) вообще не упоминаются:

Версия драйвера ввода 1.0.1
ID устройства ввода: шина 0x11 производитель 0x1 продукт 0x1 версия 0xab41
Имя устройства ввода: "AT Translated Set 2 keyboard"
Поддерживаемые события:
  Тип события 0 (EV_SYN)
  Тип события 1 (EV_KEY)
    Код события 1 (KEY_ESC)
    // Стандартный код клавиши ПК опущен
    Код события 85 (KEY_ZENKAKUHANKAKU)
    Код события 86 (KEY_102ND)
    // F11 и F12 опущены
    Код события 89 (KEY_RO)
    Код события 90 (KEY_KATAKANA)
    Код события 91 (KEY_HIRAGANA)
    Код события 92 (KEY_HENKAN)
    Код события 93 (KEY_KATAKANAHIRAGANA)
    Код события 94 (KEY_MUHENKAN)
    Код события 95 (KEY_KPJPCOMMA)
    Код события 96 (KEY_KPENTER)
    // Клавиши-стрелки опущены
    Код события 122 (KEY_HANGUEL)
    Код события 123 (KEY_HANJA)
    Код события 124 (KEY_YEN)
    // Клавиши Meta и compose опущены
    Код события 128 (KEY_STOP)
    Код события 140 (KEY_CALC)
    Код события 142 (KEY_SLEEP)
    Код события 143 (KEY_WAKEUP)
    Код события 155 (KEY_MAIL)
    Код события 156 (KEY_BOOKMARKS)
    Код события 157 (KEY_COMPUTER)
    Код события 158 (KEY_BACK)
    Код события 159 (KEY_FORWARD)
    Код события 163 (KEY_NEXTSONG)
    Код события 164 (KEY_PLAYPAUSE)
    Код события 165 (KEY_PREVIOUSSONG)
    Код события 166 (KEY_STOPCD)
    Код события 172 (KEY_HOMEPAGE)
    Код события 173 (KEY_REFRESH)
    Код события 183 (KEY_F13)
    Код события 184 (KEY_F14)
    Код события 185 (KEY_F15)
    // Где F16 по F22 (#186 по #192)?
    Код события 217 (KEY_SEARCH)
    Код события 226 (KEY_MEDIA)

Как я могу сделать, чтобы отсутствующие функциональные клавиши появились в этом списке? И: Должны ли они быть упомянуты здесь для того, чтобы использовать их в setkeycodes? Моя ОС – OpenSuSE Leap 15.5 на AMD64.

Хорошо, я понял. Я просто назначил коды клавиш #186 по #192 клавишам F16 по F22 с помощью setkeycodes. Это полный вызов программы, в который также входят другие специальные клавиши:

sudo /usr/bin/setkeycodes 5e 183 5f 184 63 185 62 186 5d 187 6a 188 74 189 77 190 76 191 6b 192 64 112 66 116 5c 127 6c 226 71 117 75 164 68 128 67 95 6f 91 6d 85 65 157

Теперь все специальные клавиши генерируют действительные коды клавиш.

Ответ или решение

evtest — это утилита для Linux, которая позволяет пользователям отслеживать события ввода от различных устройств, включая клавиатуры. Вопрос о том, как evtest определяет список событий клавиш для клавиатуры PS/2, требует внимания к нескольким ключевым аспектам, касающимся работы клавиатур, скан-кодов и взаимодействия с операционной системой.

1. Основы работы клавиатур PS/2

Клавиатуры, работающие по протоколу PS/2, используют скан-коды для представления нажатий клавиш. Каждый скан-код соответствует определённой клавише на клавиатуре. При нажатии клавиши клавиатура отправляет сигнал (скан-код) на компьютер, который затем интерпретируется операционной системой.

2. Как evtest работает с событиями клавиш

evtest взаимодействует с драйверами устройства ввода, чтобы извлечь информацию о поддерживаемых событиях клавиш. Когда вы запускаете evtest, программа:

  • Читает информацию из /dev/input/eventX: Это представляет собой специальный файл, который отвечает за события ввода для определённого устройства. Запрос к этому файлу возвращает данные о событиях, которые может обрабатывать драйвер устройства.

  • Получает информацию о поддерживаемых событиях: В выводе evtest отображаются различные типы событий, такие как EV_SYN (синхронизация), EV_KEY (клавиши) и другие.

  • Выводит список кодов клавиш: evtest показывает коды клавиш, совместимые с типами событий, которые были активированы с помощью клавиатуры. Каждый код сопоставляется с определённой функцией или действием, зависящими от конфигурации вашего устройства и операционной системы.

3. Почему некоторые клавиши могут отсутствовать

В вашем случае вы заметили, что evtest не отображает некоторые функциональные клавиши, такие как F16—F22. Это может произойти по нескольким причинам:

  • Конфигурация драйвера: Иногда драйверы устройств могут не поддерживать все функции клавиатуры, особенно если устройство достаточно старое или уникальное.

  • Неправильные или недостающие маппинги: Возможно, клавиши просто не сопоставлены с правильными кодами клавиш в системе. Это может быть причиной отсутствия указанных функциональных клавиш в выводе evtest.

4. Решение проблемы с использованием setkeycodes

Поскольку вы уже решили проблему с помощью setkeycodes, это подходящий способ. Эта утилита позволяет вручную назначить скан-коды, которые клавиатура отправляет, к определённым коду нажатия клавиш, которые может распознать операционная система. Это решает проблему отсутствующих функциональных клавиш, так как вы создаёте маппинг, который система может использовать для понимания, какую клавишу вы нажимаете.

В вашем случае, вызовы setkeycodes предоставляют интерфейс для маппинга и позволяют вам сопоставлять отсутствующие функции с действующими кодами, что делает ваш опыт работы с клавиатурой полноценным.

Заключение

В заключение, evtest извлекает информацию о событиях клавиш с помощью взаимодействия с драйверами устройств ввода в Linux. Неполный список клавиш может быть обусловлен конфигурацией драйвера или отсутствием маппинга для определённых клавиш. Использование setkeycodes является эффективным способом исправления недостатка функциональности и обеспечения полноценного взаимодействия с вашей клавиатурой PS/2.

Оцените материал
Добавить комментарий

Капча загружается...