鼠标垫在 Lenovo Thinkpad 中无法使用

鼠标垫在 Lenovo Thinkpad 中无法使用

我在这里遇到了一个奇怪的问题 - 集成的突触鼠标/橡胶鼠标在 Linux 中不起作用。

集成鼠标/鼠标垫仅在 Windows 首先激活它们时才起作用。我可以在 Linux 中进行多次重启,并且它们确实可以正常工作。只要笔记本电脑没有断电,它们就会被识别。

如果笔记本电脑耗尽所有电池,我将只能再次使用鼠标垫/鼠标如果我首先在 Windows 中启动

因此,我可以在 Linux 运行时轻松地取出电池来重现该错误。这样鼠标垫就不会被识别了直到我再次启动 Windows。因此,当硬件处于未知(初始化)状态时,开源驱动程序似乎无法识别设备。

我在 2016 Lenovo ThinkPad E560、i7-6500U CPU @ 2.50GHz、16GB RAM 和 SSD 磁盘中使用 Debian 9/Antix 17.1。

radeon.modeset=0该机器有双卡,但是我在内核参数中停用了 radeon 。所以相关参数为:

$ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation HD Graphics 520 (rev 07)

我的xserver-xorg相关包是:

xserver-xorg - 7.7+19
xserver-xorg-core - 1.19.2-1.0nosystemd2
xserver-xorg-input-libinput - 0.23.0-2
xserver-xorg-input-synaptics - 1.9.0-1+b1
xserver-xorg-video-intel - 2.99.917+git20161206-1

我已经尝试运行 Antix 存储库中现有的 Debian 内核, 4.10.5-antix.3-amd64-smp并且4.18.4-antix.1-amd64-smp症状没有任何变化;正如 @StephenKitt 告诉我的那样,新版本的突触处理发生了变化。

我当前的内核参数是:

$ cat /proc/cmdline 
BOOT_IMAGE=/boot/vmlinuz-4.18.4-antix.1-amd64-smp root=UUID=00c17984-859f-4197-8bd8-b346ddd092bd ro iommu=1 intel_iommu=on iommu=pt ipv6.disable=1 intremap=no_x2apic_optout radeon.modeset=0

我还按照网上的一些建议将 xorg 中的鼠标垫处理从 xserver-xorg-input-synaptics 更改为 xserver-xorg-input-libinput,安装后者,然后执行以下操作:

 cd /etc/X11/xorg.conf.d
 ln -s /usr/share/X11/xorg.conf.d/40-libinput.conf 

症状保持不变。

我还进入 Windows 10 的设备管理器查看设备/驱动程序的名称,它是一个名为“Ultranav”的双鼠标鼠标垫/键盘橡胶东西。libinput-list-devices也将其命名为“AlpsPS/2 ALPS DualPoint TouchPad”。也有人在联想的其他型号中也称这款鼠标为Elantech。

我也安装了libinput-tools调试情况。有趣的是,libinput-list-devices在运行 Windows 后运行该命令,可以看到鼠标,而在运行之前,鼠标是不存在的。

我已经向内核团队提出了填补错误的建议。

该怎么办?

dmidecode制造商和型号的相关数据是:

# dmidecode -s system-manufacturer
LENOVO
# dmidecode -s system-product-name
20EV000YPG
# dmidecode -s system-version
ThinkPad E560

libunput-list-devices启动 Windows 10 之前和之后的差异。

$ diff libunput-list-devices-before_windows.txt after-windows.txt
2c2
< Kernel:           /dev/input/event8
---
> Kernel:           /dev/input/event10
20c20
< Kernel:           /dev/input/event10
---
> Kernel:           /dev/input/event12
38c38
< Kernel:           /dev/input/event7
---
> Kernel:           /dev/input/event9
128c128
< Kernel:           /dev/input/event18
---
> Kernel:           /dev/input/event20
163,164c163,164
< Device:           ThinkPad Extra Buttons
< Kernel:           /dev/input/event9
---
> Device:           AlpsPS/2 ALPS DualPoint Stick
> Kernel:           /dev/input/event6
165a166,202
> Seat:             seat0, default
> Capabilities:     pointer 
> Tap-to-click:     n/a
> Tap-and-drag:     n/a
> Tap drag lock:    n/a
> Left-handed:      disabled
> Nat.scrolling:    disabled
> Middle emulation: disabled
> Calibration:      n/a
> Scroll methods:   *button
> Click methods:    none
> Disable-w-typing: n/a
> Accel profiles:   flat *adaptive
> Rotation:         n/a
> 
> Device:           AlpsPS/2 ALPS DualPoint TouchPad
> Kernel:           /dev/input/event7
> Group:            7
> Seat:             seat0, default
> Size:             97.50x53.87mm
> Capabilities:     pointer 
> Tap-to-click:     disabled
> Tap-and-drag:     enabled
> Tap drag lock:    disabled
> Left-handed:      disabled
> Nat.scrolling:    disabled
> Middle emulation: disabled
> Calibration:      n/a
> Scroll methods:   *two-finger edge 
> Click methods:    *button-areas clickfinger 
> Disable-w-typing: enabled
> Accel profiles:   none
> Rotation:         n/a
> 
> Device:           ThinkPad Extra Buttons
> Kernel:           /dev/input/event11
> Group:            8

答案1

有趣的是,在搜索该 bug 的不同单词(包括 Lenovo、Alps 和 Ultranav)时,我在 Arch Linux wiki 的帖子中发现了一篇建议内核参数的文章库输入

根本未检测到触摸板

注意:不是 libinput 问题。 Touchpad_Synaptics#No_Multi-touch_in_some_Elantech_touchpads 中链接了参数的说明,这比说“尝试其中一些”要好得多。

如果未检测到触摸板设备并根本将其显示为设备,则可能的解决方案可能是使用这些内核参数中的一个或多个。

i8042.noloop i8042.nomux i8042.nopnp i8042.reset

然后我做了一些测试,发现在我的情况下,将内核参数添加i8042.reset到文件GRUB_CMDLINE_LINUX_DEFAULT/etc/default/grub并运行就足够了:

update-grub2

之后我取出电池尝试重现该错误。机器死机并重新启动 Linux 后,Ultranav/Elantech 内置鼠标已首先被识别并工作,无需先启动 Windows 10。

我想说这属于内核错误。

与其他笔记本类似,Lenovo Thinkpad 需要添加到 Linux 内核中的 i8042 重置设备列表中,其中有一个需要 i8042 芯片组重置的家庭机器列表,以便始终检测其 Elantech TouchPad。

我在发现这些错误条目后发现了这个后来的要求 输入:i8042 - 将 Lenovo LaVie Z 添加到 i8042 重置列表输入:i8042:将 Lenovo ThinkPad L460 添加到 i8042 重置列表

从Linux内核源代码的目视检查来看,最新的4.19-rc2内核源代码中也没有将Lenovo ThinkPad E560添加到i8042重置列表的源代码。

因此,为了添加它,我编写了一个简单的 diff/patch,可以使用它来代替 grub 中的 i8042.reset 内核参数:

--- drivers/input/serio/i8042-x86ia64io.h.old   2018-09-06 04:53:36.460003164 +0100
+++ drivers/input/serio/i8042-x86ia64io.h   2018-09-06 04:57:16.833465129 +0100
@@ -655,6 +655,14 @@
            DMI_MATCH(DMI_PRODUCT_NAME, "P65xRP"),
        },
    },
+   {
+                /* Lenovo ThinkPad E560 */
+                .matches = {
+                        DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
+                        DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad E560"),
+                },
+        },
+
    { }
 };

附言。按照 @StephenKitt 的建议,我尝试将这篇文章作为 Linux 内核错误报告发送至[电子邮件受保护]

相关内容