Giter Site home page Giter Site logo

xf86-input-mtrack's Introduction

xf86-input-mtrack

v0.5.1

An Xorg driver for multitouch trackpads. Supports any trackpad whose kernel driver uses the slotted multitouch protocol. For more information on the protocol see the kernel documentation.

This driver is compatible with Xorg server versions 1.7 to 1.19.0 It requires the mtdev library to operate.

License

This software is licensed under the GPLv2 and is a fork of the xf86-input-multitouch driver by Henrik Rydberg.

Building and Installing

This is a standard autoconf package. So:

    ./configure
    make && make install

It is likely that you will need to change system-dependent paths such as the xorg module directory. Otherwise mtrack may be not installed in xserver search path. See configure --help for options.

On Debian systems (including Ubuntu) you may also need to install the xorg-dev package prior to these commands.

To build deb package and install in system wide you will usually have to change installation prefix to /usr like so:

    ./configure --prefix=/usr
    dpkg-buildpackage

Bug Reporting

If you found a bug, and you are going to submit it, first run

    xinput --list

then find your touchpad name/ID on the list and create report with output of

    xinput --list-props <your touchpad ID>

attached.

Configuration

The following is a minimal working InputClass section for xorg.conf:

    Section "InputClass"
        MatchIsTouchpad "on"
        Identifier      "Touchpads"
        Driver          "mtrack"

#       In case of problems enable/disable this line:
        MatchDevicePath "/dev/input/event*"
    EndSection

To apply changes made in xorg.conf (or related files) X server have to be restarted. Changes made with xinput are applied immedietly but they are not saved between sessions.

Options

Configuration options may be defined inside the InputClass section to configure the driver. See examples/ directory for example configuration files. Feel free to submit yours, named as your laptop's model. Available options and their defaults are as follows.


Basic

TrackpadDisable Disables trackpad touch input. A value of 0 will enable the trackpad. A value of 1 will disable tapping and gestures but not movement. A value of 2 will disable all input. A value of 3 will also disable physical buttons.
Integer. Default is 0.

ButtonEnable Whether or not to enable the physical buttons on or near the trackpad.
Boolean value. Defaults to true.

ButtonIntegrated Whether or not the physical buttons are integrated with the trackpad. If you have a one-piece trackpad like on newer MacBooks, this should be set to true. Button emulation depends on this value being correct.
Boolean value. Defaults to true.


Responsiveness

Sensitivity Adjusts the sensitivity (movement speed) of the touchpad. This is a real number greater than or equal to zero. A value of 0 will disable pointer movement.
Float value. Default is 1.

FingerHigh Defines the pressure at which a finger is detected as a touch. This is a percentage represented as an integer.
Integer value. Default is 5.

FingerLow Defines the pressure at which a finger is detected as a release. This is a percentage represented as an integer.
Integer value. Default is 5.

IgnoreThumb Whether or not to ignore touches that are determined to be thumbs.
Boolean value. Defaults to false.

IgnorePalm Whether or not to ignore touches that are determined to be palms.
Boolean value. Defaults to false.

DisableOnThumb Whether or not to disable the entire trackpad when a thumb is touching.
Boolean value. Defaults to false.

DisableOnPalm Whether or not to disable the entire trackpad when a palm is touching.
Boolean value. Defaults to false.

ThumbSize The minimum size of what's considered a thumb. It is expected that a thumb will be larger than other fingers. This is represented as a percentage of the maximum touch value and is dependent on the trackpad hardware.
Integer value. Defaults to 25.

PalmSize The minimum size of what's considered a palm. Palms are expected to be very large on the trackpad. This is represented as a percentage of the maximum touch value and is dependent on the trackpad hardware.
Integer value. Defaults to 40.

ThumbRatio The width/length ratio of what's considered a thumb. It is expected that a thumb is longer than it is wide. This tells the driver how much longer.
Percentage represented by an integer.
Integer value. Defaults to 70.


Zones

Divide the touchpad into "zones". Clicking the integrated button in one of these zones will send the button event configured for each {First, Second, Third}ZoneButton. The driver will only add zones for the ZoneButton values that are enabled. The zone splitting start from the left to right using the first to third value. So enabling only SecondZoneButton and ThirdZoneButton will create two zones, the left-middle part will fire SecondZoneButton and the middle-right part ThirdZoneButton.

ButtonZonesEnable Whether or not to enable button zones. If button zones are enabled then the trackpad will be split into one, two, or three vertical zones. Boolean value. Defaults to false.

FirstZoneButton The button to emulate when the zone is pressed. This is the leftmost part of the pad. Integer value. A value of 0 disables this zone split.
Integer value. Defaults to 1.

SecondZoneButton The button to emulate when the zone is pressed. This will float to the right of the leftmost zone. Integer value. A value of 0 disables this zone split.
Integer value. Defaults to 2.

ThirdZoneButton The button to emulate when the zone is pressed. This will float to the right of the leftmost zone. Integer value. A value of 0 disables this zone split.
Integer value. Defaults to 0.

LimitButtonZonesToBottomEdge Restrict button zones inside the EdgeBottom area. So instead of enabling zones on the full pad height, the zone is limited to the percentage set for the EdgeBottom.
Boolean value. Default to false.


Physical click

ClickFinger0 Which button to emulate when no valid finger placement is touching the trackpad during a click, as on "EdgeBottom".
Integer value. A value of 0 disables one-touch emulation. Defaults to 0.

ClickFinger1 Which button to emulate when one finger is touching the trackpad during a click.
Integer value. A value of 0 disables one-touch emulation. Defaults to 1.

ClickFinger2 Which button to emulate when two fingers are touching the trackpad during a click.
Integer value. A value of 0 disabled one-touch emulation. Defaults to 2.

ClickFinger3 Which button to emulate when three fingers are touching the trackpad during a click.
Integer value. A value of 0 disabled one-touch emulation. Defaults to 3.

ButtonMoveEmulate Whether or not to count the moving finger when emulating button clicks. Useful to disable if you use two hands on trackpad.
Boolean value. Defaults to true.

ButtonTouchExpire How long (in ms) to consider a touching finger as part of button emulation. A value of 0 will not expire touches.
Integer value. Defaults to 100.


Tap clicking

TapButton1 Which button to emulate for one-finger tapping. Integer value. A value of 0 disables one-finger tapping.
Integer value. Defaults to 1.

TapButton2 Which button to emulate for two-finger tapping. Integer value. A value of 0 disables two-finger tapping.
Integer value. Defaults to 3.

TapButton3 Which button to emulate for three-finger tapping. Integer value. A value of 0 disables three-finger tapping.
Integer value. Defaults to 2.

TapButton4 Which button to emulate for four-finger tapping. Integer value. A value of 0 disables three-finger tapping.
Integer value. Defaults to 0.

ClickTime When tapping, how much time to hold down the emulated button.
Integer value representing milliseconds. Defaults to 50.

MaxTapTime The amount of time to wait for incoming touches after first one before counting it as emulated button click.
Integer value representing milliseconds. Defaults to 120.

MaxTapMove How far a touch is allowed to move before counting it is no longer considered a tap.
Integer value. Defaults to 400.

Gesture


Basic

GestureClickTime When a gesture triggers a click, how much time to hold down the emulated button. Integer value representing milliseconds. Defaults to 10.

GestureWaitTime Touches are allowed to transition from one gesture to another. For example, you may go from scrolling to swiping without releasing your fingers from the pad. This value is the amount of time you must be performing the new gesture before it is triggered. This prevents accidental touches from triggering other gestures.
Integer value representing milliseconds. Defaults to 100.


Two fingers Scrolling

ScrollDistance For two finger scrolling. This sets the speed of your scrolling: the lower the number, the faster you scroll. Technically, it is how far you must move your fingers before a button click registering scrolling is triggered. Integer value. Defaults to 150.

ScrollClickTime For two finger scrolling. How long button triggered by scrolling will be hold down. A value of 0 will hold button down till end of gesture. 0 - emit button click only once pre "instance" of gesture. Integer value representing milliseconds.
Integer value. Defaults to 20.

ScrollSensitivity For two finger scrolling. Sensitivity (movement speed) of pointer during two finger scrolling. A value of 0 disables pointer movement during gesture. Integer value expressed as parts per thousand of normal sensivity. A value of 1000 results with normal movement speed. Integer value. Defaults to 0.

ScrollUpButton For two finger scrolling. The button that is triggered by scrolling up.
Integer value. A value of 0 disables scrolling up. Defaults to 4.

ScrollDownButton For two finger scrolling. The button that is triggered by scrolling down.
Integer value. A value of 0 disables scrolling down. Defaults to 5.

ScrollLeftButton For two finger scrolling. The button that is triggered by scrolling left.
Integer value. A value of 0 disables scrolling left. Defaults to 6.

ScrollRightButton For two finger scrolling. The button that is triggered by scrolling right.
Integer value. A value of 0 disables scrolling right. Defaults to 7.

ScrollSmooth For two finger scrolling. Whether to generate high precision scroll events.
Boolean value. Defaults to 1. Property: "Trackpad High Smooth Scroll"

ScrollCoastDuration How long after finished scrolling movement should be continued. Works only with smooth scrolling enabled.
Floating value representing miliseconds. Defaults to 200.0. Property: "Trackpad Scroll Coasting"

ScrollCoastEnableSpeed How fast scroll should be to enable coasting feature.
Floating value. Defaults to 0.1. Property: "Trackpad Scroll Coasting"

ScrollCoastNoBoost Disable boosting on second scroll gesture during coasting Boolean value. Defaults to false. Property: "Trackpad Scroll Coasting"

ScrollCoastEase Apply easing effect on coasting Boolean value. Defaults to false. Property: "Trackpad Scroll Coasting"


Three fingers swipe

SwipeDistance For three finger swiping. How far you must move your fingers before a button click is triggered.
Integer value. Defaults to 700.

SwipeClickTime For three finger swiping. How long button triggered by swiping will be hold down.
Integer value representing milliseconds. Defaults to 300.

SwipeSensitivity For three finger scrolling. Sensitivity (movement speed) of pointer during three finger scrolling. A value of 0 disables pointer movement during gesture.
Integer value expressed as parts per thousand of normal sensivity.
A value of 1000 results with normal movement speed. Defaults to 0.

SwipeUpButton For three finger swiping. The button that is triggered by swiping up.
Integer value. A value of 0 disables swiping up. Defaults to 8.

SwipeDownButton For three finger swiping. The button that is triggered by swiping down.
Integer value. A value of 0 disables swiping down. Defaults to 9.

SwipeLeftButton For three finger swiping. The button that is triggered by swiping left.
Integer value. A value of 0 disables swiping left. Defaults to 10.

SwipeRightButton For three finger swiping. The button that is triggered by swiping right.
Integer value. A value of 0 disables swiping right. Defaults to 11.


Four fingers swipe

Swipe4Distance For four finger swiping. How far you must move your fingers before a button click is triggered.
Integer value. Defaults to 700.

Swipe4ClickTime For four finger swiping. How long button triggered by swiping will be hold down.
Integer value representing milliseconds. Defaults to 300.

Swipe4Sensitivity For four finger scrolling. Sensitivity (movement speed) of pointer during four finger scrolling. A value of 0 disables pointer movement during gesture.
Integer value expressed as parts per thousand of normal sensivity.
A value of 1000 results with normal movement speed. Defaults to 0.

Swipe4UpButton For four finger swiping. The button that is triggered by swiping up.
Integer value. A value of 0 disables swiping up. Defaults to 8.

Swipe4DownButton For four finger swiping. The button that is triggered by swiping down.
Integer value. A value of 0 disables swiping down. Defaults to 9.

Swipe4LeftButton For four finger swiping. The button that is triggered by swiping left.
Integer value. A value of 0 disables swiping left. Defaults to 10.

Swipe4RightButton For four finger swiping. The button that is triggered by swiping right.
Integer value. A value of 0 disables swiping right. Defaults to 11.


Edge Scrolling - One finger

Should be used in conjuction with the Edge disabling options.

EdgeScrollDist For one finger edge scrolling. How far you must move your finger on edge before a button click is triggered.
Integer value. Defaults to 105.

EdgeScrollClickTime For one finger edge scrolling. How long button triggered by edge scrolling will be hold down. A value of 0 will hold button down till end of gesture.
0 - emit button click only once pre "instance" of gesture.
Integer value representing milliseconds. Defaults to 20.

EdgeScrollSensitivity For one finger edge scrolling. Sensitivity (movement speed) of pointer during one finger scrolling. A value of 0 disables pointer movement during gesture.
Integer value expressed as parts per thousand of normal sensivity.
A value of 1000 results with normal movement speed. Defaults to 0.

EdgeScrollUpButton For one finger edge scrolling. The button that is triggered by edge scrolling up.
Integer value. A value of 0 disables scrolling up. Defaults to 4.

EdgeScrollDownButton For one finger edge scrolling. The button that is triggered by edge scrolling down.
Integer value. A value of 0 disables scrolling down. Defaults to 5.

EdgeScrollLeftButton For one finger edge scrolling. The button that is triggered by edge scrolling left.
Integer value. A value of 0 disables scrolling left. Defaults to 6.

EdgeScrollRightButton For one finger edge scrolling. The button that is triggered by edge scrolling right.
Integer value. A value of 0 disables scrolling right. Defaults to 7.


Pinch scaling - Two fingers

ScaleDistance For pinch scaling. How far you must move your fingers before a button click is triggered.
Integer value. Defaults to 150.

ScaleUpButton For pinch scaling. The button that is triggered by scaling up.
Integer value. A value of 0 disables scaling up. Defaults to 12.

ScaleDownButton For pinch scaling. The button that is triggered by scaling down.
Integer value. A value of 0 disables scaling down. Defaults to 13.


Rotation - Two fingers

RotateDistance For two finger rotation. How far you must move your fingers before a button click is triggered.
Integer value. Defaults to 150.

RotateLeftButton For two finger rotation. The button that is triggered by rotating left.
Integer value. A value of 0 disables rotation left. Defaults to 14.

RotateRightButton For two finger rotation. The button that is triggered by rotating right.
Integer value. A value of 0 disables rotation right. Defaults to 15.


Edge disabling

EdgeSize DEPRECATED. The size of an area around the trackpad where new touches are ignored (fingers traveling into this area from above will still be tracked).
This is represented as a percentage of the total trackpad height.
Integer value. Defaults to 0.
Value set here is overwriten by EdgeLeftSize, EdgeRightSize, EdgeTopSize and EdgeBottomSize

EdgeTopSize The size of an area at the top of the trackpad where new touches are ignored (fingers travelling into this area from the bottom will still be tracked).
Integer value representing a percentage of the total trackpad height. Defaults to 0.

EdgeBottomSize The size of an area at the bottom of the trackpad where new touches are ignored (fingers travelling into this area from the top will still be tracked).
Integer value representing a percentage of the total trackpad height. Defaults to 10.

EdgeLeftSize The size of an area at the left of the trackpad where new touches are ignored (fingers travelling into this area from the right will still be tracked).
Integer value representing a percentage of the total trackpad width. Defaults to 0.

EdgeRightSize The size of an area at the right of the trackpad where new touches are ignored (fingers travelling into this area from the left will still be tracked).
Integer value representing a percentage of the total trackpad width. Defaults to 0.


Special features

Hold1Move1StationaryButton For two finger hold-and-move functionality. The button that is triggered by holding one finger and moving another one.
Integer value. A value of 0 disables hold-and-move.
Value of 0 disables this functionality.
Defaults to 1.

Hold1Move1StationaryMaxMove For two finger hold-and-move functionality. Fow far stationary finger can be moved berfore gesture invalidation.
Integer value. Default to 20.

TapDragEnable Whether or not to enable tap-to-drag functionality.
Boolean value. Defaults to true.

TapDragTime The tap-to-drag timeout. This is how long the driver will wait after a single tap for a movement event before sending the click.
Integer value representing milliseconds. Defaults to 350.

TapDragWait How long after detecting movement to trigger a button down event. During this time pointer movement will be disabled. Increase this value if you find you're draggin when you don't wish it.
Integer value representing milliseconds. Defaults to 40.

TapDragDist How far the finger is allowed to move during drag wait time. If the finger moves farther than this distance during the wait time then dragging will be canceled and pointer movement will resume.
Integer value. Defaults to 200.

TapDragLockTimeout This is how long the driver will wait after initial drag in 'drag ready' state in which it will be able to resume previous drag without additional up, down sequence.
Value of 0 disables this functionality.
Values of less than zero will make mtrack require additional tap to finish drag by sending button up.
Integer value representing milliseconds. Defaults to 500.

AxisXInvert Whether or not to invert the X axis.
Boolean value. Defaults to false.

AxisYInvert Whether or not to invert the Y axis.
Boolean value. Defaults to false.

Tips

Swipe to drag

To setup swipe to drag functionality you have to choose which swipe gesture (Scroll, Swipe, Swipe4) will be used for dragging.
Example configuration for three finger drag:

    Option "SwipeDistance" "1"
    Option "SwipeLeftButton" "1"
    Option "SwipeRightButton" "1"
    Option "SwipeUpButton" "1"
    Option "SwipeDownButton" "1"
    Option "SwipeClickTime" "0"
    Option "SwipeSensitivity" "1000"

This will enable dragging with three fingers. Change sensitivity for faster/slower movements. Scroll, and Swipe4 are also supported.

Hold and move

Hold down one finger in place to initiate hold-and-move gesture. Then move another finger to drag configured button. Gesture will last as long as fist finger (a.k.a. stationary finger) will be held down in place.

Increase TapDragDist to give stationary finger more freedom. Set Hold1Move1StationaryButton to 0 to disable, set to other value to send button other than "1".

Persistent dragging

If you're using lot of tools that require dragging you can make it a little bit easier by enabling persistent tap-to-drag:

    Option "TapDragLockTimeout" "-1"

With that change you will have to perform additional tap when dragging with tap-to-drag. Other positive values will let you continue yor drag within specified time.

Enabling soft button

Basic

If you like to keep a finger on the bottom of the pad to click and use another one to move the cursor, you should enable edge restriction and ClickFinger0 parameters.

    Option "EdgeBottomSize" "20"    # Disable tap and movement detection in the bottom 20% of the pad
    Option "ClickFinger0" "1"       # Enable clicking action "1" when no finger is detected

You could also use ClickFinger0 with EdgeTop/Right/LeftSize.

Advanced

If you want more than one button in the bottom edge, you need to use a more
advanced configuration. It will enable you use up to 3 buttons inside that edge.

    Option "ButtonZonesEnable" "true"               # Enable "Zones"
    Option "LimitButtonZonesToBottomEdge" "true"    # Limit the zones to the bottom edge
    Option "EdgeBottomSize" "20"                    # Disable tap and movement detection in the bottom 20% of the pad

    # Zones stack from left to right inside the 20% height defined above
    Option "FirstZoneButton" "1"   # Left part fire click 1
    Option "SecondZoneButton" "3"   # Middle part fire click 3
    Option "ThirdZoneButton" "2"   # Right part fire click 2

xf86-input-mtrack's People

Contributors

0cwa avatar alexbers avatar alexwilczewski avatar chhanganivarun avatar connermcd avatar dhr avatar einstein- avatar jnevens avatar lekensteyn avatar p2rkw avatar patrakov avatar paulthomson avatar pckilgore avatar roufamatic avatar rynbrd avatar schuhumi avatar shlevy avatar sidequestboy avatar tarkh avatar thomastanck avatar vanilla-wow-addons avatar wanjam avatar xavierhd avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

xf86-input-mtrack's Issues

Сonfused vertical and horizontal scroll labels

Hi,

It seems that vertical and horizontal scroll labels are confused. It causes an unpredictable scrolling in applications that use Qt framework.

When mouse enters Qt window, QXcbConnection::updateScrollingDevice function is executed (http://code.qt.io/cgit/qt/qtbase.git/tree/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp?h=5.6#n860). This function enumerates evaluators, looks for valuator with valuatorAtom == QXcbAtom::RelVertScroll label and updates scrollingDevice.lastScrollPosition.

When labels are confused, the vertical scroll position is taken from valuator that tracks horizontal scroll position.

Here is a patch: alexbers@05b3176

Not working on X 1.18

I just updated to X 1.18 and at the moment I'm having to remove the mtrack driver in order for my touchpad to work.
I'm running arch on a macbook air.

Segfault after resuming from suspend on 0.4.1

After upgrading to 0.4.1, I encounter the following issue;
If I suspend my machine and wake it again xorg will segfault on the first keypress (not button press on trackpad)

[    35.114] (EE) Backtrace:
[    35.114] (EE) 0: /usr/bin/X (xorg_backtrace+0x4a) [0x591c2a]
[    35.114] (EE) 1: /usr/bin/X (0x400000+0x195949) [0x595949]
[    35.114] (EE) 2: /lib64/libpthread.so.0 (0x7fceb1ada000+0x10f40) [0x7fceb1aeaf40]
[    35.114] (EE) 3: /usr/bin/X (TimerSet+0xcb) [0x58f30b]
[    35.114] (EE) 4: /usr/bin/X (AccessXFilterPressEvent+0x242) [0x545622]
[    35.114] (EE) 5: /usr/bin/X (0x400000+0x174979) [0x574979]
[    35.115] (EE) 6: /usr/bin/X (mieqProcessInputEvents+0x99) [0x574ac9]
[    35.115] (EE) 7: /usr/bin/X (ProcessInputEvents+0x19) [0x477289]
[    35.115] (EE) 8: /usr/bin/X (0x400000+0x35886) [0x435886]
[    35.115] (EE) 9: /usr/bin/X (0x400000+0x39b08) [0x439b08]
[    35.115] (EE) 10: /lib64/libc.so.6 (__libc_start_main+0xf1) [0x7fceb17641e1]
[    35.115] (EE) 11: /usr/bin/X (_start+0x2a) [0x42377a]
[    35.115] (EE) 
[    35.115] (EE) Segmentation fault at address 0x8
[    35.115] (EE) 
Fatal server error:
[    35.115] (EE) Caught signal 11 (Segmentation fault). Server aborting
[    35.115] (EE) 

The interesting part is, that if i leave the system idle for about 10 minutes before closing the lid, it will wake without segfaulting on the first key press.

Downgrading to 0.3.1 will successfully mitigate the issue.

I've uploaded the full logs of a crashing session as gist: https://gist.github.com/m4rcu5/1c4f753e799a4f9fa3b55ecb8b55c42a

Any idea what could be going on here?

Tap Drag Lock Timeout

I can't find a way to enable behaviour from libinput driver - Tap Drag Lock Timeout. Is it possible with this driver? If not could you add support for it?

Tap Drag Lock Timout is time that TapDrag waits for your finger to re-touch touchpad during tap-to-drag so that you can move things for loooong distances, selecting really long text.

The only similar behaviour I found is emulating dragging with keyboard cursor keys.
My current settings:
xinput list-props 11
Device 'ELAN1200:00 04F3:3022 Touchpad':
Device Enabled (141): 1
Coordinate Transformation Matrix (143): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
Device Accel Profile (276): 0
Device Accel Constant Deceleration (277): 1.000000
Device Accel Adaptive Deceleration (278): 1.000000
Device Accel Velocity Scaling (279): 10.000000
Trackpad Disable Input (280): 0
Trackpad Sensitivity (281): 0.600000
Trackpad Touch Pressure (282): 5, 5
Trackpad Button Settings (283): 1, 1
Trackpad Button Emulation Settings (284): 0, 1, 100
Trackpad Button Emulation Values (285): 3, 2, 0
Trackpad Tap Settings (286): 5, 120, 400
Trackpad Tap Button Emulation (287): 1, 3, 2, 0
Trackpad Thumb Detection (288): 0, 0
Trackpad Thumb Size (289): 25, 70
Trackpad Palm Detection (290): 0, 0
Trackpad Palm Size (291): 40
Trackpad Gesture Settings (292): 10, 100
Trackpad Smooth Scroll (293): 1
Trackpad Scroll Settings (294): 150, 20, 0
Trackpad Scroll Buttons (295): 4, 5, 6, 7
Trackpad Swipe Settings (296): 700, 300, 0
Trackpad Swipe Buttons (297): 8, 9, 10, 11
Trackpad Swipe4 Settings (298): 700, 300, 0
Trackpad Swipe4 Buttons (299): 0, 0, 0, 0
Trackpad Scroll Coasting (300): 0.400000, 400.000000
Trackpad Scale Distance (301): 150
Trackpad Scale Buttons (302): 12, 13
Trackpad Rotate Distance (303): 150
Trackpad Rotate Buttons (304): 14, 15
Trackpad Hold1Move1 Stationary Settings (305): 20, 1
Trackpad Hold1Move1 Settings (306): 1, 0, 1000
Trackpad Hold1Move1 Buttons (307): 1, 1, 1, 1
Trackpad Drag Settings (308): 1, 350, 40, 200
Trackpad Axis Inversion (309): 0, 0
Trackpad Edge Size (310): 10

Gentoo.

Kinetic scrolling

It would be awesome if mtrack could do what synaptics/OS X do when scrolling - when the scroll gesture is fast and short, it keeps the view scrolling even after the fingers are lifted from the touchpad while putting the fingers back on the touchpad stops the scrolling.

Or is this already possible? I haven't figured out how to set that...

Btw. thanks for your new work on mtrack, good stuff!

Scroll with 2 fingers regardless of current motion

When I move my finger around on the trackpad (move pointer), and then at some point, put down my second finger for scrolling, it doesn't scroll, it just continues moving the pointer.

The use case is when my 2nd finger was too close to (or on) the edge to be recognized, but once my 2nd finger enters the trackpad, I would expect it to start scrolling rather than continue just moving the pointer.

This does actually already appear to happen, but there's a huge delay, more than GestureWaitTime, and it's not configurable as far as I can tell.

Config request: Add option to only set BottomEdge size

Right now there is only an option to set the edge for the whole trackpad, since I like to rest my thumb on the trackpad, or hold a finger on the button area, I need to set the Edge-option.

I have the Edge-option at 15%, this causes me to miss my scroll area on the trackpad from time to time. I Would like to set my Edge property to 15-20% for the bottom edge, and 0 for the other sides.

Thumb detection

First of all: Thank you for forking mtrack. You have fixed so many issues for me!

Maybe I'm just using wrong settings but whenever I touch the bottom edge of the trackpad with my thumb after my index finger is on the pad, the motion is stopped for a short time. Is there any way to completely ignore the bottom edge?

Below my configuration (most of it is default).

Section "InputClass"
  Identifier "Touchpads"
  Driver "mtrack"
  MatchIsTouchpad "on"
  MatchDevicePath "/dev/input/event*"
  Option "Sensitivity" "0.38"
  Option "TapButton1" "1"
  Option "TapButton2" "3"
  Option "TapButton3" "2"
  Option "TapButton4" "0"
  Option "ClickFinger1" "1"
  Option "ClickFinger2" "3"
  Option "ButtonMoveEmulate" "false"
  Option "ButtonIntegrated" "true"
  Option "ButtonEnabled" "true"
  Option "ClickTime" "25"
  Option "BottomEdge" "50"
  Option "FingerHigh" "3"
  Option "FingerLow" "1"
  Option "IgnoreThumb" "true"
  Option "IgnorePalm" "true"
  Option "TapDragEnable" "false"
  Option "TapDragWait" "100"
  Option "ScrollUpButton" "4"
  Option "ScrollDownButton" "5"
  Option "ScrollDistance" "1"
  Option "SwipeDistance" "75"
  Option "SwipeLeftButton" "1"
  Option "SwipeRightButton" "1"
  Option "SwipeUpButton" "1"
  Option "SwipeDownButton" "1"
  Option "SwipeClickTime" "0"
  Option "SwipeSensitivity" "1000"
  Option "ThumbSize" "20"
EndSection

Not working

Well, i have to say, i'm quite a beginner, so beware.

tl;dr touchpad not recognized, no logs available(!?)

i cloned this git to my arch machine and did
./configure
sudo make && make install
which gave me no errors. Two files are output to /usr/local/lib/xorg/modules/input
(i also tried copying those to another directory to make X find them. yet, nothing)
Then i configured the already existing 90-libinput.conf in /usr/share/X11/xorg.conf.d according to the Readme of this git (Identifier Touchpads, driver mtrack, matchistouchpad on)

after logoff or restart, the cursor wont move. i tried to look for errors in the log, but there's no log in /var/log and journalctl _COMM=Xorg doesn't give anything either. Also $xinput list does not list the device at all. Oh Xorg -version is 1.18.

Am I doin something not quite right?

synaptics 3/4 finger gestures

First, thanks for the hard work in keeping this project up!

Would you consider adding handling of Synaptics' poor reporting of multitouch gestures?

As evidenced by evtest, Synaptics unfortunately reports third, and higher, tap as a sequence of BTN_TOUCH (or BTN_FINGER) followed by BTN_TOOL_TRIPLETAP (or BTN_TOOL_QUADTAP, etc...).

Event: time 1513311070.511217, type 3 (EV_ABS), code 47 (ABS_MT_SLOT), value 0
Event: time 1513311070.511217, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 1892
Event: time 1513311070.511217, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 3141
Event: time 1513311070.511217, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 3851
Event: time 1513311070.511217, type 3 (EV_ABS), code 47 (ABS_MT_SLOT), value 1
Event: time 1513311070.511217, type 3 (EV_ABS), code 57 (ABS_MT_TRACKING_ID), value 1893
Event: time 1513311070.511217, type 3 (EV_ABS), code 53 (ABS_MT_POSITION_X), value 4276
Event: time 1513311070.511217, type 3 (EV_ABS), code 54 (ABS_MT_POSITION_Y), value 1984
Event: time 1513311070.511217, type 3 (EV_ABS), code 58 (ABS_MT_PRESSURE), value 48
Event: time 1513311070.511217, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
Event: time 1513311070.511217, type 3 (EV_ABS), code 0 (ABS_X), value 3141
Event: time 1513311070.511217, type 3 (EV_ABS), code 1 (ABS_Y), value 3851
Event: time 1513311070.511217, type 3 (EV_ABS), code 24 (ABS_PRESSURE), value 56
Event: time 1513311070.511217, type 1 (EV_KEY), code 334 (BTN_TOOL_TRIPLETAP), value 1

libinput does handle it correctly (relevant code in libinput/src/evdev-mt-touchpad.c around tp_fake_finger...) but lacks mtrack's other features, notably superb kinetic scrolling.

Thanks for the consideration!

bcm5974/mac 4 finger swipe

Don't know if this is a hardware limitation or complete config fail but I can seem to register 4 finger anything.

I've set TapButton4 to a range of button numbers, same for the Swipe4XButton options but easystroke won't detect anything at all when trying to record the gestures (3 fingers records fine)

Any idea where I might be going wrong? I want to 4 finger swipe left/right to trigger key commands left/right

I'm using the prebuilt v0.4.1 deb on unbuntu gnome

Tap drag triggers double click

Hi!
I'm very happy with mtrack so far. However, tap drag does not seem to work correctly for me. When I tap once, then touch again and move my finger, apart from dragging, it also triggers a double click. So whenever I want to move a folder in my file explorer, it gets opened because of the double click.
Is there something wrong with my configuration? Any help is appreciated.

Device 'Synaptics TM3242-001':
Device Enabled (141): 1
Coordinate Transformation Matrix (143): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
Device Accel Profile (275): 0
Device Accel Constant Deceleration (276): 1.000000
Device Accel Adaptive Deceleration (277): 1.000000
Device Accel Velocity Scaling (278): 10.000000
Trackpad Disable Input (279): 0
Trackpad Sensitivity (280): 0.650000
Trackpad Touch Pressure (281): 5, 5
Trackpad Button Settings (282): 1, 1
Trackpad Button Emulation Settings (283): 1, 1, 100
Trackpad Button Emulation Values (284): 1, 3, 0
Trackpad Tap Settings (285): 50, 120, 400
Trackpad Tap Button Emulation (286): 1, 3, 2, 0
Trackpad Thumb Detection (287): 0, 0
Trackpad Thumb Size (288): 25, 70
Trackpad Palm Detection (289): 1, 0
Trackpad Palm Size (290): 40
Trackpad Gesture Settings (291): 10, 100
Trackpad Smooth Scroll (292): 1
Trackpad Scroll Settings (293): 20, 40, 0
Trackpad Scroll Buttons (294): 4, 5, 6, 7
Trackpad Swipe Settings (295): 700, 300, 0
Trackpad Swipe Buttons (296): 8, 9, 10, 11
Trackpad Swipe4 Settings (297): 700, 300, 0
Trackpad Swipe4 Buttons (298): 0, 0, 0, 0
Trackpad Scroll Coasting (299): 0.100000, 500.000000
Trackpad Edge Scroll Settings (300): 105, 20, 0, 4, 5, 6, 7
Trackpad Edge Sizes (301): 0, 10, 0, 0
Trackpad Scale Distance (302): 150
Trackpad Scale Buttons (303): 12, 13
Trackpad Rotate Distance (304): 150
Trackpad Rotate Buttons (305): 14, 15
Trackpad Hold1Move1 Stationary Settings (306): 20, 1
Trackpad Hold1Move1 Settings (307): 1, 0, 1000
Trackpad Hold1Move1 Buttons (308): 1, 1, 1, 1
Trackpad Drag Settings (309): 1, 350, 40, 200
Trackpad Axis Inversion (310): 0, 0

Section "InputClass"
MatchIsTouchpad "on"
Identifier "Touchpads"
Driver "mtrack"
Option "Sensitivity" "0.65"
Option "ClickFinger1" "1"
Option "ClickFinger2" "3"
Option "ClickFinger3" "0"
Option "ButtonZonesEnable" "true"
Option "ScrollDistance" "20"
Option "ScrollCoastDuration" "500"
Option "ScrollClickTime" "40"
Option "IgnorePalm" "true"
Option "TapDragEnable" "true
EndSection

Unwanted tap clicks still occur after setting "TapButton" settings to 0

I'm using Arch Linux on a 2012 MacBook Air with the xf86-input-mtrack-git package. Despite setting all TapButton settings to 0, I'm still getting extraneous tap-clicks when I leave one finger on the touchpad and touch a second finger to it. This issue can be reproduced in xinput test with one finger on the touchpad and touching a second finger to it repeatedly, causing several sequences of button press 1 immediately followed by button release 1 with several motion events between them.

I might have accidentally missed something in the config, but trying to tap with a single finger or two fingers at once causes no button presses.

Here is the output of xinput list-props:

Device 'bcm5974':
    Device Enabled (138):   1
    Coordinate Transformation Matrix (140): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    Device Accel Profile (271): 0
    Device Accel Constant Deceleration (272):   1.000000
    Device Accel Adaptive Deceleration (273):   1.000000
    Device Accel Velocity Scaling (274):    10.000000
    Trackpad Disable Input (275):   0
    Trackpad Sensitivity (276): 0.500000
    Trackpad Touch Pressure (277):  5, 5
    Trackpad Button Settings (278): 1, 1
    Trackpad Button Emulation Settings (279):   0, 1, 100
    Trackpad Button Emulation Values (280): 3, 2, 0
    Trackpad Tap Settings (281):    50, 120, 1
    Trackpad Tap Button Emulation (282):    0, 0, 0, 0
    Trackpad Thumb Detection (283): 0, 0
    Trackpad Thumb Size (284):  25, 70
    Trackpad Palm Detection (285):  0, 0
    Trackpad Palm Size (286):   40
    Trackpad Gesture Settings (287):    10, 100
    Trackpad Smooth Scroll (288):   1
    Trackpad Scroll Settings (289): 250, 20, 0
    Trackpad Scroll Buttons (290):  5, 4, 7, 6
    Trackpad Swipe Settings (291):  700, 300, 0
    Trackpad Swipe Buttons (292):   8, 9, 10, 11
    Trackpad Swipe4 Settings (293): 700, 300, 0
    Trackpad Swipe4 Buttons (294):  0, 0, 0, 0
    Trackpad Scroll Coasting (295): 0.100000, 200.000000
    Trackpad Scale Distance (296):  150
    Trackpad Scale Buttons (297):   12, 13
    Trackpad Rotate Distance (298): 150
    Trackpad Rotate Buttons (299):  14, 15
    Trackpad Hold1Move1 Stationary Settings (300):  1, 0
    Trackpad Hold1Move1 Settings (301): 1, 0, 1000
    Trackpad Hold1Move1 Buttons (302):  1, 1, 1, 1
    Trackpad Drag Settings (303):   0, 1, 100, 200
    Trackpad Axis Inversion (304):  0, 0
    Trackpad Edge Size (305):   10

And 10-mtrack.conf:

Section "InputClass"
    MatchIsTouchpad "on"
    Identifier      "Touchpads"
    Driver          "mtrack"
    Option          "Sensitivity" "0.50"
    Option          "TapButton1" "0"  
    Option          "TapButton2" "0"
    Option          "TapButton3" "0"
    Option          "TapButton4" "0"
    Option          "MaxTapMove" "0"
    Option          "ScrollUpButton" "5"
    Option          "ScrollDownButton" "4"
    Option          "ScrollLeftButton" "7"
    Option          "ScrollRightButton" "6"
    Option          "ScrollDistance" "250"
    Option          "TapDragEnable" "no"
    Option          "TapDragTime" "0"
    Option          "TapDragWait" "100"
    Option          "Hold1Move1StationaryButton" "0"
    Option          "Hold1Move1StationaryMaxMove" "1"
EndSection

No left click on master

I just upgraded from v0.4.1 to master, upon which my single finger click changed to a right mouse click, and the two finger click seems to have changed to middle mouse.
This leaves me without a left mouse click option.

Hardware used is a Macbook Pro Retina 2015.

Below is my unchanged Xorg config for the mtrack module:

Section "InputClass"
  MatchIsTouchpad "on"
  Identifier "Touchpads"
  Driver "mtrack"

  # Adjusts the sensitivity (movement speed) of the touchpad. This is a real
  # number greater than or equal to zero. Default is 1. A value of 0 will
  # disable pointer movement.
  Option "Sensitivity" "0.55"

  # Defines the pressure at which a finger is detected as a touch. This is a
  # percentage represented as an integer. Default is 5.
  Option "FingerHigh" "5"

  # Defines the pressure at which a finger is detected as a release. This is a
  # percentage represented as an integer. Default is 5.
  Option "FingerLow" "2"

  # Whether or not to ignore touches that are determined to be thumbs. Boolean
  # value. Defaults to false.
  Option "IgnoreThumb" "false"

  # Whether or not to ignore touches that are determined to be palms. Boolean
  # value. Defaults to false.
  Option "IgnorePalm" "false"

  # Whether or not to disable the entire trackpad when a palm is touching.
  # Boolean value. Defaults to false.
  Option "DisableOnPalm" "true"

  # The size of an area at the bottom of the trackpad where new touches are
  # ignored (fingers traveling into this area from above will still be
  # tracked). This is represented as a percentage of the total trackpad height.
  # Defaults to 10.
  Option "BottomEdge" "25"

  # Whether or not the physical buttons are integrated with the trackpad. If
  # you have a one-piece trackpad like on newer MacBooks, this should be set to
  # true. Button emulation depends on this value being correct. Boolean value.
  # Defaults to true.
  Option "ButtonIntegrated" "true"

  # Whether or not to count the moving finger when emulating button clicks.
  # Useful to disable if you use two hands on trackpad. Boolean value. Defaults
  # to true.
  Option "ButtonMoveEmulate" "true"

  # Which button to emulate for one-finger tapping. Integer value. A value of 0
  # disables one-finger tapping. Defaults to 1.
  Option "TapButton1" "0"

  # Which button to emulate for two-finger tapping. Integer value. A value of 0
  # disables two-finger tapping. Defaults to 3.
  Option "TapButton2" "0"

  # Which button to emulate for three-finger tapping. Integer value. A value of
  # 0 disables three-finger tapping. Defaults to 2.
  Option "TapButton3" "0"

  # Which button to emulate for four-finger tapping. Integer value. A value of
  # 0 disables three-finger tapping. Defaults to 0.
  Option "TapButton4" "0"

  # When tapping, how much time to hold down the emulated button. Integer value
  # representing milliseconds. Defaults to 50.
  Option "ClickTime" "25"

  # For two finger scrolling. How far you must move your fingers before a
  # button click is triggered. Integer value. Defaults to 150.
  Option "ScrollDistance" "75"

  # For two finger scrolling. The button that is triggered by scrolling up.
  # Integer value. A value of 0 disables scrolling up. Defaults to 4.
  Option "ScrollUpButton" "5"

  # For two finger scrolling. The button that is triggered by scrolling down.
  # Integer value. A value of 0 disables scrolling down. Defaults to 5.
  Option "ScrollDownButton" "4"

  # For two finger scrolling. The button that is triggered by scrolling left.
  # Integer value. A value of 0 disables scrolling left. Defaults to 6.
  Option "ScrollLeftButton" "7"

  # For two finger scrolling. The button that is triggered by scrolling right. Integer value.
  # A value of 0 disables scrolling right. Defaults to 7.
  Option "ScrollRightButton" "6"

  # For three finger swiping. How far you must move your fingers before a
  # button click is triggered. Integer value. Defaults to 700.
  Option "SwipeDistance" "700"

  # For three finger swiping. The button that is triggered by swiping up.
  # Integer value. A value of 0 disables swiping up. Defaults to 8.
  Option "SwipeUpButton" "0"

  # For three finger swiping. The button that is triggered by swiping down.
  # Integer value. A value of 0 disables swiping down. Defaults to 9.
  Option "SwipeDownButton" "0"

  # For three finger swiping. The button that is triggered by swiping left. 
  # Integer value. A value of 0 disables swiping left. Defaults to 10.
  Option "SwipeLeftButton" "9"

  # For three finger swiping. The button that is triggered by swiping right.
  # Integer value. A value of 0 disables swiping right. Defaults to 11.
  Option "SwipeRightButton" "8"

  # Whether or not to enable tap-to-drag functionality. Boolean value. Defaults to true.
  Option "TapDragEnable" "false"

EndSection

Clickpad clicks always register as left-click and three finger swipe registers as two finger

Clickpad clicks are always registering as left-clicks, and three finger swipes are registering as two finger scrolls.

Device 'SynPS/2 Synaptics TouchPad':
	Device Enabled (138):	1
	Coordinate Transformation Matrix (140):	1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
	Device Accel Profile (268):	0
	Device Accel Constant Deceleration (269):	1.000000
	Device Accel Adaptive Deceleration (270):	1.000000
	Device Accel Velocity Scaling (271):	10.000000
	Trackpad Disable Input (300):	0
	Trackpad Sensitivity (301):	0.500000
	Trackpad Touch Pressure (302):	5, 5
	Trackpad Button Settings (303):	1, 1
	Trackpad Button Emulation Settings (304):	0, 1, 100
	Trackpad Button Emulation Values (305):	1, 3, 2
	Trackpad Tap Settings (306):	50, 120, 400
	Trackpad Tap Button Emulation (307):	1, 3, 0, 0
	Trackpad Thumb Detection (308):	0, 0
	Trackpad Thumb Size (309):	25, 70
	Trackpad Palm Detection (310):	1, 0
	Trackpad Palm Size (311):	40
	Trackpad Gesture Settings (312):	10, 100
	Trackpad Smooth Scroll (313):	1
	Trackpad Scroll Settings (314):	150, 20, 0
	Trackpad Scroll Buttons (315):	5, 4, 7, 6
	Trackpad Swipe Settings (316):	700, 300, 0
	Trackpad Swipe Buttons (317):	8, 9, 10, 11
	Trackpad Swipe4 Settings (318):	700, 300, 0
	Trackpad Swipe4 Buttons (319):	0, 0, 0, 0
	Trackpad Scroll Coasting (320):	0.100000, 200.000000
	Trackpad Scale Distance (321):	150
	Trackpad Scale Buttons (322):	12, 13
	Trackpad Rotate Distance (323):	150
	Trackpad Rotate Buttons (324):	14, 15
	Trackpad Hold1Move1 Stationary Settings (325):	20, 1
	Trackpad Hold1Move1 Settings (326):	1, 0, 1000
	Trackpad Hold1Move1 Buttons (327):	1, 1, 1, 1
	Trackpad Drag Settings (328):	1, 350, 40, 200
	Trackpad Axis Inversion (329):	0, 0
	Trackpad Edge Size (330):	10
Section "InputClass"
    MatchIsTouchpad "on"
    Identifier "Touchpads"
    Driver "mtrack"
    Option "Sensitivity" "0.5"
    Option "IgnorePalm" "on"
    Option "ButtonIntegrated" "on"
    Option "ClickFinger1" "1"
    Option "ClickFinger2" "3"
    Option "ClickFinger3" "2"
    Option "TapButton1" "1"
    Option "TapButton2" "3"
    Option "TapButton3" "2"
    Option "ScrollUpButton" "5"
    Option "ScrollDownButton" "4"
    Option "ScrollLeftButton" "7"
    Option "ScrollRightButton" "6"
    Option "ButtonTouchExpire" "0"
    Option "ScrollSmooth" "on"
    Option "SwipeDistance" "150"

EndSection

Two finger scroll randomly selects texts and clicks

While scrolling with two fingers, the trackpad randomly clicks links and selects texts. It does now happen all the time, just ranomly.

I have tried to remove all tap features, since I do not need it.

Here is my config file:

`Section "InputClass"
MatchIsTouchpad "on"
Identifier "Touchpads"
Driver "mtrack"
Option "IgnoreThumb" "true"
Option "ThumbSize" "15"
Option "IgnorePalm" "true"
Option "ScrollDistance" "25"
Option "ClickFinger1" "1"
Option "ClickFinger2" "3"
Option "ClickFinger3" "0"
Option "EdgeSize" "17"
Option "TapDragEnable" "false"
Option "TapButton1" "0"
Option "TapButton2" "0"
Option "TapButton3" "0"
Option "Hold1Move1StationaryButton" "0"
Option "TapButton4" "0"
Option "ScrollCoastDuration" "400"
Option "ScrollLeftButton" "0"
Option "ScrollRightButton" "0"
Option "ButtonZonesEnable" "1"
EndSection

`

how can i get it work on mint 18.2

i have add the fellowing to /etc/X11/xorg.conf and my touchpad stop to work
Section "InputClass"
MatchIsTouchpad "on"
Identifier "Touchpads"
Driver "mtrack"
EndSection

i try to copy the examples macbook.conf to /etc/X11/xorg.conf and it still can not work
what can i do ?
thanks

Who can tell me the meaning and usage of these options

Forgive my poor English and related knowledge, please...

  • What's the differences between ClickFinger and TapButton?
  • What's the exact meaning of the various button numbers? ( I know button 1 is a normal click, button 2 is a middle click when button 3 is a right click, BUT, what in the world are button 4 to 15 standing for? )

Any answer can be useful for me, thanks!

Natural scrolling option

Having a natural scrolling option like the Synaptics's driver would be awesome.

Can it be added to this driver?

scrolling horizontallly while scrolling vertically (and vice-verse)

As the title says - and same as rynbrd/xf86-input-mtrack#108

Only seems to be a problem when swapping the button numbers for scrolling to achieve natural scrolling. - Scrolling works as expected with the following:

    Option          "ScrollUpButton" "4"
    Option          "ScrollDownButton" "5"
    Option          "ScrollLeftButton" "6"
    Option          "ScrollRightButton" "7"

I originally commented there, but discovered that I was running this fork. Interestingly, I don't get the issue with BlueDragonX's git version, only with this version.

Moving cursor + thumb-click triggers 2-finger click

I have a Surface Book and just configured mtrack and noticed this gesture does not work as well as someone might be used to on a OS X device.

When I move the cursor with a finger and thumb-click (holding the click down, such as when highlighting text) the right-click menu shows up just as if I had done a 2-finger click on the trackpad. This is unfortunate because it means I need to lift my finger completely off the trackpad before thumb-clicking whenever I want to highlight text.

It would be a nice improvement if fingers that are in the bottom edge area were not considered part of the 2-finger click, so the finger moving the mouse does not have to come off the trackpad when clicking.

Here's my xinput --list-props

Device 'Microsoft Surface Keyboard Touchpad':
    Device Enabled (137):   1
    Coordinate Transformation Matrix (139): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    Device Accel Profile (267): 0
    Device Accel Constant Deceleration (268):   1.000000
    Device Accel Adaptive Deceleration (269):   1.000000
    Device Accel Velocity Scaling (270):    10.000000
    Trackpad Disable Input (299):   0
    Trackpad Sensitivity (300): 0.650000
    Trackpad Touch Pressure (301):  12, 1
    Trackpad Button Settings (302): 1, 1
    Trackpad Button Emulation Settings (303):   0, 1, 100
    Trackpad Button Emulation Values (304): 3, 2, 0
    Trackpad Tap Settings (305):    50, 120, 400
    Trackpad Tap Button Emulation (306):    0, 0, 0, 0
    Trackpad Thumb Detection (307): 1, 0
    Trackpad Thumb Size (308):  25, 70
    Trackpad Palm Detection (309):  1, 0
    Trackpad Palm Size (310):   40
    Trackpad Gesture Settings (311):    10, 100
    Trackpad Smooth Scroll (312):   1
    Trackpad Scroll Settings (313): 40, 20, 0
    Trackpad Scroll Buttons (314):  4, 5, 6, 7
    Trackpad Swipe Settings (315):  700, 300, 0
    Trackpad Swipe Buttons (316):   0, 0, 8, 9
    Trackpad Swipe4 Settings (317): 700, 300, 0
    Trackpad Swipe4 Buttons (318):  0, 0, 0, 0
    Trackpad Scroll Coasting (319): 0.100000, 800.000000
    Trackpad Scale Distance (320):  150
    Trackpad Scale Buttons (321):   12, 13
    Trackpad Rotate Distance (322): 150
    Trackpad Rotate Buttons (323):  14, 15
    Trackpad Hold1Move1 Stationary Settings (324):  20, 1
    Trackpad Hold1Move1 Settings (325): 1, 0, 1000
    Trackpad Hold1Move1 Buttons (326):  1, 1, 1, 1
    Trackpad Drag Settings (327):   1, 350, 40, 200
    Trackpad Axis Inversion (328):  0, 0
    Trackpad Edge Size (329):   18

crashes xorg in ubuntu 17.04

i've compiled module for ubuntu 17.04
and tried to use it on my dell laptop with apple trackpad

it works, but crashes x server definitely in few minutes after start
backtrace are different each time, so it seems to be memory corruption

Feature request: wait time after click to allow for movement again.

I have a MacBook Pro. Driver works great so far (thanks for your work!).

When I click the touchpad (physically clicking the touchpad as a whole), it is often accompanied with the cursor jumping a little around. After a couple of minutes testing around when it happens, I guess that this would be fixed by two new wait time options:

  • The time cursor movement is disabled after a click-down.
  • The time a tap should exist (so the time the finger should be on the touchpad) before that tap is allowed to start moving the cursor. This should be typically a very short time (I'm guessing only a couple of milliseconds).

However, I'm not sure if those wait times would be needed if the driver support speed like in OS X. There, increasing the speed of a finger causes a super-linear speedup of the cursor. So basically: moving the finger slowly allows for more precision.

(I just switched to Linux, because of some problems I had. I already tweaked this driver (the original BlueDragonX repo) before, but I'm slammed with work for school right now. If find some time, I could do it as well, but before I start, I wanted to contact you. Especially: what do you suggest to do? Will you do it? If not, but are willing to accept a Pull Request, any guidelines you want me to follow?)

Compatible only with Xorg server versions 1.7 to 1.12?

Device ETPS/2 Elantech Touchpad':
        Device Enabled (138):   1
        Coordinate Transformation Matrix (140): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
        libinput Tapping Enabled (274): 1
        libinput Tapping Enabled Default (275): 0
        libinput Tapping Drag Enabled (276):    1
        libinput Tapping Drag Enabled Default (277):    1
        libinput Tapping Drag Lock Enabled (278):       0
        libinput Tapping Drag Lock Enabled Default (279):       0
        libinput Tapping Button Mapping Enabled (280):  1, 0
        libinput Tapping Button Mapping Default (281):  1, 0
        libinput Accel Speed (282):     0.000000
        libinput Accel Speed Default (283):     0.000000
        libinput Natural Scrolling Enabled (284):       0
        libinput Natural Scrolling Enabled Default (285):       0
        libinput Send Events Modes Available (259):     1, 1
        libinput Send Events Mode Enabled (260):        0, 0
        libinput Send Events Mode Enabled Default (261):        0, 0
        libinput Left Handed Enabled (286):     0
        libinput Left Handed Enabled Default (287):     0
        libinput Scroll Methods Available (288):        1, 1, 0
        libinput Scroll Method Enabled (289):   1, 0, 0
        libinput Scroll Method Enabled Default (290):   1, 0, 0
        libinput Disable While Typing Enabled (291):    1
        libinput Disable While Typing Enabled Default (292):    1
        Device Node (262):      "/dev/input/event8"
        Device Product ID (263):        2, 14
        libinput Drag Lock Buttons (293):       <no items>
        libinput Horizontal Scroll Enabled (294):       1

Does this mean it's incompatible with the current 1.19.1-1 Xorg server? Or is that text from the BlueDragonX:master? I added it from the AUR but it doesn't seem to be working.

Here's my 10-mtrack.conf:

Section "InputClass"
        MatchIsTouchpad "on"
        Identifier      "Touchpads"
        Driver          "mtrack"
        Option          "Sensitivity" "0.60"
        Option          "FingerHigh" "5"
        Option          "FingerLow" "1"
        Option          "IgnoreThumb" "true"
        Option          "ThumbRatio" "70"
        Option          "ThumbSize" "25"
        Option          "IgnorePalm" "true"
        Option          "TapButton1" "0"
        Option          "TapButton2" "0"
        Option          "TapButton3" "0"
        Option          "TapButton4" "0"
        Option          "ClickFinger1" "3"
        Option          "ClickFinger2" "3"
        Option          "ClickFinger3" "3"
        Option          "ButtonMoveEmulate" "false"
        Option          "ButtonIntegrated" "true"
        Option          "ClickTime" "25"
        Option          "BottomEdge" "30"
        Option          "SwipeLeftButton" "8"
        Option          "SwipeRightButton" "9"
        Option          "SwipeUpButton" "0"
        Option          "SwipeDownButton" "0"
        Option          "SwipeDistance" "700"
        Option          "ScrollCoastDuration" "500"
        Option          "ScrollCoastEnableSpeed" ".3"
        Option          "ScrollUpButton" "5"
        Option          "ScrollDownButton" "4"
        Option          "ScrollLeftButton" "7"
        Option          "ScrollRightButton" "6"
        Option          "ScrollDistance" "350"
        Option 			"SwipeDistance" "1"
    	Option 			"SwipeLeftButton" "1"
    	Option 			"SwipeRightButton" "1"
    	Option 			"SwipeUpButton" "1"
    	Option 			"SwipeDownButton" "1"
    	Option 			"SwipeClickTime" "0"
   		Option 			"SwipeSensitivity" "1000"
EndSection

touchpad speed increases when external display is plugged

Hello,
thanks for this great touchpad drivers.
I'm using it on my Lenovo X1 Carbon 5th gen, running Debian Buster.

I noticed that when I plug an external display the cursor speed increases (almost doubles).
Is there anything I can do, besides of course running a shell script that calls xinput to adjust the sensitivity when the external display is plugged?

Thanks

Support touchegg

Does the driver supports touchegg? If so, could you show some configuration which can give possibility to send appropriate messages to it?

Disable h-scroll during v-scroll and vice versa

Is it possible to disable horizontal scrolling while you scroll vertically and vice versa?
This seems to be the standard behavior on OSX with two-finger scroll and is kind of easier.

It happens a lot to me, if I am using half a browser width and pages have a big horizontal scroll, that once I scroll up/down I also move left/right by accident.

Any thoughts on this?

ScrollSmooth does not work together with natural scrolling

I have configured natural scrolling by switching the binding for ScrollUpButton and ScrollDownButton.

e.g.

    Option "ScrollUpButton" "5" # 2 finger swipe up to scroll down
    Option "ScrollDownButton" "4" # 2 finger swipe down to scroll up

I find that when you have ScrollSmooth enabled this doesn't work and I assume it also interfears with the smooth scrolling causing a lot of jerkiness, since they are counterworking eachother. So I scroll down, the smooth scrolling starts and then it scrolls in the opposite direction from my actual scrolling.

Button Zones do not work when thumb is resting on trackpad

I have Button Zones configured as follows (full config here)

    Option "ClickFinger1" "1"
    Option "ClickFinger2" "1"
    Option "ClickFinger3" "3"

The thirds work as expected when clicking with one finger (right third does right click)

When resting a finger on the left third of the trackpad vertically higher than the finger on the right third of the trackpad, clicking performs a right click as expected

However when resting a finger on the left third of the trackpad vertically lower than the finger on the right third of the trackpad, clicking performs a left click.

Thanks,
Evan

EDIT: Attaching xinput-props-bcm5974.txt

EDIT 2: better understanding of when clicking makes a right vs left click

Circular scrolling

One of my favorite features of the xf86-input-synaptics driver is CircularScrolling, which is a feature similar to the chiral scrolling option in some of Synaptics' drivers for Windows.
In particular, there is an excellent patent-free implementation of it available as a patch over in this GitHub project. I would be thrilled if this feature were incorporated into the mtrack driver.

`modprobe -r hid_apple && modprobe hid_apple` breaks driver, not sure how to restore

Possibly due to some other bug, after resuming from hibernation, one of two things happen:

  1. Resume fails due to some inconsistency (not sure how to debug, unrelated)

  2. Resume succeeds at which point, trackpad is working just fine, but as soon as I press any key on my keyboard, xorg crashes. Interestingly enough, I found that if I modprobe -r hid_apple && modprobe hid_apple, it stops crashing in this case.

BUT, if I run modprobe -r hid_apple && modprobe hid_apple, trackpad stops working.

Oddly, the result of running xinput indexes between the keyboard and the trackpad swap places (eg: initially keyboard at 11 and trackpad at 12, after it becomes keyboard at 12 and trackpad at 11). This interaction (as well as list-props on the trackpad field is attached below).

2017-04-19-16 36 48

How do I restore the trackpad after modprobe -r hid_apple && modprobe hid_apple (and the xinput indices swap), which appears to be essential for hibernation?

High power consumption

A few months back I moved from a 2013 MBA to a 2015 MBP. On the latter, the [force] touchpad is consuming about 10W, permanently. I'm wondering if this is something you've seen, or you have any idea if it might be related to the driver or something else.

Have you had a chance to test this specific hardware? Do you know of any way to determine if this very high power usage is normal, or driver-related?

As a reference, everything aside from the touchpad uses 4W (but the touchpad alone uses 10W). On the MBA, the touchpad used an insignificant amount of power, and the computer's total power usage was about 5W.
I measure power consumption without the driver installed. That results in 5W-7W consumption, which is (even on it's worst case), 30% less.

Let me know if I can provide anything that may help triage this, totally willing to help!

Cannot configure device

I can't seem to get mtrack driver loaded, using a HP Laptop Synaptics TouchPad that support 4 finger click + 3 finger swipe in windows

[binary@hermes ~]$ sudo cat /var/log/Xorg.0.log | grep "(EE)"
(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
3.981 BUG: triggered 'if (dev == ((void *)0))'
3.981 BUG: exevents.c:2131 in SetScrollValuator()
3.981
3.981 Backtrace:
3.982 0: /usr/lib/xorg-server/Xorg (SetScrollValuator+0x1c4) [0x526834]
3.983 1: /usr/lib/xorg/modules/input/mtrack_drv.so (_init+0x7d97) [0x7f8746258db7]
3.983 2: /usr/lib/xorg/modules/input/mtrack_drv.so (_init+0x66da) [0x7f874625600a]
3.983 3: /usr/lib/xorg-server/Xorg (xf86DeleteInput+0x1e2) [0x486672]
3.984 4: /usr/lib/xorg-server/Xorg (config_fini+0x102b) [0x4993fb]
3.984 5: /usr/lib/xorg-server/Xorg (config_fini+0x1613) [0x49a683]
3.985 6: /usr/lib/xorg-server/Xorg (config_init+0x9) [0x497af9]
3.985 7: /usr/lib/xorg-server/Xorg (InitInput+0xbf) [0x47adbf]
3.985 8: /usr/lib/xorg-server/Xorg (remove_fs_handlers+0x421) [0x43a611]
3.988 9: /usr/lib/libc.so.6 (__libc_start_main+0xf1) [0x7f874f597741]
3.989 10: /usr/lib/xorg-server/Xorg (_start+0x29) [0x4245f9]
3.990 11: ? (?+0x29) [0x29]
3.990
3.990 BUG: triggered 'if (dev == ((void *)0))'
3.990 BUG: exevents.c:2131 in SetScrollValuator()
3.990
3.990 Backtrace:
3.990 0: /usr/lib/xorg-server/Xorg (SetScrollValuator+0x1c4) [0x526834]
3.991 1: /usr/lib/xorg/modules/input/mtrack_drv.so (_init+0x66da) [0x7f874625600a]
3.991 2: /usr/lib/xorg-server/Xorg (xf86DeleteInput+0x1e2) [0x486672]
3.991 3: /usr/lib/xorg-server/Xorg (config_fini+0x102b) [0x4993fb]
3.992 4: /usr/lib/xorg-server/Xorg (config_fini+0x1613) [0x49a683]
3.992 5: /usr/lib/xorg-server/Xorg (config_init+0x9) [0x497af9]
3.992 6: /usr/lib/xorg-server/Xorg (InitInput+0xbf) [0x47adbf]
3.993 7: /usr/lib/xorg-server/Xorg (remove_fs_handlers+0x421) [0x43a611]
3.994 8: /usr/lib/libc.so.6 (__libc_start_main+0xf1) [0x7f874f597741]
3.994 9: /usr/lib/xorg-server/Xorg (_start+0x29) [0x4245f9]
3.995 10: ? (?+0x29) [0x29]
3.995
3.996 mtrack: cannot configure device
3.996 Couldn't init device "SynPS/2 Synaptics TouchPad"
591.881 kernel bug: Touch jump detected and discarded.
591.901 kernel bug: Touch jump detected and discarded.
12273.977 kernel bug: Touch jump detected and discarded.
12277.168 kernel bug: Touch jump detected and discarded.
12277.168 kernel bug: Touch jump detected and discarded.
12277.580 kernel bug: Touch jump detected and discarded.
12277.580 kernel bug: Touch jump detected and discarded.

Crashes kdeinit5

Hi there,

I'm on Arch and installed the https://aur.archlinux.org/packages/xf86-input-mtrack-git/ Pkg.

Linux psi-nb 4.3.3-2-ARCH #1 SMP PREEMPT Wed Dec 23 20:09:18 CET 2015 x86_64 GNU/Linux
kwin 5.5.3
plasmashell 5.5.3

and SDDM.

After installing the AUR Package i can not login into Plasma anymore.

Xorg.0.log

[     8.287] (**) Option "Device" "/dev/input/mouse1"
[     8.287] (EE) mtrack: cannot configure device
[     8.287] (EE) Couldn't init device "SynPS/2 Synaptics TouchPad"
[     8.287] (II) UnloadModule: "mtrack"

I couldn't find anything helpful in journald log.

Missing function definitions in capabilities.h, include in mtrack-test.c

Apologies if I'm not doing GitHub right (newbie), but I wanted to mention that, in attempting to build the code, I was stopped by implicit declaration warnings because capabilities.h is missing definitions for get_cap_xmin() and get_cap_ymin(). This problem was introduced in commit 6f03cc5.

I also had to include unistd.h in mtrack-test.c in order for main() to be able to make use of close(). Having corrected these two points, the code built for me.

Not sure how others have been building the code without hitting these issues, so I feel like I did something wrong, but I merely ran "./configure" and "make" per usual. Anyway, thanks for continuing to maintain this project; I desperately need it to make this MacBook usable in Ubuntu.

Unable to unhide dock/panel

I'm trying mtrack driver for my touchpad and seams to work well, but I've noticed that I can't unhide dock/panel while I'm using it.
If I switch to libinput driver I can unhide dock normally.

how to debug this?

Thanks for working on this. It appears to be the only likely option right now (in 2018) to support 3-finger drag in linux. :-(

I tried to play with v0.5 for a couple of hours but I couldn't get it to work with the master branch at all. The "swipe_to_drag" branch is slightly better as it worked about once or twice. Is there a way to debug what's going on?

Thanks!

Vertical movement with low sensitivity is ignored

  1. Set the sensitivity to a low value (e.g. 0.2).
  2. Very slowly move a finger from the top-left of the trackpad to the bottom-right. Vary the speed to see the issue. At a low enough speed, the cursor will only move horizontally.

Alternatively:

  1. Very slowly move a finger straight down. The cursor will not move at all unless you reach a certain speed. It is not possible to do this horizontally.

In both cases, the cursor appears to almost jump down in 10-20 pixel "steps" when moving slow enough. This makes it very difficult to make small movements.

$ xinput --list-props 11
Device 'bcm5974':
    Device Enabled (139):   1
    Coordinate Transformation Matrix (141): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    Device Accel Profile (272): 0
    Device Accel Constant Deceleration (273):   1.000000
    Device Accel Adaptive Deceleration (274):   1.000000
    Device Accel Velocity Scaling (275):    10.000000
    Trackpad Disable Input (276):   0
    Trackpad Sensitivity (277): 0.200000
    Trackpad Touch Pressure (278):  10, 10
    Trackpad Button Settings (279): 1, 1
    Trackpad Button Emulation Settings (280):   0, 1, 100
    Trackpad Button Emulation Values (281): 3, 2, 0
    Trackpad Tap Settings (282):    50, 120, 400
    Trackpad Tap Button Emulation (283):    0, 0, 0, 0
    Trackpad Thumb Detection (284): 0, 0
    Trackpad Thumb Size (285):  25, 70
    Trackpad Palm Detection (286):  1, 1
    Trackpad Palm Size (287):   40
    Trackpad Gesture Settings (288):    10, 100
    Trackpad Smooth Scroll (289):   1
    Trackpad Scroll Settings (290): 250, 20, 0
    Trackpad Scroll Buttons (291):  5, 4, 7, 6
    Trackpad Swipe Settings (292):  700, 300, 0
    Trackpad Swipe Buttons (293):   0, 0, 8, 9
    Trackpad Swipe4 Settings (294): 700, 300, 0
    Trackpad Swipe4 Buttons (295):  0, 0, 0, 0
    Trackpad Scroll Coasting (296): 0.100000, 200.000000
    Trackpad Scale Distance (297):  150
    Trackpad Scale Buttons (298):   12, 13
    Trackpad Rotate Distance (299): 150
    Trackpad Rotate Buttons (300):  14, 15
    Trackpad Hold1Move1 Stationary Settings (301):  20, 1
    Trackpad Hold1Move1 Settings (302): 1, 0, 1000
    Trackpad Hold1Move1 Buttons (303):  1, 1, 1, 1
    Trackpad Drag Settings (304):   1, 350, 40, 200
    Trackpad Axis Inversion (305):  0, 0
    Trackpad Edge Size (306):   10

Two finger scroll stops working after click

  1. Rest one finger on trackpad.
  2. Rest thumb at bottom of trackpad, which will be ignored.
  3. Click and release clickpad with thumb, and remove thumb from trackpad.
  4. Rest a second finger on trackpad. There are now two fingers on the trackpad.
  5. Move the two fingers to scroll. Scrolling does not occur. Instead, the pointer moves twice as fast.

This continues until both fingers are removed from the trackpad. I.e. you can remove a finger, then add a finger, and the issue remains.

Odd input issue

I'm part of the input group, but for some reason, whenever I try to use the mtrack driver, I get an error saying "xf86openserial: cannot open device [...] permission denied".
I don't think this is a problem with the mtrack driver though, because when I change permissions chmod g+w /dev/input/event*, it starts working again. libinput has no such problem btw.
The default permissions on /dev/input/event* are crw-r----- with root:input owner/group, does that sound about right?
However, it only works if I change it to crw-rw----.
Any advice?

Tapping enabled when multiple fingers are on touchpad

When 2 or more fingers are on the touchpad tapping gets enabled. It's reproducible by holding one finger on the touchpad and tapping with another finger.

Device 'Apple Inc. Apple Internal Keyboard / Trackpad':
	Device Enabled (139):	1
	Coordinate Transformation Matrix (141):	1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
	libinput Send Events Modes Available (261):	1, 0
	libinput Send Events Mode Enabled (262):	0, 0
	libinput Send Events Mode Enabled Default (263):	0, 0
	Device Node (264):	"/dev/input/event12"
	Device Product ID (265):	1452, 627
Section "InputClass"
        MatchIsTouchpad "on"
        Identifier      "Touchpads"
        Driver          "mtrack"
        Option          "Sensitivity" "0.65"
        Option          "FingerHigh" "5"
        Option          "FingerLow" "1"
        Option          "IgnoreThumb" "true"
        Option          "ThumbRatio" "70"
        Option          "ThumbSize" "25"
        Option          "IgnorePalm" "true"
        Option          "TapButton1" "0"
        Option          "TapButton2" "0"
        Option          "TapButton3" "0"
        Option          "TapButton4" "0"
        Option          "ClickFinger1" "3"
        Option          "ClickFinger2" "3"
        Option          "ClickFinger3" "3"
        Option          "ButtonMoveEmulate" "false"
        Option          "ButtonIntegrated" "true"
        Option          "ClickTime" "25"
        Option          "BottomEdge" "30"
        Option          "ScrollCoastDuration" "500"
        Option          "ScrollCoastEnableSpeed" ".3"
        Option          "ScrollUpButton" "5"
        Option          "ScrollDownButton" "4"
        Option          "ScrollLeftButton" "6"
        Option          "ScrollRightButton" "7"
        Option          "ScrollDistance" "250"
	Option          "TapDragEnable" "false"
	Option		"TapDragWait" "40000"
EndSection

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.