Skip to content

default composite device grabs kernel touchpad on non-Deck hardware, blocking libinput #712

Description

@wzzfather

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

  1. Boot Bazzite-Deck (44.20260908) on GPD Win Mini 2024 (DMI product_name=G1617-01, sys_vendor=GPD, cpu_vendor=AuthenticAMD).
  2. Launch gamescope-session-plus ogui-steam.
  3. Run libinput list-devices from a Plasma user session — HTIX5288 touchpad is missing.
  4. 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.

  1. 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:

  1. A DMI allow-list so that the default composite only auto-manages gamepad/keyboard on Steam Deck-style hardware, or
  2. A source_device class filter that skips DeviceClass=touchpad unless a Deck-style controller (Valve 28de:1205) is paired, or
  3. 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)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions