Summary
The built-in touchpad behaves erratically on a Lenovo Legion Go S running factory SteamOS.
The hardware itself appears to work: when inputplumber.service is stopped, the physical mouse/touchpad path works as a normal pointer. The problem appears when InputPlumber claims/blocks the physical wch.cn Legion Go S Mouse and wch.cn Legion Go S Touchpad devices and routes them through the virtual target.
Device
- Device: Lenovo Legion Go S
- APU: AMD Ryzen Z1 Extreme
- RAM/storage: 32 GB / 1 TB
- OS: factory SteamOS
- Touchpad: SIPO
- Touchpad firmware: v21
- InputPlumber version:
0.77.2
- Package:
inputplumber 0.77.2-2
Current input device mapping
On my system, the relevant devices currently appear as:
/dev/input/event3 -> wch.cn Legion Go S Mouse
/dev/input/event4 -> wch.cn Legion Go S Keyboard
/dev/input/event5 -> wch.cn Legion Go S UNKNOWN
/dev/input/event6 -> wch.cn Legion Go S Touchpad
/dev/input/event8 -> Legion Go S
/dev/input/by-id includes:
usb-wch.cn_Legion_Go_S_-event-if02 -> ../event5
usb-wch.cn_Legion_Go_S_-if01-event-joystick -> ../event8
usb-wch.cn_Legion_Go_S_-if01-joystick -> ../js0
usb-wch.cn_Legion_Go_S_-if02-event-mouse -> ../event3
usb-wch.cn_Legion_Go_S_-if02-mouse -> ../mouse0
What happens
InputPlumber detects the Legion Go S profile and creates the composite device, but then blocks the physical mouse/touchpad evdev devices:
Blocking input events from /dev/input/event6
Blocking input events from /dev/input/event3
The output capabilities include trackpad haptics:
Output capabilities changed: {ForceFeedbackUpload, Haptics(TrackpadLeft), Haptics(TrackpadRight), LED(Brightness), ForceFeedbackErase, LED(Color), ForceFeedback}
After this, the built-in touchpad behavior is unreliable/erratic in SteamOS / Steam Input. In Desktop Mode it appears to function correctly, in Gaming Mode the behaviour is erratical, random detection, stops working after suspension or reset.
Expected behavior
The built-in SIPO touchpad should consistently work as a Steam Input / Steam Deck-style trackpad after boot and resume.
Important observation
If I stop InputPlumber:
sudo systemctl stop inputplumber.service
the physical touchpad/mouse path works as a normal pointer.
This suggests the hardware and libinput side are functional. The problem appears to be in the InputPlumber handling/translation path for the Legion Go S wch.cn mouse/touchpad devices.
Additional context
This may be related to the same general class of issue as #584 / #602, although my issue is not specifically the Legion Go 2 mouse wheel issue. In my case, the physical mouse/touchpad devices are detected and then blocked by InputPlumber, but the virtual output path does not behave reliably.
Attached logs
I attached a tarball containing:
system-info.txt
pacman-Qkk-inputplumber.txt
inputplumber-status.txt
inputplumber-systemd-unit.txt
inputplumber-journal-current-boot.txt
input-devices.txt
udevadm-*
dmesg-filtered-input.txt
inputplumber-devices.txt
inputplumber-device0-info.txt
50-legion_go_s.yaml
- InputPlumber udev/hwdb/dbus/polkit files
I can run extra commands or test a branch/build on the Legion Go S if needed.
legion-go-s-inputplumber-issue-20260610-095306.tar.gz
Summary
The built-in touchpad behaves erratically on a Lenovo Legion Go S running factory SteamOS.
The hardware itself appears to work: when
inputplumber.serviceis stopped, the physical mouse/touchpad path works as a normal pointer. The problem appears when InputPlumber claims/blocks the physicalwch.cn Legion Go S Mouseandwch.cn Legion Go S Touchpaddevices and routes them through the virtual target.Device
0.77.2inputplumber 0.77.2-2Current input device mapping
On my system, the relevant devices currently appear as:
/dev/input/event3 -> wch.cn Legion Go S Mouse
/dev/input/event4 -> wch.cn Legion Go S Keyboard
/dev/input/event5 -> wch.cn Legion Go S UNKNOWN
/dev/input/event6 -> wch.cn Legion Go S Touchpad
/dev/input/event8 -> Legion Go S
/dev/input/by-idincludes:usb-wch.cn_Legion_Go_S_-event-if02 -> ../event5
usb-wch.cn_Legion_Go_S_-if01-event-joystick -> ../event8
usb-wch.cn_Legion_Go_S_-if01-joystick -> ../js0
usb-wch.cn_Legion_Go_S_-if02-event-mouse -> ../event3
usb-wch.cn_Legion_Go_S_-if02-mouse -> ../mouse0
What happens
InputPlumber detects the Legion Go S profile and creates the composite device, but then blocks the physical mouse/touchpad evdev devices:
Blocking input events from /dev/input/event6
Blocking input events from /dev/input/event3
The output capabilities include trackpad haptics:
Output capabilities changed: {ForceFeedbackUpload, Haptics(TrackpadLeft), Haptics(TrackpadRight), LED(Brightness), ForceFeedbackErase, LED(Color), ForceFeedback}
After this, the built-in touchpad behavior is unreliable/erratic in SteamOS / Steam Input. In Desktop Mode it appears to function correctly, in Gaming Mode the behaviour is erratical, random detection, stops working after suspension or reset.
Expected behavior
The built-in SIPO touchpad should consistently work as a Steam Input / Steam Deck-style trackpad after boot and resume.
Important observation
If I stop InputPlumber:
sudo systemctl stop inputplumber.service
the physical touchpad/mouse path works as a normal pointer.
This suggests the hardware and libinput side are functional. The problem appears to be in the InputPlumber handling/translation path for the Legion Go S
wch.cnmouse/touchpad devices.Additional context
This may be related to the same general class of issue as #584 / #602, although my issue is not specifically the Legion Go 2 mouse wheel issue. In my case, the physical mouse/touchpad devices are detected and then blocked by InputPlumber, but the virtual output path does not behave reliably.
Attached logs
I attached a tarball containing:
system-info.txtpacman-Qkk-inputplumber.txtinputplumber-status.txtinputplumber-systemd-unit.txtinputplumber-journal-current-boot.txtinput-devices.txtudevadm-*dmesg-filtered-input.txtinputplumber-devices.txtinputplumber-device0-info.txt50-legion_go_s.yamlI can run extra commands or test a branch/build on the Legion Go S if needed.
legion-go-s-inputplumber-issue-20260610-095306.tar.gz