Fn键如何工作?

我想知道Fn键在我的笔记本电脑中是如何工作的。 我认为存在一个内核模块,它捕获Fn键并调用一些脚本来执行某些操作。 在我的笔记本电脑中, Fn + F2切换无线和蓝牙的电源。

这是acpi_listen输出,当我按Fn + F2时

 hotkey ATKD 0000005d 00000019 hotkey ATKD 0000007e 00000009 

并且,下面是Fn + F2xev输出

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

我想每当我按下Fn + F2时,两个事件都会跳出来。 我试图找到为此键执行的操作。 任何想法赞赏;)

Synetech 在这里提供了关于Fn键的非常可读的解释

技术细节

当您按下键盘上的键时,键盘控制器(键盘的小型IC芯片 )会检测到电路并处理它以解码按下了哪个键,然后将扫描码发送到主板 。 操作系统从BIOS接收扫描码,然后执行它需要的任何操作以处理该按键。

使用大多数按键,这很简单。 如果您按下A键,其键盘控制器会将扫描码发送到主板,然后将其传递给操作系统 ,而操作系统通常会打印“A”。 (如果操作系统检测到其中一个修改键当前处于按下状态,那么它可能会执行不同的操作。实际上,您可以将其配置为在使用或不使用修改器按下A键时执行任何操作。)

现在Fn键很特别。 当你单独按下它时,没有任何反应,因为它只是一个修饰键而不是(通常)意味着它自己做任何事情。 当您按住它并按另一个键时,键盘控制器会检测到并查看其内置表以查看它是否为已知组合。 如果组合不在表中,那么它只是忽略它,但如果组合在表中,那么它会查找关联的扫描码并发送它。

操作系统最终会看到什么? 它没有看到Fn键的扫描码和另一个键的扫描码。 相反,它会看到与Fn-combo设置的任何function相关联的单个扫描码。 例如,如果笔记本电脑制造商已设置Fn + 向下箭头组合以减小音量,则操作系统会看到与降低音量相关联的扫描码,这是某些键盘实际拥有的。

另请注意, Fn独立于操作系统。

此外, 本文可能会帮助您指出正确的方向:

内核有自己的scancodekeycode映射表,因此它将某个扫描keycode映射到键码。 您可以查看/usr/include/linux/input.h以查看内核用于扫描码到键码映射的内容 – 它被称为键映射。


后记

我可能需要在某种程度上违背早先的说法,即Fn键完全独立于操作系统; 在这里没有涉及更多技术细节,结果似乎是你的操作系统可能不会“支持”全部或部分键盘的Fn键,例如: