Touchpad source is unconditionally grabbed by the default CompositeDevice, blocking libinput/host access
Summary
On Bazzite-Deck (SteamOS-style input stack), InputPlumber v0.79.0 unconditionally attaches the kernel touchpad (/dev/input/event7 for HTIX5288:00 0911:5288) as a touchpad source on the default composite device, even on non-Steam-Deck hardware where the user has no Deck-style touchpad rights. This drives libinput into a state where it cannot read the original touchpad and only sees an InputPlumber-generated uinput device.
That breaks KDE Plasma's "Touchpad Settings" page, makes kcminputrc changes silently ignored, and prevents OpenGamepadUI from forwarding any user-tunable parameters (sensitivity, tap-to-click, scroll method, etc.) to Steam Big Picture.
Reproduction steps
- Boot Bazzite-Deck (44.20260908) on GPD Win Mini 2024 (DMI
product_name=G1617-01, sys_vendor=GPD, cpu_vendor=AuthenticAMD).
- Launch
gamescope-session-plus ogui-steam.
- Run
libinput list-devices from a Plasma user session — HTIX5288 touchpad is missing.
- Inspect InputPlumber over DBus:
$ dbus-send --system --print-reply \
--dest=org.shadowblip.InputPlumber \
/org/shadowblip/InputPlumber/CompositeDevice0 \
org.freedesktop.DBus.Properties.GetAll \
string:org.shadowblip.Input.CompositeDevice
SourceDevicePaths:
/dev/hidraw1
/dev/hidraw4
/dev/input/event4
/dev/input/event17
/dev/input/event7 <-- HTIX5288 touchpad
TargetDevices:
/org/shadowblip/InputPlumber/devices/target/touchpad0
/org/shadowblip/InputPlumber/devices/target/gamepad0
/org/shadowblip/InputPlumber/devices/target/mouse0
/org/shadowblip/InputPlumber/devices/target/keyboard0
The kernel touchpad is held by InputPlumber's default composite device and re-emitted only as the virtual InputPlumber Touchpad uinput device (/devices/virtual/input/inputXX, ABS touchpad). The host libinput (and therefore kcminputrc / Plasma Touchpad settings) cannot read it.
- Open Steam Big Picture. The touchpad cursor drifts, two-finger scrolling is broken; the only knob that helps is
Steam → Settings → Controller → Touchpad → Cursor Sensitivity.
Expected behavior
On non-Steam-Deck hardware (or on any system whose DMI is not Galileo/Jupiter), InputPlumber should either:
- Pass the kernel touchpad through unchanged so that libinput on the host KDE/Wayland session can manage it, OR
- Emit a uinput touchpad device but also keep a libinput-readable passthrough of the original event node, OR
- Honour a config flag (e.g. an
ignore_classes: [touchpad] option in default.yaml, or a udev tag like ENV{BAZZITE_TOUCHPAD_PASSTHROUGH}="1").
Suggested fix
In rootfs/usr/share/inputplumber/profiles/default.yaml, the matches: [] is empty — the profile matches every machine. Add either:
- A DMI allow-list so that the default composite only auto-manages gamepad/keyboard on Steam Deck-style hardware, or
- A
source_device class filter that skips DeviceClass=touchpad unless a Deck-style controller (Valve 28de:1205) is paired, or
- A new schema field
options.ignore_classes: ["touchpad"] so users can opt out per profile.
Workaround today:
# /etc/inputplumber/devices.d/zz-99-touchpad-passthrough.yaml
version: 1
kind: CompositeDevice
name: Local — touchpad passthrough
matches:
- dmi_data:
product_name: G1617-01
sys_vendor: GPD
source_devices:
- group: gamepad
udev:
properties:
- name: ID_INPUT_JOYSTICK
value: "1"
sys_name: "event*"
subsystem: input
- group: keyboard
evdev:
name: AT Translated Set 2 keyboard
handler: event*
options:
auto_manage: true
target_devices:
- mouse
- keyboard
- gamepad
After restarting InputPlumber, manually dbus-send --print-reply --dest=org.shadowblip.InputPlumber /org/shadowblip/InputPlumber/CompositeDevice0 org.shadowblip.Input.CompositeDevice.Stop and add a udev rule tagging the kernel touchpad with TAG+="uaccess" so libinput can finally read it. This is fragile and should not be required.
Environment
- InputPlumber 0.79.0
- Bazzite 44.20260908 (
ghcr.io/ublue-os/bazzite-deck:stable)
- Decky Loader 3.2.8
- OpenGamepadUI (current packaged)
- Steam client 1788652215
- Kernel 6.16.x
- Touchpad: HTIX5288:00 0911:5288 (i2c, 67x48 mm, multitouch, USB ID 0911:5288)
Touchpad source is unconditionally grabbed by the default CompositeDevice, blocking libinput/host access
Summary
On Bazzite-Deck (SteamOS-style input stack),
InputPlumberv0.79.0 unconditionally attaches the kernel touchpad (/dev/input/event7for HTIX5288:00 0911:5288) as atouchpadsource on thedefaultcomposite device, even on non-Steam-Deck hardware where the user has no Deck-style touchpad rights. This drives libinput into a state where it cannot read the original touchpad and only sees an InputPlumber-generated uinput device.That breaks KDE Plasma's "Touchpad Settings" page, makes
kcminputrcchanges silently ignored, and prevents OpenGamepadUI from forwarding any user-tunable parameters (sensitivity, tap-to-click, scroll method, etc.) to Steam Big Picture.Reproduction steps
product_name=G1617-01,sys_vendor=GPD,cpu_vendor=AuthenticAMD).gamescope-session-plus ogui-steam.libinput list-devicesfrom a Plasma user session — HTIX5288 touchpad is missing.The kernel touchpad is held by InputPlumber's default composite device and re-emitted only as the virtual
InputPlumber Touchpaduinput device (/devices/virtual/input/inputXX, ABS touchpad). The host libinput (and thereforekcminputrc/ Plasma Touchpad settings) cannot read it.Steam → Settings → Controller → Touchpad → Cursor Sensitivity.Expected behavior
On non-Steam-Deck hardware (or on any system whose DMI is not
Galileo/Jupiter), InputPlumber should either:ignore_classes: [touchpad]option indefault.yaml, or a udev tag likeENV{BAZZITE_TOUCHPAD_PASSTHROUGH}="1").Suggested fix
In
rootfs/usr/share/inputplumber/profiles/default.yaml, thematches: []is empty — the profile matches every machine. Add either:source_deviceclass filter that skipsDeviceClass=touchpadunless a Deck-style controller (Valve 28de:1205) is paired, oroptions.ignore_classes: ["touchpad"]so users can opt out per profile.Workaround today:
After restarting InputPlumber, manually
dbus-send --print-reply --dest=org.shadowblip.InputPlumber /org/shadowblip/InputPlumber/CompositeDevice0 org.shadowblip.Input.CompositeDevice.Stopand add a udev rule tagging the kernel touchpad withTAG+="uaccess"so libinput can finally read it. This is fragile and should not be required.Environment
ghcr.io/ublue-os/bazzite-deck:stable)