Microsoft Surface Laptop 2 Touchscreen on Linux
Getting the touchscreen to work on Garuda / Arch Linux
I recently came across the Garuda Linux SwayFX variant. It looked nice so I decided to give it a try on some older Microsoft Surface Laptops. I've never used Arch Linux or a variant before. I like the look and feel of the Garuda SwayFX distribution. After loading the Surface-Linux kernel, everything worked just find on a Surface Laptop 5, but not on the Surface Laptop 2's.
After comparing the Garuda / Arch system to a working Surface Laptop 2 running Ubuntu Sway Remix 24.04, I noticed the kernel modules mei and mei_me weren't loaded on the Garuda / Arch system. When I manually used modprobe to load the two modules the touchscreen began to work immediately.
It took me a while to track it down, but I finally found that these two modules were blacklisted in the file shown below. After commenting those two lines out and rebooting, the touchscreen started working on boot.
# File: /usr/lib/modprobe.d/noime.conf
# Intel VPRO remote access technology driver.
# 202040704 - Comment these two lines out. They're needed for Surface Laptop 2 touchscreen to work
#blacklist mei
#blacklist mei_me
With those two modules no longer blacklisted the IPTS devices finally showed up in the input devices list.
╭─user@local in ~ took 2ms
╰─λ lsmod | grep mei
mei_hdcp 28672 0
mei_pxp 20480 0
mei_me 57344 3
mei 200704 7 mei_hdcp,mei_pxp,mei_me,ipts
╭─user@local in ~ took 9ms
╰─λ grep IPTS /proc/bus/input/devices
N: Name="IPTS 1B96:0979 Touchscreen"
N: Name="IPTS 1B96:0979"
N: Name="IPTS Touch"
N: Name="IPTS Stylus"