IdeaPad 5 15are05 - elan 触摸板在 20.04 和 18.04 上无法使用

IdeaPad 5 15are05 - elan 触摸板在 20.04 和 18.04 上无法使用

昨天买了一台联想 IdeaPad 5 15are05,装了 Ubuntu 20.04,问题是触摸板不能用。

我也尝试过 18.04 甚至 Debian 10,但它唯一能运行的操作系统是 Windows。

我浏览了很多论坛,但没找到任何有用的信息。不过,我确实找到了一些命令,我​​想你会对这些输出感兴趣

cat /proc/bus/input/devices

I: Bus=0018 Vendor=0000 Product=0000 Version=0000
N: Name="Elan Touchscreen"
P: Phys=
S: Sysfs=/devices/platform/AMDI0010:01/i2c-1/i2c-ELAN0001:00/input/input4
U: Uniq=
H: Handlers=mouse0 event4 
B: PROP=2
B: EV=b
B: KEY=400 0 0 0 0 0
B: ABS=661800001000003

尽管上面写着“触摸屏”,但我确实知道这是我的触摸板。我怎么知道的?好吧,当我使用 进入终端ctrl+alt+f3并尝试使用触摸板时,它会输出以下内容:

elants_i2c i2c-ELAN0001:00: unknown packet 0e 00 04 0303 表示我正在触摸它。该值会根据不同的操作而改变,例如,在“释放”触摸板时,它会变成 01。

这意味着触摸板列在 ELAN0001 下,“触摸屏”也列在该下。我认为说它是触摸屏并不奇怪,因为它们非常相似。

xinput输出如下:

⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ NEWMEN1500 Mouse Consumer Control         id=13   [slave  pointer  (2)]
⎜   ↳ NEWMEN1500 Mouse                          id=15   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Power Button                              id=8    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=11   [slave  keyboard (3)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Power Button                              id=6    [slave  keyboard (3)]
    ↳ NEWMEN1500 Mouse Consumer Control         id=14   [slave  keyboard (3)]
    ↳ NEWMEN1500 Mouse                          id=12   [slave  keyboard (3)]
    ↳ Integrated Camera: Integrated C           id=9    [slave  keyboard (3)]
    ↳ Ideapad extra buttons                     id=10   [slave  keyboard (3)]

触摸板应该列在虚拟核心指针下,但事实并非如此。

我真的很想知道如何解决这个问题,因为我需要触摸板来工作而且我不想买一台新的笔记本电脑,所以请帮帮我!

答案1

似乎无法将elants_i2c驱动程序列入黑名单,因为它是 Ubuntu 的内置内核模块:

stefano@stefano-IdeaPad-5-15ARE05:~$ modinfo elants-i2c
name:           elants_i2c
filename:       (builtin)
license:        GPL
description:    Elan I2c Touchscreen driver
author:         Scott Liu <[email protected]>

所以还有一种比编译内核更快的方法。只需创建一个 SystemD 单元,如下所示:

stefano@stefano-IdeaPad-5-15ARE05:~$ cat /etc/systemd/system/touchpadfix.service 
[Unit]
Description=Fix touchpad issue by binding correct driver

[Service]
ExecStart=/usr/local/bin/touchpadfix
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

并创建/usr/local/bin/touchpadfix如下文件

stefano@stefano-IdeaPad-5-15ARE05:~$ cat  /usr/local/bin/touchpadfix
#!/bin/bash
modprobe i2c_hid
echo "i2c-ELAN0001:00" > /sys/bus/i2c/drivers/elants_i2c/unbind
echo "i2c-ELAN0001:00" > /sys/bus/i2c/drivers/i2c_hid/bind

然后使其可执行,使用以下命令启用并启动该单元:

chmod +x /usr/local/bin/touchpadfix
sudo systemctl daemon-reload
sudo systemctl enable --now touchpadfix.service

触摸板应该立即开始工作!

来源:https://wiki.archlinux.org/index.php/Lenovo_IdeaPad_5_15are0这给了我们解绑绑定修复和dl3it此帖子的用户https://bugzilla.kernel.org/show_bug.cgi?id=207759#c17

答案2

我找到了解决方案,非常感谢 dl3itIdeapad 5-15ARE05:触摸屏不工作 | 联想论坛。(注意:上面说的是触摸屏,但我猜那只是触摸板的名称。它工作正常。)

问题在于内核对驱动程序做了一些错误操作。要修复此问题,您必须安装主线内核并自行配置。

首先,通过在命令行上执行此操作来安装依赖项:

sudo apt-get install libncurses-dev flex bison openssl libssl-dev dkms libelf-dev libudev-dev libpci-dev libiberty-dev autoconf

然后,从源(通过 kernel.org)下载内核 5.6.x 或 5.7.x(x 可以是任何整数,我使用的是 5.7.1,并且已在 5.6.14 和 5.7.0-rc7 上进行了测试)。内核网站,单击[tarball]您想要的内核。

像提取其他文件一样提取所有内容.tar.gz

然后,在命令行中移动到linux-5.6.x或目录。linux-5.7.x

执行sudo make menuconfig并导航至设备驱动程序 → 输入设备支持 → 触摸屏 → Elan eKTH I2C 触摸屏

m到达那里后,按回车键然后输入将星号更改为m

之后,使用左右箭头将底部的选定选项更改为“保存”,然后点击Enter。然后,您需要将其另存为.config(默认为)。

现在仍然在同一个目录中,执行此命令:

sudo make -jx && sudo make modules_install -jx && sudo make install -jx

(更改x为 CPU 的线程数量。省略此选项将导致此操作花费很长时间。)

这需要一些时间,但完成后,您需要确保您的 PC 将在新内核上启动。为此,请执行:

sudo update-initramfs -c -k <kernel-version>

<kernel-version>(例如,更改为您刚刚安装的内核版本5.7.1。)

然后,通过执行以下命令修复 grub 配置:

sudo update-grub

然后重新启动,你的触摸板就可以正常工作了!

注意:我使用过但之前没有提及的网站:

答案3

几乎 100% 正确,这是解决方法。

打开终端并使用您喜欢的文本编辑器打开文件/etc/default/grub进行编辑,例如

sudo mousepad /etc/default/grub

编辑开头的行GRUB_CMDLINE_LINUX,使其内容如下:

GRUB_CMDLINE_LINUX="initcall_blacklist=elants_i2c_driver_init"

保存,退出鼠标垫或您选择的文本编辑器,然后运行此命令来写入配置:

sudo update-grub

无论之前还是之后添加附加参数都quiet splash无所谓。

请记住,这是一种使触摸板工作的解决方法;触摸板指示器图标将无法正常工作。

答案4

更简单的解决方案是:添加 blacklist elants_i2c/etc/modprobe.d/unneeded-modules.conf(您必须创建它),保存并重新启动。在相同的触摸板和 Manjaro 上工作。供应商=04f3 产品=3140 版本=0100

相关内容