首先介绍上下文: 我使用的是 Ideapad 330-17ICH,有些Fn键根本不起作用——麦克风切换、触摸板切换、飞行模式、相机切换和亮度调高/调低(我最需要的)。
我正在尝试找到一种方法来修复这个问题……但要修复它,我必须了解哪个部分到底“坏了”。为此,我需要了解每次按下Fn+F11组合键降低亮度时,我的电脑内部究竟发生了什么(以及按什么顺序)。
我已经查阅了 Computerphile 系列“按下按键时会发生什么”,但它太笼统了,对我没有太大帮助。还发现那条线,但我不确定使用这些命令时会发生什么,以及我是否会意外搞砸我的系统。
我发现了一些信息,比如 ACPI 表/寄存器/BIOS/驱动程序,但在深入研究 ACPI 漏洞时,我没有发现任何有用的东西。我认识到有些键可能在如此低的级别上被识别,以至于不可能在不篡改硬件的情况下修复它(例如,键盘 LED 的Fn+SPACE可能是一个纯粹的硬件解决方案),但我并不认为这是无法修复的。
我无法检查这些键在 Windows 上是否有效,但我很确定它们有效(为什么联想会在键盘上添加在 Windows 上无效的功能?)。由此我推测,只要有足够的时间和知识,这个问题就可以在 Linux 上以某种方式得到解决,但我绝对必须知道从哪里开始寻找。
那么按键处理链是怎样的呢?它是否类似于 IRQ -> BIOS-> ACPI -> ACPI 驱动程序 -> 内核 -> 键盘驱动程序 -> X -> 应用程序?我是否遗漏了一些步骤(可能确实如此)?请详细说明它的工作原理,以及是否可以修复,请说明在哪里查找更多信息。
我的设备,取自neofetch
:(ubuntu 几乎是原装的,我甚至没有更换 WM)。
------------------
OS: Ubuntu 20.04.3 LTS x86_64
Host: 81FL Lenovo ideapad 330-17ICH
Kernel: 5.4.0-91-generic
Uptime: 5 hours, 25 mins
Packages: 3711 (dpkg), 20 (flatpak), 18 (snap)
Shell: bash 5.0.17
Resolution: 1920x1080
DE: GNOME
WM: Mutter
WM Theme: Yaru-dark
Theme: Yaru-dark [GTK2/3]
Icons: Yaru [GTK2/3]
Terminal: gnome-terminal
CPU: Intel i7-8750H (12) @ 4.100GHz
GPU: NVIDIA GeForce GTX 1050 Mobile
GPU: Intel UHD Graphics 630
Memory: 9679MiB / 19892MiB
按下+时也sudo showkey --scancode
没有产生任何输入。FnF11
@编辑更多背景信息:我开始观察/proc/interrupts
并随机按下按键:
sudo watch -d -n .1 cat /proc/interrupts
按下故障键Fn+[ F4F6F7F8F11F12] 时,行 (-->
插入以将 CPU 与注释分开 ) 没有任何变化:
1: 0 0 0 0 0 0 0 40191 0 0 0 0 --> IR-IO-APIC 1-edg i8042
通常在按下任何其他键盘键时会发生变化。我无法真正推断其他行,因为它们要么保持死机状态,要么变化太频繁。