Технические подробности
Когда вы нажимаете клавишу на клавиатуре, контроллер клавиатуры (небольшая
микросхема внутри клавиатуры) обнаруживает электрическую цепь и обрабатывает ее, чтобы декодировать, какая клавиша была нажата, а затем отправляет
скан-код на материнскую плату . Операционная система получает скан-код из BIOS, а затем выполняет любое действие, необходимое для обработки этого нажатия клавиши.
С большинством клавиш это достаточно просто. Если вы нажмете A
клавишу, ее клавиатурный контроллер отправит скан-код на материнскую плату, которая затем передаст его ОС, которая, в свою очередь, обычно печатает «А». (Если ОС обнаруживает, что одна из клавиш-модификаторов в настоящее время удерживается нажатой, она может делать что-то другое. Фактически вы можете настроить ее так, чтобы она выполняла все, что вы хотите, когда Aклавиша нажата с модификаторами или без них.)
Теперь Fnключ особенный. Когда вы нажимаете ее самостоятельно, ничего не происходит, потому что она является исключительно клавишей-модификатором и (как правило) не предназначена для самостоятельных действий. Когда вы удерживаете ее и нажимаете другую клавишу, контроллер клавиатуры обнаруживает это и просматривает встроенную таблицу, чтобы определить, является ли она известной комбинацией. Если комбинация отсутствует в таблице, она просто игнорирует ее, но если комбинация находится в таблице, она ищет соответствующий скан-код и отправляет его.
Что в итоге видит ОС? Он не видит скан-код для Fnключа и скан-код для другого ключа. Вместо этого он видит один скан-код, связанный с любой функцией, для которой было установлено Fn-combo. Например, если производитель ноутбука установил
комбо Fn+ Down Arrowдля уменьшения громкости, то ОС видит скан-код, связанный с тем Volume Down, что на самом деле есть у некоторых клавиатур.
Ядро имеет свой собственный scancode
для
keycode
отображения таблицы, поэтому он отображает определенную скан к клавиатурным. Вы можете заглянуть в /usr/include/linux/input.h, чтобы увидеть, что ваше ядро использует для сопоставления скан-кода и кода ключа - это называется a
keymap
.
scancode
связана, например, с «кодом 238».