Good afternoon, how are you?
For some time now, I’ve had a problem with my computer’s touchpad. I investigated the matter, accessing files, researching, reading logs, understanding device communication protocols - particularly HID - and the I2C connection.
My touchpad connects via the I2C port, and the gestures I’m used to in Gnome work via the HID protocol. In the Linux world, there are a lot of complaints about this protocol, mainly because it’s a Microsoft specification that manufacturers don’t bother to follow - Microsoft’s error is surprising.
I analysed some journalctl log files from 6 different outages, covering up to 5 minutes before the outage - at least 300 lines each. There were many processes in common, but nothing that caught my eye. Using the command ls /dev/input/
and udevadm info
I was able to see that the same input - the touchpad - had 4 events associated with it. Separated by two, mouseA and eventC are listed as belonging to the parent device called mouse, mouseB and eventD are listed as belonging to the device called touchpad. There are very few differences between them, in fact the most noticeable difference, which persists on power off, is the name.
Using evtest
, I could see that when the touchpad is working properly, the touchpad event - eventD - is responding; when it stops working, gets heavier, or the gestures don’t work, eventC starts receiving the inputs and is not connected to the multitouch driver. At the moment, restarting the hid_multitouch
or i2c_hid_acpi
kernel modules works randomly, sometimes requiring 5 restarts. Enabling and disabling the touchpad stopped working a long time ago.
The i2c_hid_acpi
module, i2c_hid
and are responsible for communicating the hid protocol over i2c. While hid_multitouch
is a driver responsible for detecting gestures sent via the hid protocol. The touchpad never stops sending information.
I’ve tried adding mouse to the udev
rules, but with the name being the only difference and my inexperience with the feature, I must not be doing it right. Essentially, I want to prevent the existence of the mouse and the events associated with it. I’ve tried various approaches, including creating rules in `/etc/udev/rules.d/', but none have worked so far. The other option I know of is to remove the device as a whole, but that would also remove the touchpad. If you have any advice, I’d be grateful.
Thanks for your attention.