Summary
On Tiger Lake Surface devices using ithc (such as the Surface Pro 7+ and Surface Pro 8), the kernel driver creates raw input nodes under /dev/input/ alongside the clean virtual devices created by iptsd (IPTSD Virtual Touchscreen / IPTSD Virtual Stylus).
These raw HID nodes declare a 16:9 geometry (which does not match the 3:2 panel on Surface Pro devices) and can cause libinput to receive duplicate touch events or incorrectly scaled raw inputs alongside iptsd.
Proposed Udev Rule
To ensure libinput ignores the raw ithc nodes and exclusively processes the calibrated virtual devices from iptsd, the following udev rule can be installed (e.g. in 50-iptsd.rules.in or as a standalone configuration):
# Hide raw Intel Touch Host Controller HID input nodes from libinput
SUBSYSTEM=="input", ATTRS{name}=="Intel Touch Host Controller*", \
ENV{ID_INPUT}="", ENV{ID_INPUT_TOUCHSCREEN}="", ENV{ID_INPUT_TABLET}=""
Verification
- Tested on Microsoft Surface Pro 7+ (Fedora 44, kernel 6.19.8-surface, iptsd).
- Result: Raw input nodes are ignored by libinput while
IPTSD Virtual Touchscreen and IPTSD Virtual Stylus continue working with 100% precision and correct 3:2 aspect ratio.
Summary
On Tiger Lake Surface devices using
ithc(such as the Surface Pro 7+ and Surface Pro 8), the kernel driver creates raw input nodes under/dev/input/alongside the clean virtual devices created byiptsd(IPTSD Virtual Touchscreen/IPTSD Virtual Stylus).These raw HID nodes declare a 16:9 geometry (which does not match the 3:2 panel on Surface Pro devices) and can cause libinput to receive duplicate touch events or incorrectly scaled raw inputs alongside
iptsd.Proposed Udev Rule
To ensure libinput ignores the raw
ithcnodes and exclusively processes the calibrated virtual devices fromiptsd, the following udev rule can be installed (e.g. in50-iptsd.rules.inor as a standalone configuration):Verification
IPTSD Virtual TouchscreenandIPTSD Virtual Styluscontinue working with 100% precision and correct 3:2 aspect ratio.