HP 笔记本电脑计算器键出现问题

HP 笔记本电脑计算器键出现问题

我有一台新的笔记本电脑 HP Omen 15,生产于 2020 年。我有Calculator密钥,但我无法让它在 Ubuntu 20.04 中启动计算器。

当我按下Calculator按键时,什么也没有发生。我也无法在桌面环境中的相应配置程序中为该键分配快捷键。我尝试过使用 Plasma 和 Gnome shell 的 KDE(我猜想如果我在显示管理器的登录屏幕上选择“Ubuntu”会话,它就会启动)。这些程序会提示“按下所需的键”,但看不到 Calculator按键。

我已尝试使用xevshowkey实用程序调试情况。

如果我运行xev并按下,Calculator我会看到很多关于按下和释放XF86Calculator键的消息:

...
KeyRelease event, serial 42, synthetic NO, window 0x3e00001,
root 0x29e, subw 0x0, time 52918, (151,-96), root:(151,806),
state 0x14, keycode 148 (keysym 0x1008ff1d, XF86Calculator), same_screen YES,
XLookupString gives 0 bytes: 
XFilterEvent returns: False

KeyPress event, serial 42, synthetic NO, window 0x3e00001,
root 0x29e, subw 0x0, time 52918, (151,-96), root:(151,806),
state 0x14, keycode 148 (keysym 0x1008ff1d, XF86Calculator), same_screen YES,
XLookupString gives 0 bytes: 
XmbLookupString gives 0 bytes: 
XFilterEvent returns: False

KeyRelease event, serial 42, synthetic NO, window 0x3e00001,
root 0x29e, subw 0x0, time 52958, (151,-96), root:(151,806),
state 0x14, keycode 148 (keysym 0x1008ff1d, XF86Calculator), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False

KeyPress event, serial 42, synthetic NO, window 0x3e00001,
root 0x29e, subw 0x0, time 52958, (151,-96), root:(151,806),
state 0x14, keycode 148 (keysym 0x1008ff1d, XF86Calculator), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False

KeyRelease event, serial 42, synthetic NO, window 0x3e00001,
root 0x29e, subw 0x0, time 52999, (151,-96), root:(151,806),
state 0x14, keycode 148 (keysym 0x1008ff1d, XF86Calculator), same_screen YES,
XLookupString gives 0 bytes:
XFilterEvent returns: False
...

然后我按 Ctrl-C 停止它。如果我xev再次运行,它不会显示任何与Calculator按键有关的事件。如果我运行dmesg,它会显示类似这样的消息[ 5685.955273] kauditd_printk_skb: 46 callbacks suppressed。可能这个按键仍然会产生按下释放事件,但内核会抑制它们。

这可能就是该错误的原因。

如果我运行showkey,它总是显示扫描码和键码,如果我按下Calculator键:

$ sudo showkey -s
kb mode was ?UNKNOWN?
[ if you are trying this under X, it might not work
since the X server is also reading /dev/console ]

press any key (program terminates 10s after last keypress)...
0x9c
0xe0 0x21
0x1d
^Ccaught signal 2, cleaning up...
0xe0 0x21
$ sudo showkey -k
kb mode was ?UNKNOWN?
[ if you are trying this under X, it might not work
since the X server is also reading /dev/console ]

press any key (program terminates 10s after last keypress)...
keycode  28 release
keycode 140 press
keycode  29 press
^Ccaught signal 2, cleaning up...

总体而言,看起来该键是一个正确映射到的普通媒体键XF86Calculator

那么,您能给我一些关于如何让它工作的线索吗?

我已准备好提供有关我的笔记本和操作系统的任何其他信息。

我也认为我可以尝试自己修复该错误。但是,目前我不知道该调试哪个模块。

更新发现登录和退出有时会恢复计算器键。例如,如果我运行 KDE Plasma,按下计算器键,然后注销并在 Wayland 上运行 Ubuntu,那么我可以再次启动计算器。

更新2 Ubuntu 热键故障排除wiki 页面包含似乎与我完全一样的案例描述。案例 4.b - “如果按键事件过多,则需要确定它们重复的位置。”但是,仅此而已。因此,我将非常感激任何有关如何确定这一点的线索。

更新3我曾两次尝试联系该 wiki 页面的作者 Christopher Peñalver,但尚未收到任何邮件回复。进一步研究后,我发现问题可能出在我的键盘的 udev 规则中。已向 Launchpad 提交了错误报告:https://bugs.launchpad.net/ubuntu/+source/systemd/+bug/1929345

答案1

终于修好了!感谢 Github 上的某个人!

该问题出在 udev 数据库中,修复该问题的 PR 已合并,希望它能在下一次更新后发挥作用。

解决方案就在这里

https://github.com/pelrun/hp-omen-linux-module/issues/9#issuecomment-936474113

需要在文件中添加以下几行/usr/lib/udev/hwdb.d/60-keyboard.hwdb

# HP Omen 15
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP:pnOMENLaptop15*:pvr*
 KEYBOARD_KEY_a1=!calc

更新

在软件包中出现新版本的 HWDB 之前,更好的解决方案是将这些行放入文件中/etc/udev/hwdb.d/70-keyboard.hwdb

然后运行sudo systemd-hwdb update

这些行已包含在systemd v250

目前(2022 年 1 月 5 日)我的 KUbuntu 20.04 上的 systemd 版本是 245。

更新2

2023 年 1 月 3 日,udev 软件包,版本 249.11,包含该行。

相关内容