Dell XPS13 9333 needs pressure threshold quirks
I have an older model Dell XPS13 Developer Edition (model 9333) with an s3203 clickpad. This clickpad is not getting LIBINPUT_PROP_BUTTONPAD
by default like the docs say it should, as of libinput 1.10.
“A clickpad is always marked with the INPUT_PROP_BUTTONPAD property”
-- https://wayland.freedesktop.org/libinput/doc/latest/clickpad_softbuttons.html
Additionally, the default pressure thresholds are a little bit too high for my tastes, so I'm including my overrides. And since you might get complaints that the clickpad is too fast in Wayland (“and please make it work like Xorg synaptics!”), I've attached some GNOME settings I use in the form of a pasteable. Apologies for the infodump.
Info you need
Reproducers and examples below.
You quite reasonably ask for...
a virtual description of your input device, see Recording devices with evemu. This is the most important piece of information, do not forget it!
$ sudo evemu-record
[sudo] password for andrewc:
Available devices:
/dev/input/event0: AT Translated Set 2 keyboard
/dev/input/event1: Synaptics s3203
/dev/input/event2: SYNAPTICS Synaptics Large Touch Screen
/dev/input/event3: Power Button
/dev/input/event4: Lid Switch
/dev/input/event5: Power Button
/dev/input/event6: DELL Wireless hotkeys
/dev/input/event7: HDA Digital PCBeep
/dev/input/event8: HDA Intel PCH Headphone Mic
/dev/input/event9: Video Bus
/dev/input/event10: Dell WMI hotkeys
/dev/input/event11: HDA Intel HDMI HDMI/DP,pcm=3
/dev/input/event12: HDA Intel HDMI HDMI/DP,pcm=7
/dev/input/event13: HDA Intel HDMI HDMI/DP,pcm=8
/dev/input/event14: Integrated_Webcam_HD: Integrate
/dev/input/event15: PS/2 Generic Mouse
Select the device event number [0-15]: 1
# EVEMU 1.3
# Kernel: 4.16.0-2-amd64
# DMI: dmi:bvnDellInc.:bvrA08:bd08/31/2015:svnDellInc.:pnXPS139333:pvr:rvnDellInc.:rn0D13CR:rvrA00:cvnDellInc.:ct8:cvr0.1:
# Input device name: "Synaptics s3203"
# Input device ID: bus 0x18 vendor 0x6cb product 0x2734 version 0x100
# Size in mm: 96x58
# Supported events:
# Event type 0 (EV_SYN)
# Event code 0 (SYN_REPORT)
# Event code 1 (SYN_CONFIG)
# Event code 2 (SYN_MT_REPORT)
# Event code 3 (SYN_DROPPED)
# Event code 4 ((null))
# Event code 5 ((null))
# Event code 6 ((null))
# Event code 7 ((null))
# Event code 8 ((null))
# Event code 9 ((null))
# Event code 10 ((null))
# Event code 11 ((null))
# Event code 12 ((null))
# Event code 13 ((null))
# Event code 14 ((null))
# Event code 15 (SYN_MAX)
# Event type 1 (EV_KEY)
# Event code 272 (BTN_LEFT)
# Event code 325 (BTN_TOOL_FINGER)
# Event code 328 (BTN_TOOL_QUINTTAP)
# Event code 330 (BTN_TOUCH)
# Event code 333 (BTN_TOOL_DOUBLETAP)
# Event code 334 (BTN_TOOL_TRIPLETAP)
# Event code 335 (BTN_TOOL_QUADTAP)
# Event type 3 (EV_ABS)
# Event code 0 (ABS_X)
# Value 2347
# Min 0
# Max 4070
# Fuzz 0
# Flat 0
# Resolution 42
# Event code 1 (ABS_Y)
# Value 2302
# Min 0
# Max 2472
# Fuzz 0
# Flat 0
# Resolution 42
# Event code 24 (ABS_PRESSURE)
# Value 0
# Min 0
# Max 255
# Fuzz 0
# Flat 0
# Resolution 0
# Event code 47 (ABS_MT_SLOT)
# Value 0
# Min 0
# Max 4
# Fuzz 0
# Flat 0
# Resolution 0
# Event code 48 (ABS_MT_TOUCH_MAJOR)
# Value 0
# Min 0
# Max 15
# Fuzz 0
# Flat 0
# Resolution 0
# Event code 49 (ABS_MT_TOUCH_MINOR)
# Value 0
# Min 0
# Max 15
# Fuzz 0
# Flat 0
# Resolution 0
# Event code 52 (ABS_MT_ORIENTATION)
# Value 0
# Min 0
# Max 1
# Fuzz 0
# Flat 0
# Resolution 0
# Event code 53 (ABS_MT_POSITION_X)
# Value 0
# Min 0
# Max 4070
# Fuzz 0
# Flat 0
# Resolution 42
# Event code 54 (ABS_MT_POSITION_Y)
# Value 0
# Min 0
# Max 2472
# Fuzz 0
# Flat 0
# Resolution 42
# Event code 55 (ABS_MT_TOOL_TYPE)
# Value 0
# Min 0
# Max 2
# Fuzz 0
# Flat 0
# Resolution 0
# Event code 57 (ABS_MT_TRACKING_ID)
# Value 0
# Min 0
# Max 65535
# Fuzz 0
# Flat 0
# Resolution 0
# Event code 58 (ABS_MT_PRESSURE)
# Value 0
# Min 0
# Max 255
# Fuzz 0
# Flat 0
# Resolution 0
# Properties:
# Property type 0 (INPUT_PROP_POINTER)
# Property type 2 (INPUT_PROP_BUTTONPAD)
N: Synaptics s3203
I: 0018 06cb 2734 0100
P: 05 00 00 00 00 00 00 00
B: 00 0b 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 01 00 00 00 00 00
B: 01 20 e5 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 01 00 00 00 00 00 00 00 00
B: 02 00 00 00 00 00 00 00 00
B: 03 03 00 00 01 00 80 f3 06
B: 04 00 00 00 00 00 00 00 00
B: 05 00 00 00 00 00 00 00 00
B: 11 00 00 00 00 00 00 00 00
B: 12 00 00 00 00 00 00 00 00
B: 14 00 00 00 00 00 00 00 00
B: 15 00 00 00 00 00 00 00 00
B: 15 00 00 00 00 00 00 00 00
A: 00 0 4070 0 0 42
A: 01 0 2472 0 0 42
A: 18 0 255 0 0 0
A: 2f 0 4 0 0 0
A: 30 0 15 0 0 0
A: 31 0 15 0 0 0
A: 34 0 1 0 0 0
A: 35 0 4070 0 0 42
A: 36 0 2472 0 0 42
A: 37 0 2 0 0 0
A: 39 0 65535 0 0 0
A: 3a 0 255 0 0 0
################################
# Waiting for events #
################################
the output from udevadm info, see udev information for the device.
$ sudo udevadm info /dev/input/event1
[sudo] password for andrewc:
P: /devices/pci0000:00/INT33C3:00/i2c-0/i2c-DLL060A:00/0018:06CB:2734.0001/input/input4/event1
N: input/event1
S: input/by-path/platform-INT33C3:00-event-mouse
E: DEVLINKS=/dev/input/by-path/platform-INT33C3:00-event-mouse
E: DEVNAME=/dev/input/event1
E: DEVPATH=/devices/pci0000:00/INT33C3:00/i2c-0/i2c-DLL060A:00/0018:06CB:2734.0001/input/input4/event1
E: ID_INPUT=1
E: ID_INPUT_HEIGHT_MM=58
E: ID_INPUT_TOUCHPAD=1
E: ID_INPUT_WIDTH_MM=96
E: ID_PATH=platform-INT33C3:00
E: ID_PATH_TAG=platform-INT33C3_00
E: ID_SERIAL=noserial
E: LIBINPUT_DEVICE_GROUP=18/6cb/2734:i2c-DLL060A:00
E: MAJOR=13
E: MINOR=65
E: SUBSYSTEM=input
E: USEC_INITIALIZED=10410310
the vendor model number of your laptop (e.g. "Lenovo Thinkpad T440s")
Dell XPS13 Developer edition, model 9333.
and the content of
/sys/class/dmi/id/modalias
.
$ cat /sys/class/dmi/id/modalias
dmi:bvnDellInc.:bvrA08:bd08/31/2015:svnDellInc.:pnXPS139333:pvr:rvnDellInc.:rn0D13CR:rvrA00:cvnDellInc.:ct8:cvr0.1:
run the
touchpad-edge-detectior
tool (provided by libevdev) and verify that the ranges and sizes it prints match the touchpad (up to 5mm difference is ok)
$ touchpad-edge-detectior
No command 'touchpad-edge-detectior' found, did you mean:
Command 'touchpad-edge-detector' from package 'libevdev-tools' (main)
touchpad-edge-detectior: command not found
$ sudo touchpad-edge-detector 99x61 /dev/input/event1
Touchpad Synaptics s3203 on /dev/input/event1
Move one finger around the touchpad to detect the actual edges
Kernel says: x [0..4070], y [0..2472]
Touchpad sends: x [14..4053], y [37..2463] -^C
Touchpad size as listed by the kernel: 96x58mm
User-specified touchpad size: 99x61mm
Calculated ranges: 4039/2426
Suggested udev rule:
# <Laptop model description goes here>
evdev:name:Synaptics s3203:dmi:bvnDellInc.:bvrA08:bd08/31/2015:svnDellInc.:pnXPS139333:pvr:rvnDellInc.:rn0D13CR:rvrA00:cvnDellInc.:ct8:cvr0.1:*
EVDEV_ABS_00=14:4053:41
EVDEV_ABS_01=37:2463:40
EVDEV_ABS_35=14:4053:41
EVDEV_ABS_36=37:2463:40
Bug: device is not being marked as a clickpad
Reproducer: with no hwdb override files, see the output of sudo udevadm info /dev/input/event1
above. I would expect to see LIBINPUT_PROP_BUTTONPAD=1
listed somewhere, but I don't.
See the section below for my local workaround.
Very minor glitch: pressure thresholds
I find the default pressure thresholds for this device a bit too heavy for taps, and a bit too light for palm. This is obviously a bit subjective.
Reproducer: get access to one of these laptops. Install Debian testing/unstable with GNOME. Turn on Tap to Click on GNOME on Wayland as of libinput10 1.10.7-1 from Debian testing/unstable. Try to tap things to move them. Try a few button2 and button3 gestures. Find that you need a bit more pressure than you'd like sometimes. Go through a few rounds of commands like:
$ sudo udevadm info /dev/input/event1
[...]
$ sudo libinput measure touchpad-pressure --touch-thresholds=15:10 --palm-threshold=150
[...]
$ sudo tee /etc/udev/hwdb.d/99-xps13-s3203-touchpad-pressure.hwdb >/dev/null <<__END__
# Local fixes for Dell XPS13 9333 Synaptics clickpad
libinput:name:*Synaptics s3203:dmi:*svnDellInc.:*pnXPS139333*
LIBINPUT_ATTR_PRESSURE_RANGE=15:10
LIBINPUT_ATTR_PALM_PRESSURE_THRESHOLD=150
LIBINPUT_PROP_BUTTONPAD=1
__END__
$ sudo udevadm hwdb --update
[...]
$ sudo udevadm test /sys/class/input/event1
[...]
until the problem is worked around in libinput measure touchpad-pressure
. Log off and back on again so the new Gnome on Wayland session picks it up.
Glitch/difference from Xorg synaptics: acceleration and speed
So basically everything is different thanks to @whot's explainer (thanks!) There's no bug here I guess, although using mouse acceleration and touchpad acceleration seems to make it feel overly fast and imprecise. Here are the settings I use, for people getting frustrated with this model.
gsettings set org.gnome.desktop.peripherals.mouse natural-scroll false
gsettings set org.gnome.desktop.peripherals.mouse speed -1
gsettings set org.gnome.desktop.peripherals.mouse accel-profile flat
gsettings set org.gnome.desktop.peripherals.touchpad natural-scroll false
gsettings set org.gnome.desktop.peripherals.touchpad speed -0.33
gsettings set org.gnome.desktop.peripherals.touchpad click-method 'fingers'
This seems to deliver a reasonable experience. I think it's probably up to the user to get used to using the full area of the trackpad