Ubuntu 22.04 在 Dell G15 5521 上偶尔会出现随机按键卡住的情况,按下其他键后会立即清除

Ubuntu 22.04 在 Dell G15 5521 上偶尔会出现随机按键卡住的情况,按下其他键后会立即清除

设置:

  • Ubuntu 22.04,全新安装。
  • 戴尔 G15 5521 笔记本电脑
  • 最新固件
  • 6.0.8-060008-通用
  • Nvidia 525.60.11
  • X11 Ubuntu 版本的 Gnome

偶尔(对我来说大概一天一次)某个键会卡住并自动重复。按任何其他键都会停止自动重复。

这发生在默认内核和 6.0.8 上。

在 Windows 11 上不会出现此问题。运行预发布键盘测试(开机时按住 fn 键)时不会出现此问题。

多台 G15 笔记本电脑都出现了这个问题。我有一台用于工作,一台用于个人使用,还有三台用于工作。所有笔记本电脑都出现了相同的随机偶发问题,但频率足以引起投诉...

系统负载过大时,问题并不总是发生。打字速度似乎不会对问题产生任何影响。

当问题发生时,dmesg 没有显示任何与键盘或 USB 相关的内容。

我不想关闭按键重复功能(xset -r)。

有关输入设备的更多信息:

$ xinput list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ DELL0B56:00 06CB:CE81 Mouse               id=10   [slave  pointer  (2)]
⎜   ↳ DELL0B56:00 06CB:CE81 Touchpad            id=11   [slave  pointer  (2)]
⎜   ↳ PS/2 Generic Mouse                        id=17   [slave  pointer  (2)]
⎜   ↳ Logitech MX Ergo Multi-Device Trackball   id=18   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Video Bus                                 id=6    [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ Integrated_Webcam_HD: Integrate           id=9    [slave  keyboard (3)]
    ↳ Intel HID 5 button array                  id=12   [slave  keyboard (3)]
    ↳ Intel HID events                          id=13   [slave  keyboard (3)]
    ↳ Dell Privacy Driver                       id=14   [slave  keyboard (3)]
    ↳ Dell WMI hotkeys                          id=15   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=16   [slave  keyboard (3)]

$ uname -a
Linux Dell-G15-Special-Edition-5521 6.0.8-060008-generic #202211101901 SMP PREEMPT_DYNAMIC Thu Nov 10 20:44:03 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

我可以尝试什么来缩小发生此问题的范围?

我看过许多不同的帖子和问题,但建议却有限。

编辑 2023 年 9 月 20 日

我们现在有 8 台戴尔 G15,全部都是最新版本。所有电脑都有同样的问题。

运行 Windows 时不会出现该问题。

答案1

编辑 09/02/2024:在等待 Thinkpad 到货时,我已使用 intel_idle.max_cstate=2 内核选项(在 grub 配置中设置)将 C 状态限制为 C2。到目前为止,键盘没有问题...

编辑 18/01/2024:自从我发现按键释放的硬件中断被延迟后,我尝试了以下几种方法:

  • 消除中断平衡来自我的环境的服务
  • 专用一个核心仅有的键盘中断处理
  • 奖励:获得了 BIOS 更新(1.11.0),提升了嵌入式控制器固件版本

不幸的是,这些改变都没有什么作用。

编辑 09/01/2024:我已确认缺少按键释放的硬件中断

Jan  9 13:31:50 atoppi kernel: [ 9452.070032] i8042: [2362855] 1c <- i8042 (interrupt, 0, 1)
Jan  9 13:31:50 atoppi kernel: [ 9452.205121] i8042: [2362889] 9c <- i8042 (interrupt, 0, 1)
Jan  9 13:31:52 atoppi kernel: [ 9453.842970] i8042: [2363298] 1c <- i8042 (interrupt, 0, 1)
Jan  9 13:31:52 atoppi kernel: [ 9453.935991] i8042: [2363322] 9c <- i8042 (interrupt, 0, 1)
Jan  9 13:31:53 atoppi kernel: [ 9454.655751] i8042: [2363502] 1c <- i8042 (interrupt, 0, 1)

here is missing the "9c" (aka ENTER key release)
from this moment ENTER key is stuck

Jan  9 13:32:06 atoppi kernel: [ 9468.085395] i8042: [2366859] e0 <- i8042 (interrupt, 0, 1)
Jan  9 13:32:06 atoppi kernel: [ 9468.085590] i8042: [2366859] 2a <- i8042 (interrupt, 0, 1)
Jan  9 13:32:06 atoppi kernel: [ 9468.085760] i8042: [2366859] e0 <- i8042 (interrupt, 0, 1)
Jan  9 13:32:06 atoppi kernel: [ 9468.085946] i8042: [2366859] 48 <- i8042 (interrupt, 0, 1)

"9c" arrives after pressing other keys

Jan  9 13:32:06 atoppi kernel: [ 9468.098398] i8042: [2366862] 9c <- i8042 (interrupt, 0, 1)

编辑 26/12/2023:我测试了 i8042 驱动程序(处理键盘的 ps/2 接口的驱动程序)的几乎所有参数,但问题仍然存在。此时,要么是 Linux 驱动程序有问题,要么是硬件控制器有问题,我认为后者的可能性更大。固件更新可能可以解决问题,但祝你好运,试着向愚蠢的戴尔支持人员解释这个问题。

我要扔掉这台垃圾笔记本电脑,换一台 ThinkPad,再也不用考虑戴尔了。

编辑 20/12/2023:我在用 evtest 跟踪事件时写了单词“room”。突然,第二个“o”卡在了键盘上,所以我用“a”停止了重复循环。

我发现该问题是由于内核的“KeyRelease”事件延迟造成的

Event: time 1703089559.564161, type 4 (EV_MSC), code 4 (MSC_SCAN), value 13
Event: time 1703089559.564161, type 1 (EV_KEY), code 19 (KEY_R), value 1
Event: time 1703089559.564161, -------------- SYN_REPORT ------------
Event: time 1703089559.692291, type 4 (EV_MSC), code 4 (MSC_SCAN), value 13
Event: time 1703089559.692291, type 1 (EV_KEY), code 19 (KEY_R), value 0
Event: time 1703089559.692291, -------------- SYN_REPORT ------------
Event: time 1703089560.008009, type 4 (EV_MSC), code 4 (MSC_SCAN), value 18
Event: time 1703089560.008009, type 1 (EV_KEY), code 24 (KEY_O), value 1
Event: time 1703089560.008009, -------------- SYN_REPORT ------------
Event: time 1703089560.126559, type 4 (EV_MSC), code 4 (MSC_SCAN), value 18
Event: time 1703089560.126559, type 1 (EV_KEY), code 24 (KEY_O), value 0
Event: time 1703089560.126559, -------------- SYN_REPORT ------------
Event: time 1703089560.618210, type 4 (EV_MSC), code 4 (MSC_SCAN), value 18
Event: time 1703089560.618210, type 1 (EV_KEY), code 24 (KEY_O), value 1
Event: time 1703089560.618210, -------------- SYN_REPORT ------------
Event: time 1703089564.805921, type 4 (EV_MSC), code 4 (MSC_SCAN), value 1e
Event: time 1703089564.805921, type 1 (EV_KEY), code 30 (KEY_A), value 1
Event: time 1703089564.805921, -------------- SYN_REPORT ------------
Event: time 1703089564.818837, type 4 (EV_MSC), code 4 (MSC_SCAN), value 18
Event: time 1703089564.818837, type 1 (EV_KEY), code 24 (KEY_O), value 0
Event: time 1703089564.818837, -------------- SYN_REPORT ------------
Event: time 1703089564.870330, type 4 (EV_MSC), code 4 (MSC_SCAN), value 1e
Event: time 1703089564.870330, type 1 (EV_KEY), code 30 (KEY_A), value 0
Event: time 1703089564.870330, -------------- SYN_REPORT ------------

请注意,仅当 4 秒后按下字母“a”(值 1)时,第二个“o”才会被释放(值 0)。

编辑:不幸的是,即使采取了我下面提出的解决方法,这个问题在很长时间后仍然再次出现 :-(

我切换到 xfce 并将以下内核模块列入黑名单。从那时起,问题仍然存在(已编辑黑名单配置文件在下面/etc/modprobe.d):

blacklist dell_laptop
blacklist dell_wmi
blacklist dell_wmi_sysman
blacklist dell_wmi_ddv
blacklist dell_smbios
blacklist dell_wmi_descriptor

禁用这些模块后我没有遇到任何问题,所有硬件设备都可以工作并且电池与以前相同。

答案2

同样如此,使用 DELL Vostro 15 3510。

您可以通过使用外接 USB 键盘一段时间来确认这不是笔记本电脑键盘的问题。

这似乎是 Wayland 的问题,当我切换到 Xorg 时,这个问题就消失了。只需在登录屏幕中选择“Ubuntu on Xorg”(右下角的小齿轮)。

答案3

我的 Dell Vostro 15 3510 也遇到了同样的问题,我创建了一个解决方法脚本。我注意到,每当我按下 时,它都会在很短的时间内针对同一个键alt+f4触发大量press和事件。release

一些操作系统信息:

$ uname -a
Linux pc 6.5.0-14-generic #14-Ubuntu SMP PREEMPT_DYNAMIC Tue Nov 14 14:59:49 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 23.10
Release:        23.10
Codename:       mantic

我使用 KDE 和 X11。

我们先来看一下键盘设备id:

$ xinput list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ DELL0AB2:00 27C6:0D43 Mouse               id=8    [slave  pointer  (2)]
⎜   ↳ DELL0AB2:00 27C6:0D43 Touchpad            id=9    [slave  pointer  (2)]
⎜   ↳ PS/2 Generic Mouse                        id=15   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Video Bus                                 id=6    [slave  keyboard (3)]
    ↳ Power Button                              id=7    [slave  keyboard (3)]
    ↳ Intel HID 5 button array                  id=10   [slave  keyboard (3)]
    ↳ Intel HID events                          id=11   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=14   [slave  keyboard (3)]

在这种情况下14

↳ AT Translated Set 2 keyboard id=14 [slave keyboard (3)]

然后我们看看按下的键:

key press   64 
key press   70 
key release 64 
key release 70 
key press   70 
^[OSkey release 70 
key press   70 
^[OSkey release 70 
key press   70 
^[OSkey release 70 
key press   70 
^[OSkey release 70 
key press   70 
^[OSkey release 70 
key press   70 
^[OSkey release 70 
key press   70 
^[OSkey release 70 
key press   70 
^[OSkey release 70 
key press   70 
^[OSkey release 70 
key press   70 
^[OSkey release 70 
key press   70 
^[OSkey release 70 
key press   70 
^[OSkey release 70 
key press   70 
^[OSkey release 70 
key press   70 
^[OSkey release 70 
key press   70 
^[OSkey release 70 
key press   70 
^[OSkey release 70 
key press   70 
^[OSkey release 70 
key press   70 
^[OSkey release 70 
key press   70 
^[OSkey release 70 
key press   70 
^[OSkey release 70 
key press   70 
^[OSkey release 70 
key press   70 
^[OSkey release 70 
key press   70 
^[OSkey release 70 
key press   70 
^[OSkey press   37 
key release 70 
key press   70 
key release 70 
key press   70 
key release 70 
key press   70 
key release 70 
key press   70 
key release 70 
key press   70 
key release 70 
key press   70 
key release 70 
key press   70 
key release 70 
key press   70 
key release 70 
key press   70 
key release 70 
key press   70 
key release 70 
key press   70 
key release 70 
key press   70 
key press   54 
^C

首先我按下一些随机键,然后我打开一些窗口并用 alt+f4 ( 70) 关闭它们,然后它开始重复 alt+f4 的按下和释放事件。

因此,我所做的就是检测此行为并禁用并重新启用键盘,这样所有这些事件都会停止。我知道这完全不是一个可接受的解决方案,但我想不出其他任何办法。

首次安装xdotool

sudo apt install -y xdotool

然后将其保存在 .sh 文件中,例如script.sh

#!/bin/bash

export DISPLAY=":0"
keycode="70"
xinput="/usr/bin/xinput"
xdotool="/usr/bin/xdotool"
keyboard_name='AT Translated Set 2 keyboard'

xinput_keyboard_id=$($xinput list | grep "$keyboard_name" | grep -o 'id=[0-9]\+' | cut -d= -f2 | tr -d "\n")

if [ -z $xinput_keyboard_id ]; then
    >&2 echo "Error getting the device xinput id."
    exit 1
fi

release_alt_f4_key() {
    $xinput disable $xinput_keyboard_id
    $xinput enable $xinput_keyboard_id
    sleep 0.1
    $xdotool keyup $keycode
}

$xinput test $xinput_keyboard_id | while read line; do
    line=$(echo $line | tr -d '\r')
    if [[ $line =~ "key press $keycode" ]]; then
        now=$(date +%s.%N)
        if [[ -n "$last_ts" && $(bc <<< "$now - $last_ts < 1") -eq 1 ]] ; then
            release_alt_f4_key
        fi
        last_ts=$now
    fi
done

exit 0

请注意,您必须将 更改keyboard_name 为我们之前获得的键盘设备名称xinput list

然后使其可执行: chmod u+x script.sh

然后运行它: ./script.sh

或者您可以在后台运行它: nohup ./script.sh >/dev/null 2>&1 &

或者您可以安排它在每个操作系统启动时运行crontab -e

# m h  dom mon dow   command
@reboot sleep 10 && /home/user/script.sh

如果您想出更好的解决方案,请告诉我!

答案4

我也遇到这个问题两年了,这很烦人。我到处搜索,有些人似乎指出这是由于触摸板和键盘之间的交互不良造成的。不幸的是,在这台电脑上,触摸板是 i2c,无法禁用。

还有一些方法可以减少问题的发生。降低系统负载会有所帮助,例如,禁用声音守护进程“pipewire”似乎可以减少问题的发生。如果您有外接鼠标,在 Linux 中卸载驱动程序仍然会有所帮助:

rmmod i2c_hid_acpi i2c_hid

将 C 状态限制为 C2 的建议也有帮助,但这些解决方案都不能完全解决问题。

我无法在这台计算机上尝试其他操作系统。

相关内容