Как работают клавиши Fn?

Мне нравится знать, как работают клавиши Fn на моем ноутбуке. Я думаю, что существует модуль ядра, который ловит клавишу Fn и вызывает некоторые сценарии, чтобы что-то сделать. В моем ноутбуке Fn+F2 переключают питание беспроводного и синезубого.

это вывод acpi_listen, когда я нажимаю Fn+F2

hotkey ATKD 0000005d 00000019
hotkey ATKD 0000007e 00000009

и, следующий результат xev для Fn+F2

keycode 238 press
keycode 238 release
keycode 237 press
keycode 237 release

Я думаю, всякий раз, когда я нажимал Fn+F2, два события выпрыгивали. Я пытался найти, какие действия выполняются для этих ключей. любая идея оценена;)

1 ответ

Решение

Synetech дает очень читаемое объяснение о клавишах Fn здесь

Технические детали

Когда вы нажимаете клавишу на клавиатуре, контроллер клавиатуры (небольшая микросхема внутри клавиатуры) обнаруживает электрическую цепь и обрабатывает ее, чтобы декодировать, какая клавиша была нажата, а затем отправляет скан-код на материнскую плату. Операционная система получает скан-код из BIOS, а затем выполняет любое действие, необходимое для обработки этого нажатия клавиши.

С большинством клавиш это достаточно просто. Если вы нажмете клавишу A, его клавиатурный контроллер отправит скан-код на материнскую плату, которая затем передаст его ОС, которая, в свою очередь, обычно печатает "A". (Если ОС обнаруживает, что одна из клавиш-модификаторов в данный момент удерживается нажатой, она может сделать что-то другое. Фактически вы можете настроить ее так, чтобы она делала все, что вы хотите, когда клавиша A нажата с модификаторами или без них.)

Теперь клавиша Fn является особенной. Когда вы нажимаете ее самостоятельно, ничего не происходит, потому что она является исключительно клавишей-модификатором и (как правило) не предназначена для самостоятельных действий. Когда вы удерживаете ее и нажимаете другую клавишу, контроллер клавиатуры обнаруживает это и просматривает встроенную таблицу, чтобы определить, является ли она известной комбинацией. Если комбинация отсутствует в таблице, она просто игнорирует ее, но если комбинация находится в таблице, она ищет соответствующий скан-код и отправляет его.

Что в итоге видит ОС? Он не видит скан-код для клавиши Fn и скан-код для другой клавиши. Вместо этого он видит один скан-код, связанный с любой функцией, для которой было установлено Fn-combo. Например, если производитель ноутбука установил комбинацию Fn + Стрелка вниз, чтобы уменьшить громкость, то ОС увидит скан-код, связанный с уменьшением громкости, который есть у некоторых клавиатур.

Также обратите внимание, что клавиша Fn работает независимо от операционной системы.

Кроме того, эта статья может помочь вам в правильном направлении:

Ядро имеет свое scancode в keycode таблица сопоставления, поэтому он сопоставляет определенный код сканирования с кодом ключа. Вы можете заглянуть в /usr/include/linux/input.h, чтобы увидеть, что ваше ядро ​​использует для сопоставления скан-кода и кода ключа - это называется keymap,


постскриптум

Возможно, мне придется несколько отказаться от предыдущего утверждения о том, что клавиши Fn работают совершенно независимо от ОС; не вдаваясь в технические подробности здесь, в результате получается, что ваша ОС может "не поддерживать" все или некоторые клавиши Fn клавиатуры, см., например:

Другие вопросы по тегам