Wednesday, August 2, 2017
linux administration - tips, notes and projects
After recently upgrading my Dell XPS 13 w/Touchscreen to Fedora 26, the touchpad suddenly stopped working upon resuming from sleep mode. It was reproduced 100% of the time, and required a complete restart in order to get the touchpad working again.
There have been several forum posts and bug reports regarding others experiencing these exact same symptoms, so I figured I’d share a hacky workaround until the bug is fixed upstream.
If your system is similar to mine and has a touch screen, the i2c_hid module needs to be reloaded in order to properly enable both the touchpad and touch screen.
To confirm this workaround fix will work on your system, wake your system up from a sleep and confirm the touchpad is non-responsive.
Then open a terminal and run:
sudo rmmod i2c_hid
sudo modprobe i2c_hid
If this worked, your touchpad should have sprung back to life, and your dmesg output should look similar to this:
[ 4011.246256] rmi4_f01 rmi4-01.fn01: found RMI device, manufacturer: Synaptics, product: s3203, fw id: 1522295
[ 4011.310335] input: Synaptics s3203 as /devices/pci0000:00/INT33C3:00/i2c-8/i2c-DLL060A:00/0018:06CB:2734.0003/input/input941
[ 4011.311499] hid-rmi 0018:06CB:2734.0003: input,hidraw1: I2C HID v1.00 Pointer [DLL060A:00 06CB:2734] on i2c-DLL060A:00
[ 4043.232194] rmi4_f01 rmi4-02.fn01: found RMI device, manufacturer: Synaptics, product: s3203, fw id: 1522295
[ 4043.297788] input: Synaptics s3203 as /devices/pci0000:00/INT33C3:00/i2c-8/i2c-DLL060A:00/0018:06CB:2734.0004/input/input942
[ 4043.298722] hid-rmi 0018:06CB:2734.0004: input,hidraw1: I2C HID v1.00 Pointer [DLL060A:00 06CB:2734] on i2c-DLL060A:00
If it did not work, your system might use a different module.
Try this instead:
sudo rmmod rmi_smbus
sudo modprobe rmi_smbus
In order to avoid having to remove and reload the module every time you resume your system, I created a simple systemd BASH script which will invoke the commands for you automatically and seamlessly enable your touchpad upon waking up.
If you are running a systemd based system, simply run these commands (replacing the module name with the one that worked above):
echo 'if [ "$1" = "post" ] && exec rmmod i2c_hid ; modprobe i2c_hid' > /usr/lib/systemd/system-sleep/touchpad-fix.sh
chmod +x /usr/lib/systemd/system-sleep/touchpad-fix.sh
Now go ahead and put your system to sleep, wait 5 seconds, and attempt to resume.
Your touchpad should now be working normally again.
Note: I recommend removing this script every few months and running a dnf upgrade to see if the bug fix has been implemented natively upstream yet.
Hah, what an odd bug! This worked for me on a Dell XPS 13 though, thanks!
For me, it was the rmi_smbus module, that I had to reload. Thanks for the tip!