Мне интересно узнать, как работает клавиатура с дополнительными клавишами. Например, у меня есть следующая клавиатура:
Вы видите, что у него есть дополнительные клавиши. Теперь скажем, что я нажалнемойключ, что произойдет в этом случае?
Я думаю, что происходит следующее:
- Сигнал будет отправлен на компьютер.
- Драйвер устройства клавиатуры получит этот сигнал.
- Драйвер устройства клавиатуры увидит, что этот сигнал является сигналом отключения звука, поэтому он не передаст его в ОС, а вместо этого вызовет функцию ОС/системный вызов, который отключит звук на компьютере.
Я прав?
решение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.