Ubuntu – Elantech touchpad does not work (i2c-hid)

acerdriverselantechtouchpad

TL;DR; WTF!?

The substance of this question is in the title and in bold. Some touchpads, designed for Win8/10, behave erratically with the Linux i2c-hid kernel module.


There are a lot of questions related to Elantech touchpads not working. This question is not a duplicate. Well, it is, but it isn't. Basically, these touchpads are super finicky and have given a lot of people problems under a variety of conditions.

Sometimes it works or doesn't work when I reboot and the mouse cursor does or doesn't appear. Sometimes it stops working when I'm typing on page 37 of a particular document in Abiword, but page 23 when using LibreOffice. Sometimes it becomes extra finicky when using even-numbered kernel updates, but super stable with odd-numbered updates. Same for any Ubuntu releases ending in .04 or .10 … or that occur on a prime-numbered year, or when the sum of the digits of the version number is prime (1+8+0+4 = 13). Often it stops working when it "knows" I'm doing something important, exactly 666 ms before I am about to save my work.

In short, all of these details are just random noise. They have nothing to do with whether the touchpad works. It is just a horrible device designed to make my life miserable. But I can't tear my laptop apart to replace it!

This is a meta-question intended to get at the underlying problem with these touchpads, which is they are all on laptops that ran Windows 8/10.

Is there is no ritual, no magic, that can make this touchpad cooperate with operating systems christened outside the MS Temple? What praises can I utter? What blessings can I seek? To make this touchpad work?

Best Answer

TL;DR; WTF!?

  1. MS created a new protocol, HID over I2C. Neither MS nor touchpad manufacturers actually follow the specs.

  2. As a result, many touchpads that require the new protocol don't work well with the Linux kernel module i2c-hid. Sometimes kernel updates can resolve the problem (or cause it to return).

  3. If possible, disable HID over I2C. On some computers, the setting may be in BIOS. But on other computers, the setting may changed only from within Windows.

  4. Sometimes rebooting or switching the touchpad on and off can help. Sometimes detaching the touchpad, as on an MS Surface or Acer Switch Alpha, can get it working again.


The underlying problem is HID over I2C, an input device protocol created by Microsoft and first used in Windows 8. Because device manufacturers often don't read, or perhaps intentionally don't follow, specs, Microsoft has put a lot of little quirks into the driver to make it work. Or perhaps, it's the other way around? Microsoft has a lot of quirks in the driver so manufacturers cannot follow specs if they are to expect their devices to work (on Windows, until there is one of those "Creator" updates -- so named because they create new, never-before-seen bugs).

On Linux, the kernel module that handles this protocol is i2c-hid. People have varying degrees of success getting the touchpad to work by changing or patching kernels because fixing the driver for one device can break another device. If you find a kernel for which this device works and have no other problems, freeze that version immediately. Never uninstall new kernels unless you have two or more consecutive kernels for which the touchpad consistently works because the touchpad has quantum circuits that activate quarky behavior when it detects the number of stable kernels you have installed is less than or greater than 1.4142, plus-or-minus a counter-anti-counterclockwise spin, which is a single spin in three independent directions, simultaneously. (Such puzzles are not for us to question.)

A potential solution is to turn off HID over I2C in BIOS. There is no consistent name for this setting. It may be tied to some other setting, like EFI. It might be doable only from within Windows. It may be impossible. Consider performing a ritual in which plenty of alcohol is imbibed before attempting this. If this setting can be disabled, the psmouse kernel module will take care of the touchpad.

But sometimes you have to turn on HID over I2C. The nature of these devices is they may not work properly with the psmouse module. Sometimes it is helpful to perform ancient rituals in which sacred, so-called four-letter, words are shouted and while the computer is rebooted or the touchpad on-off switch is pressed multiple times in a pattern that is pleasing to the gods of computation. If that does not work, the hopeless sometimes receive answers to their prayers upon ripping the touchpad from the rest of the computer.

We must be vigilant in these trying times. As we continue our Exodus, may our prayers be heard so that we may someday see freedom from the reign of MS.

Related Question