切换到平板电脑模式时切换飞行模式(HP spectre x360)

切换到平板电脑模式时切换飞行模式(HP spectre x360)

在 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 设置为在启动时运行,问题就解决了。干杯!

相关内容