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

26

Мне нравится знать, как 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два события выпрыгивают. Я пытался найти, какие действия выполняются для этих ключей. любая идея оценена;)

soroosh
источник

Ответы:

26

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

Технические подробности

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

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

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

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

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

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

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


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

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

сумасшедший о натти
источник
1
Спасибо, интересная информация о клавишах Fn. На самом деле я хочу найти, какая часть дескриптора ОС scancodeсвязана, например, с «кодом 238».
soroosh
3
Может быть, эта статья поможет вам в правильном направлении? «Ядро имеет свой собственное scancodeдля keycodeотображения таблицы, поэтому он отображает определенный скан к клавиатурным Вы можете посмотреть в /usr/include/linux/input.h , чтобы увидеть , что ваше ядро использует для Scancode к отображению скана - коды. - это называется keymap«.
Сумасшедший о Natty
1
Эта статья идеально подходит, это то, что я ищу
soroosh