我在这里遇到了一个奇怪的问题——集成的突触鼠标/橡胶鼠标在 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 之后会看到运行该命令的鼠标,而在它不存在之前。
我已经有了与内核团队一起填补 bug 的建议。
该怎么办?
制造商和型号的相关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
有趣的是,在搜索这个 bug 的变体,包括 Lenovo、Alps 和 Ultranav,我在 Arch Linux wiki libinput的帖子中发现了一篇建议内核参数的文章
然后我做了一些测试,发现在我的情况下,将内核参数添加
i8042.reset
到文件中并运行就足够GRUB_CMDLINE_LINUX_DEFAULT
了:/etc/default/grub
之后,我取出电池尝试复制错误。机器死机重启Linux后,Ultranav/Elantech内置鼠标已经被识别并开始工作,无需先启动Windows 10。
我会说这是一个内核错误。
与其他笔记本类似,Lenovo Thinkpad 需要添加到 Linux 内核中的 i8042 设备重置列表中,其中有一个需要 i8042 芯片组重置的家庭机器列表,以便持续检测其 Elantech TouchPad。
我在找到这些错误条目后发现了这个后来的要求 输入:i8042 - 将联想 LaVie Z 添加到 i8042 重置列表和输入:i8042:将联想 ThinkPad L460 添加到 i8042 重置列表
从 Linux 内核源代码的视觉检查来看,将 Lenovo ThinkPad E560 添加到 i8042 重置列表的源代码也没有出现在最新的 4.19-rc2 内核源代码中。
所以为了添加它,我写了一个简单的 diff/patch 可以用来代替 grub 中的 i8042.reset 内核参数:
PS。根据@StephenKitt 的建议,我尝试将这篇文章作为 Linux 内核错误报告发送到 [email protected]