Help with the Archwiki process for 15are05 Elantech touchpad fix

Hello,

I am new to Linux and am trying to apply the fix for the ideapad 5 15 touchpad as laid out in the Archwiki page on the 15are05

However, I’m so new to Linux that I don’t understand what exactly I need to do. I read the section but don’t have the necessary background to do it.

Could someone please help me out?

1 Like

Please read this:

Please also read this:

Finally, please read this:

And then respond to this message and provide an inxi --admin --verbosity=7 --filter --no-host --width and the exact section in the arch Wiki where you’re stuck. :innocent:

Also, please copy-paste that output in-between 3 backticks ``` at the beginning and end of the code/text.

:+1:

P.S. If you enter a bit more details in your profile, we can also see which Desktop Environment you’re using, which CPU/GPU or Kernel, … you have without typing it every time

  • Thanks for those links! As far as my DE, it’s Gnome. I’ll get that stuff added into my profile ASAP.

  • As far as which part of the wiki I’m suck on, this link will take you to the correct section.

  • I don’t understand the 2nd sentence, but I assume what follows is a how-to.
    So when it says “Add i2c-ELAN0001:00 to the following locations:” I’m not sure what i2c-ELAN0001:00 is or how I should be adding it to those locations.

  • When I set up Manjaro, I tweaked the zsh prompt back to >>> by adding a line in a config file, so at first I thought a similar process would be used here.

  • When I found the first location, /sys/bus/i2c/drivers/elants_i2c/unbind and tried to open the file (as admin), it says

    Could not display, the file is of an unknown type".

  • Here are the results of my inxi:

System:
  Kernel: 5.10.30-1-MANJARO x86_64 bits: 64 compiler: gcc v: 10.2.0 
  parameters: BOOT_IMAGE=/boot/vmlinuz-5.10-x86_64 
  root=UUID=fac091e3-e040-4fcb-8c1c-7f6f0e047ed9 rw quiet 
  resume=UUID=b5036e3d-7c40-4c34-b45b-89b2b1ca26fa udev.log_priority=3 
  Desktop: GNOME 3.38.4 tk: GTK 3.24.28 wm: gnome-shell dm: GDM 40.0 
  Distro: Manjaro Linux base: Arch Linux 
Machine:
  Type: Laptop System: LENOVO product: 81YQ v: IdeaPad 5 15ARE05 
  serial: <filter> Chassis: type: 10 v: IdeaPad 5 15ARE05 serial: <filter> 
  Mobo: LENOVO model: LNVNB161216 v: SDK0J40709WIN serial: <filter> 
  UEFI: LENOVO v: E7CN36WW date: 11/23/2020 
Battery:
  ID-1: BAT0 charge: 54.2 Wh (90.9%) condition: 59.6/57.0 Wh (104.6%) 
  volts: 12.7 min: 11.5 model: SMP L19M3PF6 type: Li-poly serial: <filter> 
  status: Discharging 
  Device-1: hidpp_battery_0 model: Logitech Wireless Mouse MX Master 3 
  serial: <filter> charge: 50% (should be ignored) rechargeable: yes 
  status: N/A 
  Device-2: hidpp_battery_1 model: Logitech Wireless Mouse MX Master 3 
  serial: <filter> charge: 55% (should be ignored) rechargeable: yes 
  status: Discharging 
Memory:
  RAM: total: 15.07 GiB used: 2.14 GiB (14.2%) 
  RAM Report: permissions: Unable to run dmidecode. Root privileges required. 
CPU:
  Info: 8-Core model: AMD Ryzen 7 4700U with Radeon Graphics bits: 64 
  type: MCP arch: Zen 2 family: 17 (23) model-id: 60 (96) stepping: 1 
  microcode: 8600106 cache: L2: 4 MiB bogomips: 31940 
  Speed: 1397 MHz min/max: 1400/2000 MHz boost: enabled Core speeds (MHz): 
  1: 1397 2: 1397 3: 1397 4: 1397 5: 1397 6: 1397 7: 1397 8: 1400 
  Flags: 3dnowprefetch abm adx aes aperfmperf apic arat avic avx avx2 bmi1 
  bmi2 bpext cat_l3 cdp_l3 clflush clflushopt clwb clzero cmov cmp_legacy 
  constant_tsc cpb cpuid cqm cqm_llc cqm_mbm_local cqm_mbm_total cqm_occup_llc 
  cr8_legacy cx16 cx8 de decodeassists extapic extd_apicid f16c flushbyasid 
  fma fpu fsgsbase fxsr fxsr_opt ht hw_pstate ibpb ibrs ibs irperf lahf_lm 
  lbrv lm mba mca mce misalignsse mmx mmxext monitor movbe msr mtrr mwaitx 
  nonstop_tsc nopl npt nrip_save nx osvw overflow_recov pae pat pausefilter 
  pclmulqdq pdpe1gb perfctr_core perfctr_llc perfctr_nb pfthreshold pge pni 
  popcnt pse pse36 rdpid rdpru rdrand rdseed rdt_a rdtscp rep_good sep sha_ni 
  skinit smap smca smep ssbd sse sse2 sse4_1 sse4_2 sse4a ssse3 stibp succor 
  svm svm_lock syscall tce topoext tsc tsc_scale umip v_vmsave_vmload vgif 
  vmcb_clean vme vmmcall wbnoinvd wdt xgetbv1 xsave xsavec xsaveerptr xsaveopt 
  xsaves 
  Vulnerabilities: Type: itlb_multihit status: Not affected 
  Type: l1tf status: Not affected 
  Type: mds status: Not affected 
  Type: meltdown status: Not affected 
  Type: spec_store_bypass 
  mitigation: Speculative Store Bypass disabled via prctl and seccomp 
  Type: spectre_v1 
  mitigation: usercopy/swapgs barriers and __user pointer sanitization 
  Type: spectre_v2 mitigation: Full AMD retpoline, IBPB: conditional, IBRS_FW, 
  STIBP: disabled, RSB filling 
  Type: srbds status: Not affected 
  Type: tsx_async_abort status: Not affected 
Graphics:
  Device-1: AMD Renoir vendor: Lenovo driver: amdgpu v: kernel bus-ID: 03:00.0 
  chip-ID: 1002:1636 class-ID: 0300 
  Device-2: Acer Integrated Camera type: USB driver: uvcvideo bus-ID: 1-3:2 
  chip-ID: 5986:212b class-ID: 0e02 
  Display: wayland server: X.org 1.20.11 compositor: gnome-shell driver: 
  loaded: amdgpu note: n/a (using device driver) - try sudo/root display-ID: 0 
  resolution: <missing: xdpyinfo> 
  OpenGL: renderer: AMD RENOIR (DRM 3.40.0 5.10.30-1-MANJARO LLVM 11.1.0) 
  v: 4.6 Mesa 21.0.2 direct render: Yes 
Audio:
  Device-1: AMD vendor: Lenovo driver: snd_hda_intel v: kernel bus-ID: 03:00.1 
  chip-ID: 1002:1637 class-ID: 0403 
  Device-2: AMD Raven/Raven2/FireFlight/Renoir Audio Processor vendor: Lenovo 
  driver: N/A alternate: snd_pci_acp3x, snd_rn_pci_acp3x bus-ID: 03:00.5 
  chip-ID: 1022:15e2 class-ID: 0480 
  Device-3: AMD Family 17h HD Audio vendor: Lenovo driver: snd_hda_intel 
  v: kernel bus-ID: 03:00.6 chip-ID: 1022:15e3 class-ID: 0403 
  Sound Server-1: ALSA v: k5.10.30-1-MANJARO running: yes 
  Sound Server-2: JACK v: 0.125.0 running: no 
  Sound Server-3: PulseAudio v: 14.2 running: yes 
  Sound Server-4: PipeWire v: 0.3.25 running: no 
Network:
  Device-1: Intel Wi-Fi 6 AX200 driver: iwlwifi v: kernel bus-ID: 01:00.0 
  chip-ID: 8086:2723 class-ID: 0280 
  IF: wlp1s0 state: up mac: <filter> 
  IP v4: <filter> type: dynamic noprefixroute scope: global 
  broadcast: <filter> 
  IP v6: <filter> type: dynamic noprefixroute scope: global 
  IP v6: <filter> type: noprefixroute scope: link 
  WAN IP: <filter> 
Bluetooth:
  Device-1: Intel AX200 Bluetooth type: USB driver: btusb v: 0.8 bus-ID: 3-3:3 
  chip-ID: 8087:0029 class-ID: e001 
  Report: rfkill ID: hci0 rfk-id: 3 state: up address: see --recommends 
Logical:
  Message: No logical block device data found. 
RAID:
  Message: No RAID data found. 
Drives:
  Local Storage: total: 476.94 GiB used: 96.98 GiB (20.3%) 
  SMART Message: Required tool smartctl not installed. Check --recommends 
  ID-1: /dev/nvme0n1 maj-min: 259:0 vendor: SK Hynix model: HFM512GDHTNI-87A0B 
  size: 476.94 GiB block-size: physical: 512 B logical: 512 B speed: 31.6 Gb/s 
  lanes: 4 rotation: SSD serial: <filter> rev: 11010C00 temp: 25.9 C 
  scheme: GPT 
  Message: No optical or floppy data found. 
Partition:
  ID-1: / raw-size: 460.06 GiB size: 451.77 GiB (98.20%) 
  used: 96.98 GiB (21.5%) fs: ext4 dev: /dev/nvme0n1p2 maj-min: 259:2 
  label: N/A uuid: fac091e3-e040-4fcb-8c1c-7f6f0e047ed9 
  ID-2: /boot/efi raw-size: 300 MiB size: 299.4 MiB (99.80%) 
  used: 296 KiB (0.1%) fs: vfat dev: /dev/nvme0n1p1 maj-min: 259:1 
  label: NO_LABEL uuid: FACB-31C9 
Swap:
  Kernel: swappiness: 60 (default) cache-pressure: 100 (default) 
  ID-1: swap-1 type: partition size: 16.58 GiB used: 0 KiB (0.0%) priority: -2 
  dev: /dev/nvme0n1p3 maj-min: 259:3 label: N/A 
  uuid: b5036e3d-7c40-4c34-b45b-89b2b1ca26fa 
Unmounted:
  Message: No unmounted partitions found. 
USB:
  Hub-1: 1-0:1 info: Full speed (or root) Hub ports: 4 rev: 2.0 
  speed: 480 Mb/s chip-ID: 1d6b:0002 class-ID: 0900 
  Device-1: 1-3:2 info: Acer Integrated Camera type: Video driver: uvcvideo 
  interfaces: 2 rev: 2.0 speed: 480 Mb/s power: 500mA chip-ID: 5986:212b 
  class-ID: 0e02 
  Hub-2: 2-0:1 info: Full speed (or root) Hub ports: 2 rev: 3.1 speed: 10 Gb/s 
  chip-ID: 1d6b:0003 class-ID: 0900 
  Hub-3: 3-0:1 info: Full speed (or root) Hub ports: 4 rev: 2.0 
  speed: 480 Mb/s chip-ID: 1d6b:0002 class-ID: 0900 
  Device-1: 3-1:2 info: Logitech Unifying Receiver type: Keyboard,Mouse,HID 
  driver: logitech-djreceiver,usbhid interfaces: 3 rev: 2.0 speed: 12 Mb/s 
  power: 98mA chip-ID: 046d:c52b class-ID: 0300 
  Device-2: 3-3:3 info: Intel AX200 Bluetooth type: Bluetooth driver: btusb 
  interfaces: 2 rev: 2.0 speed: 12 Mb/s power: 100mA chip-ID: 8087:0029 
  class-ID: e001 
  Device-3: 3-4:4 info: Elan Micro ELAN:Fingerprint type: <vendor specific> 
  driver: N/A interfaces: 1 rev: 2.0 speed: 12 Mb/s power: 100mA 
  chip-ID: 04f3:0c58 class-ID: 0000 
  Hub-4: 4-0:1 info: Full speed (or root) Hub ports: 2 rev: 3.1 speed: 10 Gb/s 
  chip-ID: 1d6b:0003 class-ID: 0900 
Sensors:
  System Temperatures: cpu: 33.9 C mobo: 0 C gpu: amdgpu temp: 33.0 C 
  Fan Speeds (RPM): N/A 
Info:
  Processes: 253 Uptime: 4m wakeups: 6 Init: systemd v: 247 tool: systemctl 
  Compilers: gcc: N/A Packages: pacman: 1040 lib: 312 Shell: Zsh v: 5.8 
  running-in: gnome-terminal inxi: 3.3.04 
1 Like

So you probably only read the summary of the [HowTo] become a Manjaro power user when you're a wizard at Windows but a N00b at Manjaro / Linux and not the actual FHS documentation that was linked there, :grin: because that states that the /sys filesystem is special: it’s actually the kernel itself you’re messing with and that you need to be extra careful what you do there.

So to ensure we don’t leave you with an unbootable system, please provide the following information ¹:

cat /sys/bus/i2c/drivers/elants_i2c/bind
cat /sys/bus/i2c/drivers/i2c_hid/bind 

If the first one has the actual word i2c-ELAN0001:00 ² in there, it’ll be safe to:

  • add the actual word i2c-ELAN0001:00 to the /sys/bus/i2c/drivers/elants_i2c/unbind file contents.
  • Add i2c-ELAN0001:00 to the /sys/bus/i2c/drivers/i2c_hid/bind location (and now it makes sense right???)

So I’m not telling you how to that yet, as I’m still holding your hand and want to verify myself before making you do potentially dangerous things.

:man_shrugging: :stuck_out_tongue_winking_eye:

Note 1: cat means catalog. I.E. “Show the contents of that file”. For more info: man cat
Note 2: i2c-ELAN0001:00 is the actual hardware description of your ElanTech Touchpad.

You’re right, I did indeed skip over the FHS documentation, but I’ve now saved it and will make my way through it.

I am getting the following message when I run

sudo cat /sys/bus/i2c/drivers/i2c_hid/bind

Results in:

cat: /sys/bus/i2c/drivers/i2c_hid/bind: Permission denied

with similar results for the other place. I originally ran without sudo and got the exact same result with both files.

1 Like

Weird.

Let’s check the directory tree if you even have that device, so what’s the output of:

sudo tree /sys/bus/i2c/drivers/i2c_hid/

Please?

The results are:

/sys/bus/i2c/drivers/i2c_hid
├── bind
├── module -> ../../../../module/i2c_hid
├── uevent
└── unbind

1 directory, 3 files

and here’s the same command for elants_i2c:

/sys/bus/i2c/drivers/elants_i2c
├── bind
├── i2c-ELAN0001:00 -> ../../../../devices/platform/AMDI0010:01/i2c-1/i2c-ELAN0001:00
├── module -> ../../../../module/elants_i2c
├── uevent
└── unbind

2 directories, 3 files
1 Like

That looks good too!

Did you do a chmod on /sys/?

If not:

ls --all -l --classify --human-readable /sys/bus/i2c/drivers/i2c_hid/bind

please?

Here is the result:

--w------- 1 root root 4.0K Apr 28 11:07 /sys/bus/i2c/drivers/i2c_hid/bind

and the other file:

--w------- 1 root root 4.0K Apr 28 11:08 /sys/bus/i2c/drivers/elants_i2c/bind

1 Like

Write only! So forget what I told you about the cat: you cannot read these

OK, so to change the parameters,

Add i2c-ELAN0001:00 to the following locations:

/sys/bus/i2c/drivers/elants_i2c/unbind
/sys/bus/i2c/drivers/i2c_hid/bind

do a:

sudo -s #this will make you "root"
echo "i2c-ELAN0001:00" | tee --append > /sys/bus/i2c/drivers/elants_i2c/unbind
echo "i2c-ELAN0001:00" | tee --append > /sys/bus/i2c/drivers/i2c_hid/bind

Breaking this down:

echo "i2c-ELAN0001:00"

just “prints” the string “i2c-ELAN0001:00” to STDOUT (standard output)

| 

“pipes” this into the following command

tee reads the string “i2c-ELAN0001:00” from STDIN through the pipe and --appends it to the files you want!

Et voilà.

:+1:

Hello,

unfortunately, this is still giving me the following:

zsh: /sys/bus/i2c/drivers/elants_i2c/unbind: Permission denied

1 Like

Try again using bash as that’s what I’m on? (Never used zsh, so know nothing about its syntax)

:thinking:

Thank you for your time and patience.

Bash is outputting the same Permission denied message. I did a clean install just in case (i hadn’t yet transferred any of my files over so it was a piece of cake), and all the commands from this thread output the exact same. I used the minimal install of the manjaro gnome version, so perhaps there’s something in the full install that I’m missing?

1 Like

To become root:

sudo -s

then do the above again without sudo

::thinking:

Worked like a charm! Thank you so much for your help.

1 Like

Sorry about all the time it took, but although I’m an old fart wise now, I remember being young and stupid not so wise and you’re on your way to become old and wise now…

:joy: :older_adult:

P.S. I’ve edited my answer to include the “Become root” now so the next person that has the same problem as you can just jump to the solution without all the tutorials! :wink:

Thanks. I’m sorry to say that this story doesn’t have a happy ending, as the changes did not hold through a shutdown. Powered my laptop up after running some errands and the touchpad is unresponsive again. Should I repeat the fix?

I don’t have your hardware, so can’t vouch for the solution you followed: I just helped you translate TechnoBabble to Human…

:sob:

However you can convert all commands to a script and then make that script execute every time at boot through a SystemD service. (As SystemD services run as root, forget about the sudo -s stuff)

Google DDG on how to create a ZSH script as you know I’m on BASH, so can’t really help you with that…

:grin:

probably …

but maybe you just forgot the “blacklist” step of the procedure?

otherwise, if it doesn’t work after the repeat of the steps and then a reboot

to make it “stick” I guess this could help:

In that Arch Wiki there is a link at the end of the section re the touchpad:

Lenovo IdeaPad 5 15are05 - ArchWiki

it says:
Tip: https://bugzilla.kernel.org/show_bug.cgi?id=207759

right above it, comments 17 and 19 to that bug report are mentioned

If you go there, there are all the commands listed
as well as a ready made systemd service script, ready made to copy and paste and use
(so it appears - obviously I can’t test that)

comment #17

HTH

1 Like

Ah, of course. I forgot that this was but the first step of the procedure.

So the two remaining steps are:

First, load the h2c_hid kernel module.
After that, all that’s left is to blacklist elants_i2c.

Since I don’t have a touchscreen, it doesn’t look like I will have to worry about the script fix, though it’s helpful to know it’s there. Could you help me through these last two steps? For the first step:

modprobe i2c_hid

Then, blacklisting seems to be a multistep process. From here, Create a .conf file inside /etc/modprobe.d/ and append a line for each module you want to blacklist, using the blacklist keyword. should be taken care of via:

echo "blacklist elants_i2c" > /etc/modprobe.d/touchpad-fix.conf    

Then, it says to

Remember to add that .conf file to the FILES array in /etc/mkinitcpio.conf if you do not have the modconf hook in your HOOKS array (e.g. you have deviated from the default configuration), and once you have blacklisted the modules regenerate the initramfs, and reboot afterwards.

and it’s this that I’ve again hit a wall of understanding with. Here’s a less for that file on my machine:

# vim:set ft=sh
# MODULES
# The following modules are loaded before any boot hooks are
# run.  Advanced users may wish to specify all system modules
# in this array.  For instance:
#     MODULES=(piix ide_disk reiserfs)
MODULES=""

# BINARIES
# This setting includes any additional binaries a given user may
# wish into the CPIO image.  This is run last, so it may be used to
# override the actual binaries included by a given hook
# BINARIES are dependency parsed, so you may safely ignore libraries
BINARIES=()

# FILES
# This setting is similar to BINARIES above, however, files are added
# as-is and are not parsed in any way.  This is useful for config files.
FILES=""

# HOOKS
# This is the most important setting in this file.  The HOOKS control the
# modules and scripts added to the image, and what happens at boot time.
# Order is important, and it is recommended that you do not change the
# order in which HOOKS are added.  Run 'mkinitcpio -H <hook name>' for
# help on a given hook.
# 'base' is _required_ unless you know precisely what you are doing.
# 'udev' is _required_ in order to automatically load modules
# 'filesystems' is _required_ unless you specify your fs modules in MODULES
# Examples:
##   This setup specifies all modules in the MODULES setting above.
##   No raid, lvm2, or encrypted root is needed.
#    HOOKS=(base)
#
##   This setup will autodetect all modules for your system and should
##   work as a sane default
#    HOOKS=(base udev autodetect block filesystems)
#
##   This setup will generate a 'full' image which supports most systems.
##   No autodetection is done.
#    HOOKS=(base udev block filesystems)
#
##   This setup assembles a pata mdadm array with an encrypted root FS.
##   Note: See 'mkinitcpio -H mdadm' for more information on raid devices.
#    HOOKS=(base udev block mdadm encrypt filesystems)
#
##   This setup loads an lvm2 volume group on a usb device.
#    HOOKS=(base udev block lvm2 filesystems)
#
##   NOTE: If you have /usr on a separate partition, you MUST include the
#    usr, fsck and shutdown hooks.
HOOKS="base udev autodetect modconf block keyboard keymap resume filesystems fsck"

# COMPRESSION
# Use this to compress the initramfs image. By default, gzip compression
# is used. Use 'cat' to create an uncompressed image.
#COMPRESSION="gzip"
#COMPRESSION="bzip2"
#COMPRESSION="lzma"
#COMPRESSION="xz"
#COMPRESSION="lzop"
#COMPRESSION="lz4"
#COMPRESSION="zstd"

# COMPRESSION_OPTIONS
# Additional options for the compressor
#COMPRESSION_OPTIONS=()

Thank you in advance!