Hello, I am using Gentoo linux ~amd64 on Lenovo G50-45 netbook, libinput version 1.9.2 with xorg-server, openrc end eudev. Touchpad on this machine is ETPS/2 Elantech Touchpad. Dmesg: <code>[ 5.299695] psmouse serio1: elantech: assuming hardware version 4 (with firmware version 0x594f03) [ 5.315883] psmouse serio1: elantech: Synaptics capabilities query result 0x70, 0x15, 0x0a. [ 5.331788] psmouse serio1: elantech: Elan sample query result 05, 20, 97 </code> Sometimes it gets real freaky and unpredictable, as some "future" has been turned on. During that "phase" when I'm trying to use touchpad pointer jumps all over the screen and triggers clicks, totally random. Moreover I have observed that it is enough just to hover finger over the touchpad (do not touching its surface) to move the pointer. You have to wait couple of seconds to tochpad comes down. I have also measured its surface with calipers and real dimensions are 110x54mm when reported by "libinput list-devices" - 96x47mm. <code>Device: ETPS/2 Elantech Touchpad Kernel: /dev/input/event9 Group: 7 Seat: seat0, default Size: 96x47mm Capabilities: pointer gesture Tap-to-click: disabled Tap-and-drag: enabled Tap drag lock: disabled Left-handed: disabled Nat.scrolling: disabled Middle emulation: n/a Calibration: n/a Scroll methods: *two-finger edge Click methods: none Disable-w-typing: enabled Accel profiles: none Rotation: n/a</code> Output from "touchpad-edge-detector" command: <code>eclipse /home/ja # touchpad-edge-detector 110x54 /dev/input/event9 Touchpad ETPS/2 Elantech Touchpad on /dev/input/event9 Move one finger around the touchpad to detect the actual edges Kernel says: x [0..3082], y [0..1508] Touchpad sends: x [50..3061], y [9..1500] /^C Touchpad size as listed by the kernel: 96x47mm User-specified touchpad size: 110x54mm Calculated ranges: 3011/1491 Suggested udev rule: # <Laptop model description goes here> evdev:name:ETPS/2 Elantech Touchpad:dmi:bvnLENOVO:bvrA2CN45WW(V2.13):bd08/04/2016:svnLENOVO:pn80E3:pvrLenovoG50-45:rvnLENOVO:rnLancer5B2:rvrNotDefined:cvnLENOVO:ct10:cvrLenovoG50-45:* EVDEV_ABS_00=50:3061:27 EVDEV_ABS_01=9:1500:28 EVDEV_ABS_35=50:3061:27 EVDEV_ABS_36=9:1500:28</code> Output from "libinput measure touchpad-pressure": <code>libinput measure touchpad-pressure Ready for recording data. Pressure range used: 8:10 Palm pressure range used: 130 Place a single finger on the touchpad to measure pressure values. Ctrl+C to exit Sequence 926 pressure: min: 26 max: 34 avg: 30 median: 31 tags: down Sequence 927 pressure: min: 30 max: 33 avg: 31 median: 31 tags: down Sequence 928 pressure: min: 26 max: 35 avg: 30 median: 31 tags: down Sequence 929 pressure: min: 30 max: 37 avg: 34 median: 35 tags: down Sequence 930 pressure: min: 26 max: 37 avg: 31 median: 33 tags: down Sequence 931 pressure: min: 11 max: 34 avg: 25 median: 27 tags: down Sequence 932 pressure: min: 34 max: 44 avg: 39 median: 40 tags: down Sequence 933 pressure: min: 25 max: 33 avg: 28 median: 29 tags: down Sequence 934 pressure: min: 30 max: 35 avg: 33 median: 34 tags: down Sequence 935 pressure: min: 30 max: 35 avg: 32 median: 33 tags: down Sequence 936 pressure: min: 26 max: 27 avg: 26 median: 26 tags: down Sequence 937 pressure: min: 29 max: 33 avg: 30 median: 31 tags: down Sequence 938 pressure: min: 8 max: 33 avg: 21 median: 23 tags: down Sequence 939 pressure: min: 33 max: 37 avg: 35 median: 35 tags: down Sequence 940 pressure: min: 36 max: 41 avg: 38 median: 39 tags: down Sequence 941 pressure: min: 37 max: 40 avg: 38 median: 39 tags: down Sequence 942 pressure: min: 5 max: 31 avg: 18 median: 18 tags: down Sequence 943 pressure: min: 10 max: 27 avg: 18 median: 19 tags: down Sequence 944 pressure: min: 5 max: 37 avg: 22 median: 26 tags: down Sequence 945 pressure: min: 31 max: 39 avg: 35 median: 36 tags: down Sequence 946 pressure: min: 31 max: 35 avg: 33 median: 34 tags: down Sequence 947 pressure: min: 29 max: 33 avg: 30 median: 31 tags: down</code> I have fallowed by <code>https://wayland.freedesktop.org/libinput/doc/latest/touchpad_pressure.html#touchpad_pressure_hwdb</code> , and was trying to test settings with new thresholds i.e. 15:10, but: <code>libinput measure touchpad-pressure --touch-thresholds=15:10 /dev/input/event9 libinput-measure: unrecognized option '--touch-thresholds=15:10' Usage: libinput measure [--help] <feature> [/dev/input/event0]</code> Than i was trying to manually apply rules editing "/lib/udev/hwdb.d/90-libinput-model-quirks.hwdb" by: <code>libinput:name:*ETPS/2 Elantech Touchpad*:dmi:*svnLENOVO:pn80E3:* LIBINPUT_ATTR_PRESSURE_RANGE=15:10</code> And "/lib/udev/hwdb.d/70-evdev.hwdb" by: <code># Lenovo G50-45 evdev:name:ETPS/2 Elantech Touchpad:dmi:*svnLENOVO:*pvrLenovoG50-45* EVDEV_ABS_00=11:3060:32 EVDEV_ABS_01=14:1502:32 EVDEV_ABS_35=11:3060:32 EVDEV_ABS_36=14:1502:32</code> Unfortunately, after rebooting "udevadm test /sys/class/input/event9" reports" <code>eclipse /home/ja # udevadm test /sys/class/input/event9 calling: test version 3.2.5 This program is for debugging only, it does not run any program specified by a RUN key. It may show incorrect results, because some values may be different, or not available at a simulation run. === trie on-disk === tool version: 3 file size: 7635386 bytes header size 80 bytes strings 1927186 bytes nodes 5708120 bytes Load module index timestamp of '/etc/udev/rules.d' changed timestamp of '/lib/udev/rules.d' changed timestamp of '/run/udev/rules.d' changed Reading rules file: /lib64/udev/rules.d/10-dm.rules Reading rules file: /lib64/udev/rules.d/11-dm-lvm.rules Reading rules file: /lib64/udev/rules.d/13-dm-disk.rules Reading rules file: /lib64/udev/rules.d/40-gentoo.rules Reading rules file: /lib64/udev/rules.d/40-usb_modeswitch.rules Reading rules file: /lib64/udev/rules.d/41-libsane.rules Reading rules file: /lib64/udev/rules.d/50-udev-default.rules Reading rules file: /etc/udev/rules.d/51-android.rules Reading rules file: /lib64/udev/rules.d/60-block.rules Reading rules file: /lib64/udev/rules.d/60-cdrom_id.rules Reading rules file: /lib64/udev/rules.d/60-drm.rules Reading rules file: /lib64/udev/rules.d/60-evdev.rules Reading rules file: /lib64/udev/rules.d/60-persistent-alsa.rules Reading rules file: /lib64/udev/rules.d/60-persistent-input.rules Reading rules file: /lib64/udev/rules.d/60-persistent-storage-tape.rules Reading rules file: /lib64/udev/rules.d/60-persistent-storage.rules Reading rules file: /lib64/udev/rules.d/60-persistent-v4l.rules Reading rules file: /lib64/udev/rules.d/60-sensor.rules Reading rules file: /lib64/udev/rules.d/60-serial.rules Reading rules file: /run/udev/rules.d/61-dev-root-link.rules Reading rules file: /lib64/udev/rules.d/61-kde-bluetooth-rfkill.rules Reading rules file: /lib64/udev/rules.d/64-btrfs.rules Reading rules file: /lib64/udev/rules.d/65-kvm.rules Reading rules file: /lib64/udev/rules.d/69-dm-lvm-metad.rules Reading rules file: /lib64/udev/rules.d/69-libmtp.rules Reading rules file: /lib64/udev/rules.d/70-mouse.rules Reading rules file: /lib64/udev/rules.d/70-power-switch.rules Reading rules file: /lib64/udev/rules.d/70-touchpad.rules Reading rules file: /lib64/udev/rules.d/70-uaccess.rules Reading rules file: /lib64/udev/rules.d/71-seat.rules Reading rules file: /lib64/udev/rules.d/73-seat-late.rules RUN{builtin}: 'uaccess' unknown /lib64/udev/rules.d/73-seat-late.rules:15 Reading rules file: /lib64/udev/rules.d/75-net-description.rules Reading rules file: /lib64/udev/rules.d/75-probe_mtd.rules Reading rules file: /lib64/udev/rules.d/77-mm-cinterion-port-types.rules Reading rules file: /lib64/udev/rules.d/77-mm-dell-port-types.rules Reading rules file: /lib64/udev/rules.d/77-mm-ericsson-mbm.rules Reading rules file: /lib64/udev/rules.d/77-mm-haier-port-types.rules Reading rules file: /lib64/udev/rules.d/77-mm-huawei-net-port-types.rules Reading rules file: /lib64/udev/rules.d/77-mm-longcheer-port-types.rules Reading rules file: /lib64/udev/rules.d/77-mm-mtk-port-types.rules Reading rules file: /lib64/udev/rules.d/77-mm-nokia-port-types.rules Reading rules file: /lib64/udev/rules.d/77-mm-pcmcia-device-blacklist.rules Reading rules file: /lib64/udev/rules.d/77-mm-platform-serial-whitelist.rules Reading rules file: /lib64/udev/rules.d/77-mm-simtech-port-types.rules Reading rules file: /lib64/udev/rules.d/77-mm-telit-port-types.rules Reading rules file: /lib64/udev/rules.d/77-mm-usb-device-blacklist.rules Reading rules file: /lib64/udev/rules.d/77-mm-usb-serial-adapters-greylist.rules Reading rules file: /lib64/udev/rules.d/77-mm-x22x-port-types.rules Reading rules file: /lib64/udev/rules.d/77-mm-zte-port-types.rules Reading rules file: /lib64/udev/rules.d/78-sound-card.rules Reading rules file: /lib64/udev/rules.d/80-drivers.rules Reading rules file: /lib64/udev/rules.d/80-libinput-device-groups.rules Reading rules file: /lib64/udev/rules.d/80-mm-candidate.rules Reading rules file: /lib64/udev/rules.d/80-net-name-slot.rules Reading rules file: /lib64/udev/rules.d/80-udisks2.rules Reading rules file: /lib64/udev/rules.d/84-nm-drivers.rules Reading rules file: /lib64/udev/rules.d/85-nm-unmanaged.rules Reading rules file: /lib64/udev/rules.d/85-regulatory.rules Reading rules file: /lib64/udev/rules.d/90-alsa-restore.rules Reading rules file: /lib64/udev/rules.d/90-libinput-model-quirks.rules Reading rules file: /lib64/udev/rules.d/90-network.rules Reading rules file: /lib64/udev/rules.d/95-dm-notify.rules Reading rules file: /lib64/udev/rules.d/95-upower-csr.rules Reading rules file: /lib64/udev/rules.d/95-upower-hid.rules Reading rules file: /lib64/udev/rules.d/95-upower-wup.rules Reading rules file: /lib64/udev/rules.d/97-hid2hci.rules Reading rules file: /lib64/udev/rules.d/99-fuse.rules Reading rules file: /lib64/udev/rules.d/99-laptop-mode.rules rules contain 393216 bytes tokens (32768 * 12 bytes), 32003 bytes strings 25996 strings (209886 bytes), 22466 de-duplicated (181414 bytes), 3531 trie nodes used IMPORT builtin 'input_id' /lib64/udev/rules.d/50-udev-default.rules:14 capabilities/ev raw kernel attribute: b capabilities/abs raw kernel attribute: 661800011000003 capabilities/rel raw kernel attribute: 0 capabilities/key raw kernel attribute: e420 30000 0 0 0 0 properties raw kernel attribute: 1 test_key: checking bit block 0 for any keys; found=0 test_key: checking bit block 64 for any keys; found=0 test_key: checking bit block 128 for any keys; found=0 test_key: checking bit block 192 for any keys; found=0 GROUP 97 /lib64/udev/rules.d/50-udev-default.rules:30 IMPORT builtin 'hwdb' /lib64/udev/rules.d/60-evdev.rules:8 IMPORT builtin 'hwdb' returned non-zero value '[dmi/id]modalias' is 'dmi:bvnLENOVO:bvrA2CN45WW(V2.13):bd08/04/2016:svnLENOVO:pn80E3:pvrLenovoG50-45:rvnLENOVO:rnLancer5B2:rvrNotDefined:cvnLENOVO:ct10:cvrLenovoG50-45:' 2 character(s) replaced IMPORT builtin 'hwdb' /lib64/udev/rules.d/60-evdev.rules:17 IMPORT builtin 'hwdb' returned non-zero value '[dmi/id]modalias' is 'dmi:bvnLENOVO:bvrA2CN45WW(V2.13):bd08/04/2016:svnLENOVO:pn80E3:pvrLenovoG50-45:rvnLENOVO:rnLancer5B2:rvrNotDefined:cvnLENOVO:ct10:cvrLenovoG50-45:' 2 character(s) replaced IMPORT builtin 'hwdb' /lib64/udev/rules.d/60-evdev.rules:21 IMPORT builtin 'hwdb' returned non-zero IMPORT builtin 'hwdb' /lib64/udev/rules.d/70-touchpad.rules:11 PROGRAM 'libinput-device-group /sys/devices/platform/i8042/serio1/input/input6/event9' /lib64/udev/rules.d/80-libinput-device-groups.rules:7 starting 'libinput-device-group /sys/devices/platform/i8042/serio1/input/input6/event9' 'libinput-device-group /sys/devices/platform/i8042/serio1/input/input6/event9'(out) '11/2/e:isa0060/serio1' 'libinput-device-group /sys/devices/platform/i8042/serio1/input/input6/event9' [26859] exit with return code 0 IMPORT 'libinput-model-quirks /sys/devices/platform/i8042/serio1/input/input6/event9' /lib64/udev/rules.d/90-libinput-model-quirks.rules:19 starting 'libinput-model-quirks /sys/devices/platform/i8042/serio1/input/input6/event9' 'libinput-model-quirks /sys/devices/platform/i8042/serio1/input/input6/event9' [26860] exit with return code 0 IMPORT builtin 'hwdb' /lib64/udev/rules.d/90-libinput-model-quirks.rules:30 IMPORT builtin 'hwdb' returned non-zero value '[dmi/id]modalias' is 'dmi:bvnLENOVO:bvrA2CN45WW(V2.13):bd08/04/2016:svnLENOVO:pn80E3:pvrLenovoG50-45:rvnLENOVO:rnLancer5B2:rvrNotDefined:cvnLENOVO:ct10:cvrLenovoG50-45:' 2 character(s) replaced IMPORT builtin 'hwdb' /lib64/udev/rules.d/90-libinput-model-quirks.rules:46 IMPORT builtin 'hwdb' /lib64/udev/rules.d/90-libinput-model-quirks.rules:50 IMPORT builtin 'hwdb' returned non-zero handling device node '/dev/input/event9', devnum=c13:73, mode=0660, uid=0, gid=97 preserve permissions /dev/input/event9, 020660, uid=0, gid=97 preserve already existing symlink '/dev/char/13:73' to '../input/event9' created db file '/run/udev/data/c13:73' for '/devices/platform/i8042/serio1/input/input6/event9' ACTION=add DEVNAME=/dev/input/event9 DEVPATH=/devices/platform/i8042/serio1/input/input6/event9 ID_BUS=i8042 ID_INPUT=1 ID_INPUT_HEIGHT_MM=47 ID_INPUT_TOUCHPAD=1 ID_INPUT_TOUCHPAD_INTEGRATION=internal ID_INPUT_WIDTH_MM=96 LIBINPUT_ATTR_PRESSURE_RANGE=10:8 LIBINPUT_ATTR_RESOLUTION_HINT=31x31 LIBINPUT_DEVICE_GROUP=11/2/e:isa0060/serio1 MAJOR=13 MINOR=73 SUBSYSTEM=input USEC_INITIALIZED=122435669 Unload module index</code> Any help is appreciated.
You need to run udevadm hwdb --update whenever you add or change a hwdb entry. That seems to be the step missing here. But from your description I think you have a kernel or firmware issue. Run evemu-record --autorestart (see its man page) in the background and when it happens again, *attach* the output here, that should help figuring out what's going on.
Created attachment 135823 [details] evemu-record output
Thanks for the quick response. I don't think that this would be kernel .config issue, but I could be wrong. Dmidecode in the part about pointing device says that touchpad is connected thru PS/2 interface so I assumed that I2C should not be under consideration. "Handle 0x0029, DMI type 21, 7 bytes Built-in Pointing Device Type: Touch Pad Interface: PS/2 Buttons: 4" I have both, Synaptic and Elanteh, PS/2 enabled in .config file and kernel choose Elantech driver by itself. After executing "udevadm hwdb --update" and rebooting nothing changes in the output of "udevadm test" I understand nothing if it's something wrong with the touchpad from the output of "evemu-record --autorestart=30 /dev/input/event9 evemu_record.txt" but here it goes. It was taken when problem occurred. I have also attached my .config.
Created attachment 135824 [details] kernel config
ok, this touchpad is busted, it sends ghost touches at more-or-less arbitrary locations. Either that our you had three cats tap-dancing on the touchpad. Has this laptop worked fine until a recent update? The ghost touches are there in the evemu output, which means they're there in the kernel output. So either your touchpad has recently died or some kernel update has broken the elantech driver. Always handy to attach your dmesg, maybe it tells us something.
Created attachment 135834 [details] dmesg output It happened earlier very sporadically so I was blaming myself for not properly using touchpad. Now it happens more often, so after little investigation I have spotted that physical dimension of touchpad aren't equal to those reported by libinput and this could be the cause of this strange behavior. I have also checked videos about ghost/phantom clicks to see if this applies to my netbook. IMHO it is little bit different. In the "ghost trance" pointer does not move when I am not touching surface, and with mentioned in first post "hovering" pointer follow my finger as it would be on the surface. But when I place finger on the surface then touchpad gets crazy so i thought that it was to sensitive, but custom rules wont be applied by udevadm. You have to wait couple of seconds when touchpad comes down or click physical button to cancel this behavior. But when those clicks comes from kernel this really sounds like its a problem with kernel driver or hardware/firmware. Here is dmesg.
Created attachment 135846 [details] finger pressure map over time
The dimensions only affect pointer acceleration etc, they don't produce the output this recording shows. Grab mtview and run it, then reproduce it. You'll see the jumping touches quickly. https://github.com/whot/mtview There is no single definition of ghost touches beyond "the hardware thinks there is a touch where there is none". That's definitely the case here because there's no way this was your physical input. Look at attachment 135846 [details], it illustrates the pressure the recording shows. It's all over the place, and that diagonal line from 20-42s is just odd, no way could you control your finger that precisely that you get a pressure increase like this. If I read comment 6 correctly: * no pointer movement when not touching * pointer movement ok when close to the surface without touching * pointer movement crazy when touching I don't know how we could possibly detect this. Your best bet would be to change the pressure ranges and hope that palm detection kicks in for most of the ghost touches. But that's not a guarantee. See https://wayland.freedesktop.org/libinput/doc/latest/udev_config.html#hwdb for the instructions, this should make your earlier hwdb work.
Created attachment 135862 [details] full dmidecode output Here is full dmidecode output. I fogrot to attach it with previous post, but with such obvious evidence I see no point in playing with changing the pressure ranges. I really think it wont resolve anything. I agree with your opinion that this touchpad is finished and laptop needed to be RMA'd. Thank you very much for heping me to resolve this, and my apologies that I thought it was libinput problem.
fwiw, dmidecode doesn't usually matter for libinput's bits. The closest we get is using the dmi modalias, but that's just for hwdb entries. I'm closing the bug as wontfix, simply because I don't think there's anything we can do in libinput to fix it, sorry. Give the pressure bits a try anyway, it may still make it mostly usable.
Fair enough. I will give it a chance witch changeing pressure ranges. I wil see how it goes. Thanks anyway.
I mean "with" - T9 android dictionary. Once again thanks.
It could be interesting to see if the touchpad is not using a SMBus connection after all. I would be surprised the Windows version of the driver suffer the same issues. Could you apply the last five commits from https://github.com/bentiss/linux/commits/elan_i2c-v4.15-rc2+ (on top of a v4.14 or this branch directly)? These patches should bind the touchpad over SMBus if the PS/2 interface says it is capable, and we might solve the issue. Once the patches are applied, please upload a dmesg, as the last commit says, there will be some debug information whether or not this touchpad is SMBus capable.
Created attachment 136050 [details] dmesg output after patches Hi Benjamin, I cannot open link provided in comment 13, but I have applied last 5 commits from https://github.com/bentiss/linux/commits/elan_i2c-v4.15-rc2%2B - Input: elan_i2c - add trackstick report - Input: elantech - split device info into a separate structure - Input: elantech - query the resolution in query_info - Input: elantech - add support for SMBus devices - WIP: just pr_err to trace elantech initialization Here is dmesg output.
> I cannot open link provided in comment 13, Yeah, sorry, bugzilla messed up the final '+' in the address. You applied the correct patches BTW. And thanks for the fast tests! As the dmesg shows, the device is not capable of anything but PS/2: [ 5.079823] elantech_init bus: 0 drivers/input/mouse/elantech.c:1954 (bus '0' means ETP_BUS_PS2_ONLY) So there is not much we can do besides quirks from libinput.
Arghhh, too fast clicking, I haven't notice the "+" sign at the end, either would not bother you to check if I was patching correct commits. Sorry. I was just packing laptop up cause it is going to be RMA anyway, so decided to make quick test with those patches hoping that we could change something, this would be better than week or two without work tool. At least we know that this touchpad is PS2 only. As for the quirks, as I wrote before, I don't think this could help a lot. Searching internet showed up that this malfunction is common with linux and windows on this model, so I have 99% probability that this touchpad is already dead or dying. Thank you very much for your help.
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.