Мне нравится знать, как работают клавиши Fn kbd> на моем ноутбуке. Я думаю, что существует модуль ядра, который ловит ключ Fn kbd> и вызывает некоторые скрипты, чтобы что-то сделать. В моем ноутбуке Fn kbd> + F2 kbd> переключают питание беспроводного и синего цвета.
это вывод acpi_listen
, когда я нажимаю Fn kbd> + F2 kbd>
hotkey ATKD 0000005d 00000019
hotkey ATKD 0000007e 00000009
, а следующий вывод - [ 113] для Fn kbd> + F2 kbd>
keycode 238 press
keycode 238 release
keycode 237 press
keycode 237 release
Я думаю, всякий раз, когда я нажимал Fn kbd> + F2 kbd > Два события выпрыгнули. Я пытался найти, какие действия выполняются для этих ключей. Любая идея приветствуется;)
Synetech дает очень читаемое объяснение о ключах Fn здесь
Технические детали
При нажатии клавиши на клавиатуре контроллер клавиатуры (микросхема маленькой ИС в клавиатуре) обнаруживает электрическую схему и обрабатывает ее для декодирования, какая клавиша была нажата и затем отправляет scancode на материнскую плату. Операционная система получает scancode от BIOS и затем выполняет любое действие, в котором это нуждается к тому, для обработки того нажатия клавиши.
С большинством ключей это достаточно просто. При нажатии клавиши его контроллер клавиатуры отправляет scancode на материнскую плату, которая затем передает его ОС, которая в свою очередь обычно печатает 'A'. (Если ОС обнаруживает, что одна из модифицирующих клавиш в настоящее время удерживается, затем это может сделать что-то другое. На самом деле можно настроить его, чтобы сделать независимо от того, что Вы хотите, когда клавиша нажата с или без модификаторов.)
Теперь ключ Fn является особенным. При нажатии его отдельно ничего не происходит, потому что это - исключительно модифицирующая клавиша и (обычно) не предназначается, чтобы сделать что-либо самостоятельно. Когда Вы держите его и нажимаете другую клавишу, контроллер клавиатуры обнаруживает, что и смотрит в его встроенной таблице, чтобы видеть, является ли это известная комбинация. Если комбинация не находится в таблице, то она просто игнорирует его, но если комбинация находится в таблице, то она ищет связанный scancode и отправляет это.
Что ОС заканчивает тем, что видела? Это не видит scancode для ключа Fn и scancode для другого ключа. Вместо этого это видит единственный scancode, связанный с любой функцией, на которую была установлена Fn-комбинация. Например, если производитель ноутбуков установил комбинацию Стрелки Fn+Down для сокращения объема, то ОС видит scancode, связанный с Объемом Вниз, который на самом деле имеют некоторые клавиатуры.
Также обратите внимание, что ключ Fn работает независимо от операционной системы.
Кроме того, эта статья может помочь указать на Вас в правильном направлении:
Ядро имеет свое собственное
scancode
кому:keycode
таблица отображения, таким образом, это отображает определенный scancode на код клавиши. Можно изучить/usr/include/linux/input.h для наблюдения то, что ядро использует для scancode для отображения кода клавиши – это называют akeymap
.
Постскриптум
Я, возможно, должен был бы несколько изменить своему слову на более раннем заявлении, что ключи Fn работают полностью независимо от ОС; не вдаваясь в большее количество технических подробностей здесь, результат, кажется, что Ваша ОС не могла бы "поддерживать" все или некоторые ключи Fn Вашей клавиатуры, посмотрите, например: