My Dell XPS 15 (9500) detects its touchpad as a “PS/2 Logitech Wheel Mouse,” so touchpad options don’t appear in the settings in the default Ubuntu desktop environment, nor in KDE’s Plasma (which I usually use). The touchpad does work, but I can’t use it to scroll or enable other gestures, and I can’t disable tap-to-click, or disable it while typing (a big deal, because Dell made this touchpad aggressively large).
My situation might be a little unique because when I first installed Ubuntu, touchpad support worked out of the box and the options worked perfectly. Unfortunately the touchpad had a known hardware defect (referred to as “wobble”) and a tech visited for a warranty replacement. The replacement touchpad lacks the hardware defect, but is likely a new model with different driver support. (In my dmesg logs, the old touchpad showed up as an elantech.)
When I run
xlibinput list I see this:
$ xinput list
⎡ Virtual core pointer id=2 (master pointer (3))
⎜ ↳ Virtual core XTEST pointer id=4 (slave pointer (2))
⎜ ↳ PS/2 Logitech Wheel Mouse id=15 (slave pointer (2))
⎣ Virtual core keyboard id=3 (master keyboard (2))
↳ Virtual core XTEST keyboard id=5 (slave keyboard (3))
↳ Video Bus id=6 (slave keyboard (3))
↳ Video Bus id=7 (slave keyboard (3))
↳ Power Button id=8 (slave keyboard (3))
↳ Integrated_Webcam_HD: Integrate id=9 (slave keyboard (3))
↳ Integrated_Webcam_HD: Integrate id=10 (slave keyboard (3))
↳ Intel HID events id=11 (slave keyboard (3))
↳ Intel HID 5 button array id=12 (slave keyboard (3))
↳ Dell WMI hotkeys id=13 (slave keyboard (3))
↳ AT Translated Set 2 keyboard id=14 (slave keyboard (3))
So the only pointer device is the Logitech (and I don’t have an external mouse attached). When I run
sudo libinput debug-events, that mouse device is
-event3 DEVICE_ADDED PS/2 Logitech Wheel Mouse seat0 default group10 cap:p left scroll-nat scroll-button
Moving my finger across the mousepad creates lots of lines like this:
event3 POINTER_MOTION +5.729s 0.62/ -0.31 ( +2.00/ -1.00)
That confirms that the PS/2 Logitech Wheel Mouse is actually my new touchpad.
Things I’ve done so far
I’ve spent hours on this and tried many, many combinations of solutions, including advice from other distros and from elsewhere on this site. But here’s an abdridged list:
- Checked the BIOS. There are no touchpad-specific settings there.
- Tried a bootable USB stick. I used the Ubuntu 20.04 one, as well as the release candidate 21.04. Neither correctly recognized my touchpad while running from the guest OS. Behavior was the same.
- Installed a mainline kernel. I tried both a 5.11.12 and a 5.12.0 release candidate (the current version is a 5.8.0). No change.
- Tweaked boot options in
/etc/default/grub. Here is what was there:
I replaced those lines with combinations like these (and in cases where something was set to 0 I also tried 1):
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash i8042.reset i8042.nomux i8042.nopnp i8042.noloop"
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash psmouse.proto=bare"
GRUB_CMDLINE_LINUX="i8042.reset i8042.nomux i8042.nopnp i8042.noloop"
GRUB_CMDLINE_LINUX_DEFAULT="psmouse.synaptics_intertouch=1 quiet splash"
GRUB_CMDLINE_LINUX="i8042.nomux=1 i8042.reset psmouse.elantech_smbus=1"
Most recently I created a new settings file for libinput at
/usr/share/X11/xorg.conf.d/99-touchpad.conf (with a 99 to override other settings) and filled it with this config:
Identifier "replacement touchpad"
MatchProduct "PS/2 Logitech Wheel Mouse"
Option "Tapping" "False"
Option "TappingButtonMap" "lrm"
Option "DisableWhileTyping" "True"
Option "NaturalScrolling" "True"
Option "NaturalScrolling" "twofinger"
Option "ScrollMethod" "twofinger"
Option "TappingDrag" "False"
Option "TappingDragLock" "False"
Option "AccelProfile" "adaptive"
Option "AccelSpeed" "0.1"
I briefly had the Driver option in that config set to
synaptics, which made the touchpad not work. I changed the string for the MatchProduct option to include some nonsense text, and the touchpad started working again on reboot, so that basically confirmed for me that my config file was indeed being used for this device.
I’ve found a lot of advice for similar issues, but haven’t been able to make any of them work. One fun on was running this command:
$ sudo sh -c 'echo -n "elantech" > /sys/bus/serio/devices/serio1/protocol'
That results in the touchpad immediately appearing as a PS/2 Elantech Touchpad, but the behavior doesn’t change.
Is there a way to force the device to be a touchpad?