昨天买了一台联想 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 03
03 表示我正在触摸它。该值会根据不同的操作而改变,例如,在“释放”触摸板时,它会变成 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