Что произойдет, если нажать дополнительную клавишу на клавиатуре?

Что произойдет, если нажать дополнительную клавишу на клавиатуре?

Мне интересно узнать, как работает клавиатура с дополнительными клавишами. Например, у меня есть следующая клавиатура:

введите описание изображения здесь

Вы видите, что у него есть дополнительные клавиши. Теперь скажем, что я нажалнемойключ, что произойдет в этом случае?

Я думаю, что происходит следующее:

  • Сигнал будет отправлен на компьютер.
  • Драйвер устройства клавиатуры получит этот сигнал.
  • Драйвер устройства клавиатуры увидит, что этот сигнал является сигналом отключения звука, поэтому он не передаст его в ОС, а вместо этого вызовет функцию ОС/системный вызов, который отключит звук на компьютере.

Я прав?

решение1

Очень краткий обзор входных слоев:

Ваше клавиатурное устройство подключено к ПК каким-либо образом, например, через USB или порт PS/2. Драйверы ядра для этого механизма знают, как обрабатывать связь при нажатии клавиши на клавиатуре.

Для USB-клавиатуры стандарт называетсяСПРЯТАННЫЙ(Human Interface Device) существует. Это не только для клавиатур, но и для мышей, джойстиков и других устройств ввода. Таким образом, устройство будет иметьдескрипторсообщая ядру, какие сигналы оно может испускать, а также множество кодов для клавиш, включаянемойстандартизированы.

Тем не менее, на некоторых клавиатурах есть клавиши, которые не стандартизированы (например, Fnна некоторых клавиатурах), и производитель сам решает, как обозначать эти клавиши.

В ядре есть специальный слой для обработки устройств HID. Этот слой делает необработанную коммуникацию HID доступной в /dev/hidrawX, а затем продолжает транслировать события HID в события ввода ядра.

Входной уровень ядра принимаетскан-коды(числа, соответствующие физическому ключу, уникальному для устройства) и преобразует их включевые коды(номера, соответствующие логическим клавишам, стандартизированным для всех устройств). Оба доступны как события на /dev/input/eventX. Вы можете использовать evdevдля просмотра этих событий, и showkeyи dumpkeysт. д. для просмотра таблицы перевода.

X-сервер (или Wayland) считывает все эти события и переводит их включевые символы(например a, áи т. д., или специальные, такие как AudioMute). Приложения X могут получать эти символы и действовать соответственно. Вы можете использовать xevприложение see, чтобы увидеть этот слой, и настроить его с помощью xmodmapи xkbdспецификации в вашем xorg.conf.

Чтобы реагировать на AudioMute, для этого необходимо какое-то приложение. Часто это Window Manager, но если ваш Window Manager этого не делает, то отдельное приложение тоже подойдет.

Таким образом, не существует единого «драйвера клавиатуры», все гораздо сложнее, и нет специального вызова для «отключения звука».

решение2

В общем понимании вы правы. Когда вы нажимаете клавишу, клавиатура отправляет скан-код, по сути, последовательность цифр, идентифицирующих каждую клавишу. Скан-коды сопоставляются с кодами клавиш. Каждый код клавиши соответствует функции, которая определяет, как программа должна реагировать на определенное нажатие клавиши. Обратите внимание, что Xorg и консоль используют разные наборы кодов клавиш. Я не очень много знаю о Wayland, но, возможно, он также использует свой собственный набор кодов клавиш. Коды клавиш сопоставляются с символами клавиш. Символы клавиш позволяют разработчикам работать с клавиатурой на более высоком уровне абстракции.

Вы можете увидеть сканкоды и коды клавиш на консоли, выполнив showkey --scancodeи соответственно. В Xorg для последнего showkey --keycodeследует использовать .xev

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

Также есть многостатьиВ Интернете есть статьи, которые объясняют, как работают клавиатуры на низком уровне. Неважно, была ли статья написана в 1999 или 2010 году — с тех пор в клавиатурах изменилось не так уж много, но имейте в виду, что устройства USB HID работают иначе, чем «классические» клавиатуры PS/2.

Связанный контент