我有一台新的笔记本电脑 HP Omen 15,生产于 2020 年。我有Calculator密钥,但我无法让它在 Ubuntu 20.04 中启动计算器。
当我按下Calculator按键时,什么也没有发生。我也无法在桌面环境中的相应配置程序中为该键分配快捷键。我尝试过使用 Plasma 和 Gnome shell 的 KDE(我猜想如果我在显示管理器的登录屏幕上选择“Ubuntu”会话,它就会启动)。这些程序会提示“按下所需的键”,但看不到 Calculator按键。
我已尝试使用xev
和showkey
实用程序调试情况。
如果我运行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,包含该行。