在 Ubuntu 22.10 上(因此内核为 5.19,gnome 43.1)
HP Spectre x360 二合一 16-f1xxx,i7-12700H,Iris XE (ADL GT2)
在笔记本电脑和平板电脑模式之间切换时,飞行模式会自动切换。
预期行为:平板电脑模式和飞行模式之间没有联系。
这可以看作是旧版本的更新 为什么我的 HP 笔记本电脑在 Ubuntu 18.04 上“飞行模式”不断切换?
尝试了本文中描述的 systemd 解决方案,但不起作用。请注意,有人评论说,此修复在 22.04 上对他来说不再起作用。
我探索了一下,发现使用 时sudo showkey -s
,没有事件注册。但是,使用 时sudo showkey -k
,我们得到
键码 247 按下 键码 247 释放
因此 showkey 不会获取扫描码,而只会获取键码。
显然键码 247 是 KEY_RFKILL,这确实是飞行模式。
此外,罪魁祸首似乎是“英特尔 HID 事件”。evtest
我得到:
$ sudo evtest /dev/input/event17
Input driver version is 1.0.1
Input device ID: bus 0x19 vendor 0x0 product 0x0 version 0x0
Input device name: "Intel HID events"
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 69 (KEY_NUMLOCK)
Event code 102 (KEY_HOME)
Event code 104 (KEY_PAGEUP)
Event code 107 (KEY_END)
Event code 109 (KEY_PAGEDOWN)
Event code 113 (KEY_MUTE)
Event code 114 (KEY_VOLUMEDOWN)
Event code 115 (KEY_VOLUMEUP)
Event code 116 (KEY_POWER)
Event code 142 (KEY_SLEEP)
Event code 164 (KEY_PLAYPAUSE)
Event code 166 (KEY_STOPCD)
Event code 224 (KEY_BRIGHTNESSDOWN)
Event code 225 (KEY_BRIGHTNESSUP)
Event code 240 (KEY_UNKNOWN)
Event code 247 (KEY_RFKILL)
Event type 4 (EV_MSC)
Event code 4 (MSC_SCAN)
Properties:
Testing ... (interrupt to exit)
Event: time 1671615870.717544, type 4 (EV_MSC), code 4 (MSC_SCAN), value 08
Event: time 1671615870.717544, type 1 (EV_KEY), code 247 (KEY_RFKILL), value 1
Event: time 1671615870.717544, -------------- SYN_REPORT ------------
Event: time 1671615870.717556, type 1 (EV_KEY), code 247 (KEY_RFKILL), value 0
Event: time 1671615870.717556, -------------- SYN_REPORT ------------
Event: time 1671615871.877965, type 4 (EV_MSC), code 4 (MSC_SCAN), value 08
Event: time 1671615871.877965, type 1 (EV_KEY), code 247 (KEY_RFKILL), value 1
Event: time 1671615871.877965, -------------- SYN_REPORT ------------
Event: time 1671615871.877980, type 1 (EV_KEY), code 247 (KEY_RFKILL), value 0
Event: time 1671615871.877980, -------------- SYN_REPORT ------------
Event: time 1671615876.441854, type 4 (EV_MSC), code 4 (MSC_SCAN), value 08
Event: time 1671615876.441854, type 1 (EV_KEY), code 247 (KEY_RFKILL), value 1
Event: time 1671615876.441854, -------------- SYN_REPORT ------------
Event: time 1671615876.441866, type 1 (EV_KEY), code 247 (KEY_RFKILL), value 0
Event: time 1671615876.441866, -------------- SYN_REPORT ------------
这是否意味着“坏”扫描码是 08?我如何确保它不会再次触发?
答案1
好的,通过进一步的研究,我可以提出一个解决方案,灵感来自 https://wiki.archlinux.org/title/Map_scancodes_to_keycodes
我创建了一个文件 /etc/udev/hwdb.d/91-solve-airplane.hwdb
# Spectre x360 16 2022 (Prevents Random airplane mode)
evdev:name:Intel HID events:dmi:bvn*:bvr*:bd*:svnHP*:pn*HP[sS][pP][eE][cC][tT][rR][eE]*x3602-in-1*:*
KEYBOARD_KEY_08=unknown
以 evdev:name:Intel HID events 开头的长行末尾必须与 /sys/class/dmi/id/modalias 匹配。开头是负责的设备。键盘键号 08 是错误的扫描码。
在那之后
sudo systemd-hwdb update
sudo udevadm trigger
应该适用于该会话。要使其永久生效,请使用
sudo systemctl edit --full systemd-hwdb-update.service
并注释掉以下行
ConditionNeedsUpdate=/etc
保存到 /etc/systemd/system/systemd-hwdb-update.service
你应该完成了。
答案2
我遇到了同样的问题,并使用您的方法成功修复了它。但是,我需要 .hwdb 文件中不同的设备规范。要找出具体是哪一个,我参考https://yulistic.gitlab.io/2017/12/linux-keymapping-with-udev-hwdb/。
此外,我不必永久保留更改。重启后,问题仍然得到解决。时间会告诉我们更新是否会解决任何问题。
看https://askubuntu.com/a/1468311/1696813我的回答和更多详细信息。
干杯 jk
答案3
更新:此解决方案已过时,我找到了一个更好的解决方案,可以解决问题的根源。英特尔的 HID 驱动程序中有一个错误,要修复,请按照以下说明进行操作https://askubuntu.com/a/1483259/1688756
我找到了一种适用于任何发行版的任何桌面的解决方案,并且不需要您制作内核模块或任何类似的复杂操作。
https://askubuntu.com/a/1463613/1688756
简而言之,您下载并设置一个名为 Hawck 的程序,将键码 255(rfkill 键,当盖子开关激活时触发)重新绑定为空字符,将 Hawck 设置为在启动时运行,问题就解决了。干杯!