我的 Kubuntu 从内核 5.4.0-42 更新到内核 5.4.0-47,我的笔记本电脑键盘停止工作(亮度键除外)。重新启动到 5.4.0-42 解决了这个问题。
键盘在 Windows 10 上也能完美运行(我有双启动)。
键盘在 GRUB (2.04) 中也能正常工作。但在内核 5.4.0-47 及以上版本中则不行。
更新到 Kubuntu 20.10(测试版)也无济于事(内核 5.8.0-20 有同样的问题)。
我的问题与此类似:HP 笔记本电脑上的键盘在内核 5.4.0-45-generic 下停止工作
是的,我在启动板上看到了这个:https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1894017
那么问题是什么?为什么它没有在内核 5.4.0-47 - 5.8.0-20 的整个范围内修复?
答案1
解决方案在这里找到:https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1894017
我刚刚将intel_vbtn
内核模块列入黑名单/etc/modprobe.d/blacklist.conf
并重新启动。作者提到,不知何故intel_vbtn
认为我的笔记本电脑处于平板电脑模式(什么?!)并禁用了键盘/触摸板。
如何加入黑名单
/etc/modprobe.d
要实现这一点,您可以创建一个带有后缀的新文件.conf
,也可以使用主blacklist.conf
文件。前者可能更可取,因为您可以在不再需要该文件时(即修复错误时)删除它:
sudoedit /etc/modprobe.d/blacklist-intel_vbtn.conf
在文件中添加一行,可选择添加注释来解释为什么这样做
# bug in module breaks keyboard, so don't load it
blacklist intel_vbtn
保存文件,退出并重新启动。
PS:在与 RedHat 的 Hans de Goede 先生发送邮件后,我得到了以下答复:
这个问题应该由这个上游提交来修复,几个小时前它出现在 Linus 的树中: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/platform/x86?id=8169bd3e6e193497cab781acddcff8fde5d0c416
伊戈尔,如果你这么做:
cat /sys/class/dmi/id/chassis_type
在你的笔记本电脑上,输出是不是“31”或“32”然后此修复应该有效为你。
如果输出实际上是“31”或“32(我不希望这样),那么请告诉我,因为我们需要不同的修复方法。
PPS 在我的系统(Intel Celeron N2940)上chassis_type
返回10
答案2
这似乎是 libinput,它SW_TABLET_MODE
从笔记本电脑的某个输入设备接收事件。我不知道为什么他们在接收该事件时禁用键盘和触摸板,但我猜这是为了避免按下笔记本电脑上的按钮,你可以翻转屏幕,这样键盘/触摸板就位于触摸屏下方。
但是,即使键盘没有翻转,某些笔记本电脑型号也会发出此事件。Dell Precision 5760 有一个“Intel HID 开关”输入设备,当笔记本电脑移动时会触发此事件。因此,每次我触发加速度计时,内置键盘和触摸板都会停止工作一段时间。然后它又回到笔记本电脑模式。这个错误似乎已经 [几周前修复] [1],所以希望它能很快在稳定版本中推出。
其他人建议使用黑名单intel_vbtn
,但对我来说没用。可能是因为使用了不同的驱动程序。但我找到了另一种解决方法,这是 libinput 中针对此确切问题的解决方案;为触发平板电脑模式的输入设备注册一个怪癖:ModelTabletModeSwitchUnreliable
。
首先,您需要确定哪个输入设备触发了该SW_TABLET_MODE
事件。安装 libinput-tools 以帮助您调试问题:
$ sudo atp install libinput-tools
现在我们需要用 记录所有输入事件sudo libinput debug-events
。启动它,并尝试触发SW_TABLET_MODE
事件。它应该看起来像这样:
-event27 SW_TABLET_MODE .....
这意味着它/dev/input/event27
触发了平板电脑模式。其他设备的数字可能不同。让我们列出输入设备以找出它的名称:
$ sudo libinput list-devices
查找之前获取的活动编号,并记下设备名称:
Device: Intel HID switches
Kernel: /dev/input/event27
现在我们需要一些用于识别您计算机的 Modalias 的标识符:
$ cat /sys/class/dmi/id/modalias
dmi:bvnDellInc.:bvr1.4.1:bd09/08/2021:br1.4:svnDellInc.:pnPrecision5760:pvr:sku0A5E:rvnDellInc.:rn0FW9DW:rvrA00:cvnDellInc.:ct10:cvr:
选择哪个部分实际上并不重要,但我选择了它,svnDellInc.:pnPrecision5760:
因为它包括了我的计算机的制造商和型号。
以root身份创建一个文件/etc/libinput/local-overrides.quirks
[QUIRKS DESCRIPTION]
MatchName=*DEVICE NAME*
MatchDMIModalias=dmi:*PART OF MODALIAS*
ModelTabletModeSwitchUnreliable=1
对于我的 Dell Precision 5760 来说,它看起来像这样:
[Precision 5760 Disable Tablet Mode]
MatchName=*Intel HID switches*
MatchDMIModalias=dmi:*svnDellInc.:pnPrecision5760:*
ModelTabletModeSwitchUnreliable=1
保存文件。要验证怪癖是否与设备匹配,请尝试:
$ libinput quirks list /dev/input/event27
它应该输出ModelTabletModeSwitchUnreliable
怪癖。
重新启动计算机,该SW_TABLET_MODE
事件将被忽略。