WelcomeWelcome | FAQFAQ | DownloadsDownloads | WikiWiki

Author Topic: Lenovo Thinkpad Synaptics - 2 finger scroll not working.  (Read 260 times)

Offline Sashank999

  • Sr. Member
  • ****
  • Posts: 395
Lenovo Thinkpad Synaptics - 2 finger scroll not working.
« on: November 20, 2024, 11:27:19 AM »
Hello.

I am a user of Lenovo Thinkpad L412. I currently use touchpad for my daily linux use as my trusty mouse broke recently. I decided to revisit TCL as I had to install a linux distro to get Clickhouse OLAP running locally. But now I found out that 2 finger scroll and double tapping (for left click) does not work.

I have set up all the necessary things as per my choices - Firefox (thanks for the getLatest TCE), Alsa, Ice WM, etc.

From some forum and Google searches, I found a boot code:
psmouse.proto=imps
from:
https://forum.tinycorelinux.net/index.php/topic,6458.msg34363.html#msg34363
https://forum.tinycorelinux.net/index.php/topic,6982.msg36850.html#msg36850

Now this enabled the double tapping for left click. But I still cannot scroll with 2 fingers, as you would normally with a touchpad.

I will be happy to provide any information regarding my device drivers, hardware information or TCL version.

Thanks in advance.

Online Rich

  • Administrator
  • Hero Member
  • *****
  • Posts: 11622
Re: Lenovo Thinkpad Synaptics - 2 finger scroll not working.
« Reply #1 on: November 20, 2024, 02:07:25 PM »
Hi Sashank999
I take it you are running Xorg. What does this return:
Code: [Select]
sudo libinput list-devices

Offline Sashank999

  • Sr. Member
  • ****
  • Posts: 395
Re: Lenovo Thinkpad Synaptics - 2 finger scroll not working.
« Reply #2 on: November 20, 2024, 10:42:13 PM »
Hi Sashank999
I take it you are running Xorg. What does this return:
Code: [Select]
sudo libinput list-devices

Thank you for looking into this.

Here is what I got:
Code: [Select]
tc@box:~$ sudo libinput list-devices
Device:           Power Button
Kernel:           /dev/input/event2
Group:            1
Seat:             seat0, default
Capabilities:     keyboard
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      n/a
Nat.scrolling:    n/a
Middle emulation: n/a
Calibration:      n/a
Scroll methods:   none
Click methods:    none
Disable-w-typing: n/a
Disable-w-trackpointing: n/a
Accel profiles:   n/a
Rotation:         0.0

Device:           Video Bus
Kernel:           /dev/input/event6
Group:            2
Seat:             seat0, default
Capabilities:     keyboard
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      n/a
Nat.scrolling:    n/a
Middle emulation: n/a
Calibration:      n/a
Scroll methods:   none
Click methods:    none
Disable-w-typing: n/a
Disable-w-trackpointing: n/a
Accel profiles:   n/a
Rotation:         0.0

Device:           Sleep Button
Kernel:           /dev/input/event1
Group:            3
Seat:             seat0, default
Capabilities:     keyboard
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      n/a
Nat.scrolling:    n/a
Middle emulation: n/a
Calibration:      n/a
Scroll methods:   none
Click methods:    none
Disable-w-typing: n/a
Disable-w-trackpointing: n/a
Accel profiles:   n/a
Rotation:         0.0

Device:           AT Translated Set 2 keyboard
Kernel:           /dev/input/event3
Group:            4
Seat:             seat0, default
Capabilities:     keyboard
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      n/a
Nat.scrolling:    n/a
Middle emulation: n/a
Calibration:      n/a
Scroll methods:   none
Click methods:    none
Disable-w-typing: n/a
Disable-w-trackpointing: n/a
Accel profiles:   n/a
Rotation:         0.0

Device:           PS/2 Synaptics TouchPad
Kernel:           /dev/input/event5
Group:            5
Seat:             seat0, default
Capabilities:     pointer
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      disabled
Nat.scrolling:    disabled
Middle emulation: disabled
Calibration:      n/a
Scroll methods:   *button
Click methods:    none
Disable-w-typing: n/a
Disable-w-trackpointing: n/a
Accel profiles:   flat *adaptive custom
Rotation:         0.0

Edit: My laptop has both a touchpad and the "trackpoint" thing so I don't know if they are both being recognized. Mine is a Lenovo ThinkPad L412, Intel Core i3 6th Gen, 4GB RAM.
« Last Edit: November 20, 2024, 10:44:25 PM by Sashank999 »

Offline patrikg

  • Wiki Author
  • Hero Member
  • *****
  • Posts: 713
Re: Lenovo Thinkpad Synaptics - 2 finger scroll not working.
« Reply #3 on: November 21, 2024, 03:30:38 AM »
I think Thinkpads have some kernel mod's to get things working well.
If you try another live linux distro, and do lsmod to see what mod's installed.

Offline GNUser

  • Wiki Author
  • Hero Member
  • *****
  • Posts: 1509
Re: Lenovo Thinkpad Synaptics - 2 finger scroll not working.
« Reply #4 on: November 21, 2024, 08:11:58 AM »
Hi Sashank999. I'm on a ThinkPad X230 and two-finger scrolling works for me. I did not do any special configuration for it to work. It seems that if the hardware supports it, libinput can handle it.

Here's what I'm seeing:
Code: [Select]
$ sudo libinput list-devices
Device:           Power Button
Kernel:           /dev/input/event2
Group:            1
Seat:             seat0, default
Capabilities:     keyboard
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      n/a
Nat.scrolling:    n/a
Middle emulation: n/a
Calibration:      n/a
Scroll methods:   none
Click methods:    none
Disable-w-typing: n/a
Disable-w-trackpointing: n/a
Accel profiles:   n/a
Rotation:         0.0

Device:           Video Bus
Kernel:           /dev/input/event6
Group:            2
Seat:             seat0, default
Capabilities:     keyboard
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      n/a
Nat.scrolling:    n/a
Middle emulation: n/a
Calibration:      n/a
Scroll methods:   none
Click methods:    none
Disable-w-typing: n/a
Disable-w-trackpointing: n/a
Accel profiles:   n/a
Rotation:         0.0

Device:           Sleep Button
Kernel:           /dev/input/event0
Group:            3
Seat:             seat0, default
Capabilities:     keyboard
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      n/a
Nat.scrolling:    n/a
Middle emulation: n/a
Calibration:      n/a
Scroll methods:   none
Click methods:    none
Disable-w-typing: n/a
Disable-w-trackpointing: n/a
Accel profiles:   n/a
Rotation:         0.0

Device:           AT Translated Set 2 keyboard
Kernel:           /dev/input/event3
Group:            4
Seat:             seat0, default
Capabilities:     keyboard
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      n/a
Nat.scrolling:    n/a
Middle emulation: n/a
Calibration:      n/a
Scroll methods:   none
Click methods:    none
Disable-w-typing: n/a
Disable-w-trackpointing: n/a
Accel profiles:   n/a
Rotation:         0.0

Device:           SynPS/2 Synaptics TouchPad
Kernel:           /dev/input/event4
Group:            5
Seat:             seat0, default
Size:             71x31mm
Capabilities:     pointer gesture
Tap-to-click:     disabled
Tap-and-drag:     enabled
Tap drag lock:    disabled
Left-handed:      disabled
Nat.scrolling:    disabled
Middle emulation: disabled
Calibration:      n/a
Scroll methods:   *two-finger edge
Click methods:    *button-areas clickfinger
Disable-w-typing: enabled
Disable-w-trackpointing: enabled
Accel profiles:   flat *adaptive custom
Rotation:         n/a

Device:           TPPS/2 IBM TrackPoint
Kernel:           /dev/input/event5
Group:            6
Seat:             seat0, default
Capabilities:     pointer
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      disabled
Nat.scrolling:    disabled
Middle emulation: disabled
Calibration:      n/a
Scroll methods:   *button
Click methods:    none
Disable-w-typing: n/a
Disable-w-trackpointing: n/a
Accel profiles:   flat *adaptive custom
Rotation:         n/a
I noticed your TouchPad section has this:
Code: [Select]
Scroll methods:   *button
whereas mine has this:
Code: [Select]
Scroll methods:   *two-finger edge
Maybe your touchpad doesn't support two-finger scrolling?

Online Rich

  • Administrator
  • Hero Member
  • *****
  • Posts: 11622
Re: Lenovo Thinkpad Synaptics - 2 finger scroll not working.
« Reply #5 on: November 21, 2024, 09:41:17 AM »
Hi Sashank999
I think you need to create:
Code: [Select]
/usr/local/share/X11/xorg.conf.d/50-libinput.conf
Place the following in that file:
Code: [Select]
Section "InputClass"
   Identifier "libinput touchpad catchall"
   Driver "libinput"
   MatchIsTouchpad "on"
   Option "Tapping" "true"
   Option "ScrollMethod" "twofinger"
EndSection

Backup the file, restart X, see if anything changed.

This might be of some help:
https://wiki.archlinux.org/title/Libinput#Via_xinput

Libinput configuration details (options):
https://man.archlinux.org/man/libinput.4

Manually trying settings using xinput without the need to restart X:
https://forum.tinycorelinux.net/index.php/topic,23880.msg150206.html#msg150206

Offline Sashank999

  • Sr. Member
  • ****
  • Posts: 395
Re: Lenovo Thinkpad Synaptics - 2 finger scroll not working.
« Reply #6 on: November 23, 2024, 08:38:14 PM »
I apologize for the late reply. Thank you all for trying to help me.

I think Thinkpads have some kernel mod's to get things working well.
If you try another live linux distro, and do lsmod to see what mod's installed.

Hi patrikg. I did not try any other live distro yet. I will try Fedora if it has something that can help.

Hi Sashank999. I'm on a ThinkPad X230 and two-finger scrolling works for me. I did not do any special configuration for it to work. It seems that if the hardware supports it, libinput can handle it.

Here's what I'm seeing:
Code: [Select]
$ sudo libinput list-devices
Device:           Power Button
Kernel:           /dev/input/event2
Group:            1
Seat:             seat0, default
Capabilities:     keyboard
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      n/a
Nat.scrolling:    n/a
Middle emulation: n/a
Calibration:      n/a
Scroll methods:   none
Click methods:    none
Disable-w-typing: n/a
Disable-w-trackpointing: n/a
Accel profiles:   n/a
Rotation:         0.0

Device:           Video Bus
Kernel:           /dev/input/event6
Group:            2
Seat:             seat0, default
Capabilities:     keyboard
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      n/a
Nat.scrolling:    n/a
Middle emulation: n/a
Calibration:      n/a
Scroll methods:   none
Click methods:    none
Disable-w-typing: n/a
Disable-w-trackpointing: n/a
Accel profiles:   n/a
Rotation:         0.0

Device:           Sleep Button
Kernel:           /dev/input/event0
Group:            3
Seat:             seat0, default
Capabilities:     keyboard
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      n/a
Nat.scrolling:    n/a
Middle emulation: n/a
Calibration:      n/a
Scroll methods:   none
Click methods:    none
Disable-w-typing: n/a
Disable-w-trackpointing: n/a
Accel profiles:   n/a
Rotation:         0.0

Device:           AT Translated Set 2 keyboard
Kernel:           /dev/input/event3
Group:            4
Seat:             seat0, default
Capabilities:     keyboard
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      n/a
Nat.scrolling:    n/a
Middle emulation: n/a
Calibration:      n/a
Scroll methods:   none
Click methods:    none
Disable-w-typing: n/a
Disable-w-trackpointing: n/a
Accel profiles:   n/a
Rotation:         0.0

Device:           SynPS/2 Synaptics TouchPad
Kernel:           /dev/input/event4
Group:            5
Seat:             seat0, default
Size:             71x31mm
Capabilities:     pointer gesture
Tap-to-click:     disabled
Tap-and-drag:     enabled
Tap drag lock:    disabled
Left-handed:      disabled
Nat.scrolling:    disabled
Middle emulation: disabled
Calibration:      n/a
Scroll methods:   *two-finger edge
Click methods:    *button-areas clickfinger
Disable-w-typing: enabled
Disable-w-trackpointing: enabled
Accel profiles:   flat *adaptive custom
Rotation:         n/a

Device:           TPPS/2 IBM TrackPoint
Kernel:           /dev/input/event5
Group:            6
Seat:             seat0, default
Capabilities:     pointer
Tap-to-click:     n/a
Tap-and-drag:     n/a
Tap drag lock:    n/a
Left-handed:      disabled
Nat.scrolling:    disabled
Middle emulation: disabled
Calibration:      n/a
Scroll methods:   *button
Click methods:    none
Disable-w-typing: n/a
Disable-w-trackpointing: n/a
Accel profiles:   flat *adaptive custom
Rotation:         n/a
I noticed your TouchPad section has this:
Code: [Select]
Scroll methods:   *button
whereas mine has this:
Code: [Select]
Scroll methods:   *two-finger edge
Maybe your touchpad doesn't support two-finger scrolling?

Hi GNUser. My touchpad supports both 2 finger scroll and 3 finger gestures on Windows without any issues. That is why I was surprised when it did not work in Tiny Core Linux. I don't think it is a hardware issue at all.

Hi Sashank999
I think you need to create:
Code: [Select]
/usr/local/share/X11/xorg.conf.d/50-libinput.conf
Place the following in that file:
Code: [Select]
Section "InputClass"
   Identifier "libinput touchpad catchall"
   Driver "libinput"
   MatchIsTouchpad "on"
   Option "Tapping" "true"
   Option "ScrollMethod" "twofinger"
EndSection

Backup the file, restart X, see if anything changed.

This might be of some help:
https://wiki.archlinux.org/title/Libinput#Via_xinput

Libinput configuration details (options):
https://man.archlinux.org/man/libinput.4

Manually trying settings using xinput without the need to restart X:
https://forum.tinycorelinux.net/index.php/topic,23880.msg150206.html#msg150206

Hi Rich. I just tried creating the file and restarting the Xserver by exiting to prompt and then using the "startx" command to start the Xserver. This did not do anything.

Offline Sashank999

  • Sr. Member
  • ****
  • Posts: 395
Re: Lenovo Thinkpad Synaptics - 2 finger scroll not working.
« Reply #7 on: Today at 01:26:22 AM »
Hello Rich,

Your code did not work because my touchpad is being recognised as a "pointer" by libinput.
Hence, I modified your code to change match criteria to
Code: [Select]
MatchIsPointer "true", added a custom identifier, changed driver to "synaptics" which lead to Xorg applying this custom rule.
I also tried with driver "libinput" but it failed with "Failed to set" message.
I attached the 2 Xorg.log files.

Some digging around showed that Synaptics driver should usually be ok with these touchpads. So I compiled xf86-synaptics-driver from https://github.com/awestendorf/xf86-input-synaptics .
But that is showing protocol error.

Code: [Select]
[  3387.659] (II) LoadModule: "synaptics"
[  3387.659] (II) Loading /usr/local/lib/xorg/modules/input/synaptics_drv.so
[  3387.659] (II) Module synaptics: vendor="X.Org Foundation"
[  3387.659] compiled for 1.21.1.9, module version = 1.6.99
[  3387.659] Module class: X.Org XInput Driver
[  3387.659] ABI class: X.Org XInput driver, version 24.4
[  3387.659] (II) Using input driver 'synaptics' for 'PS/2 Synaptics TouchPad'
[  3387.659] (**) PS/2 Synaptics TouchPad: always reports core events
[  3387.659] (**) Option "Device" "/dev/input/event5"
[  3387.740] (EE) synaptics: PS/2 Synaptics TouchPad: Synaptics driver unable to
 detect protocol
[  3387.740] (EE) PreInit returned 11 for "PS/2 Synaptics TouchPad"
[  3387.740] (II) UnloadModule: "synaptics"

Offline Sashank999

  • Sr. Member
  • ****
  • Posts: 395
Re: Lenovo Thinkpad Synaptics - 2 finger scroll not working.
« Reply #8 on: Today at 04:15:41 AM »
Hello.

I initially wanted to have normal tap-to-click with my touchpad on my laptop. I followed https://forum.tinycorelinux.net/index.php/topic,6982.msg36850.html#msg36850 and added the bootcode
Code: [Select]
psmouse.proto=imps to my grub.cfg .

I thought this was a solution, but this is the actual trouble maker. It changed something so that my touchpad was being recognized as a pointer by libinput. I removed the bootcode and then libinput recognized my touchpad as an actual touchpad. As a bonus, xinput also now also lists my trackpoint separately.

Code: [Select]
â¡ Virtual core pointer                    id=2 [master pointer  (3)]
â   â³ Virtual core XTEST pointer              id=4 [slave  pointer  (2)]
â   â³ SynPS/2 Synaptics TouchPad              id=10 [slave  pointer  (2)]
â   â³ TPPS/2 IBM TrackPoint                    id=11 [slave  pointer  (2)]
⣠Virtual core keyboard                    id=3 [master keyboard (2)]
    â³ Virtual core XTEST keyboard              id=5 [slave  keyboard (3)]
    â³ Power Button                            id=6 [slave  keyboard (3)]
    â³ Video Bus                                id=7 [slave  keyboard (3)]
    â³ Sleep Button                            id=8 [slave  keyboard (3)]
    â³ AT Translated Set 2 keyboard            id=9 [slave  keyboard (3)]

The issue is not with libinput or my touchpad. It was with a bootcode. Remove the bootcode and properly configure libinput in /usr/local/share/X11/xorg.conf.d directory with a custom configuration file. This is the configuration I am using now:
Code: [Select]
Section "InputClass"
        Identifier "libinput new touchpad catchall"
        MatchIsTouchpad "on"
        MatchDevicePath "/dev/input/event*"
        Driver "libinput"
        Option "Tapping" "true"
        Option "ScrollMethod" "twofinger"
        Option "NaturalScrolling" "true"
Option "AccelSpeed" "0.4"
EndSection

I am currently using persistent home and opt directories with `tce=sda7 home=sda7 opt=sda7 norestore` boot codes. I have a command bootlocal.sh for auto connecting to my Wi-Fi AP. I added a command to create the configuration file. Here is my bootlocal.sh:
Code: [Select]
#!/bin/sh
# put other system startup commands here
/usr/local/bin/wifi.sh -a 2>&1 > /tmp/wifi.log
echo 'Section "InputClass"
        Identifier "libinput new touchpad catchall"
        MatchIsTouchpad "on"
        MatchDevicePath "/dev/input/event*"
        Driver "libinput"
        Option "Tapping" "true"
        Option "ScrollMethod" "twofinger"
        Option "NaturalScrolling" "true"
Option "AccelSpeed" "0.4"
EndSection' > /usr/local/share/X11/xorg.conf.d/50-custom.conf

Hope this helps other travellers that have come along my way. Sorry for wasting your time. Thank you for helping me.

Offline gadget42

  • Hero Member
  • *****
  • Posts: 789
Re: Lenovo Thinkpad Synaptics - 2 finger scroll not working.
« Reply #9 on: Today at 05:11:49 AM »
@Sashank999, thanks for sharing your findings! it most likely will help someone in the future.

also, for future visitors to this thread, as noted in "7.2 Persistent home/opt" of Into the Core:
(http://tinycorelinux.net/book.html)
Quote
Using absolute names can be unreliable if there are multiple drives
present; how fast they initialize affects their naming. So if there are
multiple internal drives, or you wish to use an external drive, it’s
recommended to use either UUID or LABEL.
Examples:
• home=sda1
• home=LABEL=mydisk
• home=UUID=fho4-3436t
The fluctuation theorem has long been known for a sudden switch of the Hamiltonian of a classical system Z54 . For a quantum system with a Hamiltonian changing from... https://forum.tinycorelinux.net/index.php/topic,25972.msg166580.html#msg166580

Online Rich

  • Administrator
  • Hero Member
  • *****
  • Posts: 11622
Re: Lenovo Thinkpad Synaptics - 2 finger scroll not working.
« Reply #10 on: Today at 10:25:40 AM »
Hi Sashank999
Glad to hear it's working. Kudos on pinpointing the boot code issue.

... I am currently using persistent home and opt directories with `tce=sda7 home=sda7 opt=sda7 norestore` boot codes. I have a command bootlocal.sh for auto connecting to my Wi-Fi AP. I added a command to create the configuration file. Here is my bootlocal.sh: ...

If you remove the  norestore   boot code, you can use the backup system
instead of having bootlocal.sh creating the file:

Click the  ControlPanel  icon (the one with the screwdriver).
Click the  Backup/Restore  button.
Select the  Include for Backup  tab.
Click the  Add  button.
In the file selector, navigate to  /usr/local/share/X11/xorg.conf.d/
Click  50-custom.conf  and click the  OK  button.
In the drop down box, change from  Dry Run  to  Backup.
Click  Go  and your file is now backed up.
The next time you boot, your file will automatically be restored.

If you prefer the command line instead of the GUI:
Code: [Select]
echo "usr/local/share/X11/xorg.conf.d/50-custom.conf" >> /opt/.filetool.lst
filetool.sh -b
Leave out the leading slash in the path as shown.

On a related note:

When it comes to automatically starting programs, scripts, daemons, etc., the basic rules of thumb are:
1. Things that need to run before a GUI are started (like kmaps) should go into  /opt/bootsync.sh.
2. Things that need to run after a GUI are started (like starting a GUI app) should go into  ~/.X.d.
3. Things that are not sensitive to when they are started can go into  /opt/bootlocal.sh  which runs in the background.

When starting something from numbers 1 or 3, you need to specify a full path. They run before any user is logged in.

Item 2 is unique to each user.

The configuration file you are creating would fall under item 1, it needs to
be present before Xorg starts.

So if you insist on creating the file like that, do it in  bootsync.sh  before
it calls  bootlocal.sh.  Otherwise you'll have a race condition that might
intermittently cause your touchpad to not be configured when you boot.

Some things don't belong in bootlocal.sh, kmaps for example. This explains why and
describes the timing of events:
https://forum.tinycorelinux.net/index.php/topic,23698.msg148996.html#msg148996