{"id":13908764,"url":"https://github.com/p2rkw/xf86-input-mtrack","last_synced_at":"2026-02-22T19:00:59.359Z","repository":{"id":45366375,"uuid":"37807035","full_name":"p2rkw/xf86-input-mtrack","owner":"p2rkw","description":"Xorg Multitouch Trackpad Driver","archived":false,"fork":false,"pushed_at":"2023-05-21T21:33:52.000Z","size":1101,"stargazers_count":487,"open_issues_count":40,"forks_count":56,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-12-11T17:34:57.285Z","etag":null,"topics":["gestures","gestures-recognition","linux","touchpad","trackpad"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/p2rkw.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2015-06-21T11:47:16.000Z","updated_at":"2025-12-10T08:10:22.000Z","dependencies_parsed_at":"2024-01-24T15:05:35.117Z","dependency_job_id":null,"html_url":"https://github.com/p2rkw/xf86-input-mtrack","commit_stats":{"total_commits":305,"total_committers":27,"mean_commits":"11.296296296296296","dds":0.5049180327868852,"last_synced_commit":"247a824f937b4beda3f5f11d7d9000ffd03b5616"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/p2rkw/xf86-input-mtrack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/p2rkw%2Fxf86-input-mtrack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/p2rkw%2Fxf86-input-mtrack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/p2rkw%2Fxf86-input-mtrack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/p2rkw%2Fxf86-input-mtrack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/p2rkw","download_url":"https://codeload.github.com/p2rkw/xf86-input-mtrack/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/p2rkw%2Fxf86-input-mtrack/sbom","scorecard":{"id":716831,"data":{"date":"2025-08-11","repo":{"name":"github.com/p2rkw/xf86-input-mtrack","commit":"d38088b4330603fdc8353509eab2387d5dd2ef3b"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.9,"checks":[{"name":"Code-Review","score":2,"reason":"Found 7/29 approved changesets -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: COPYING:0","Info: FSF or OSI recognized license: GNU General Public License v2.0: COPYING:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.5.0 not signed: https://api.github.com/repos/p2rkw/xf86-input-mtrack/releases/9420160","Warn: release artifact v0.4.1 not signed: https://api.github.com/repos/p2rkw/xf86-input-mtrack/releases/4524994","Warn: release artifact v0.4.0 not signed: https://api.github.com/repos/p2rkw/xf86-input-mtrack/releases/1874678","Warn: release artifact v0.5.0 does not have provenance: https://api.github.com/repos/p2rkw/xf86-input-mtrack/releases/9420160","Warn: release artifact v0.4.1 does not have provenance: https://api.github.com/repos/p2rkw/xf86-input-mtrack/releases/4524994","Warn: release artifact v0.4.0 does not have provenance: https://api.github.com/repos/p2rkw/xf86-input-mtrack/releases/1874678"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 8 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-22T09:58:01.438Z","repository_id":45366375,"created_at":"2025-08-22T09:58:01.439Z","updated_at":"2025-08-22T09:58:01.439Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29723573,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-22T15:10:41.462Z","status":"ssl_error","status_checked_at":"2026-02-22T15:10:04.636Z","response_time":110,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gestures","gestures-recognition","linux","touchpad","trackpad"],"created_at":"2024-08-06T23:02:58.113Z","updated_at":"2026-02-22T19:00:59.328Z","avatar_url":"https://github.com/p2rkw.png","language":"Shell","funding_links":[],"categories":["HarmonyOS"],"sub_categories":["Windows Manager"],"readme":"xf86-input-mtrack\n=================\n###### v0.5.1\n\nAn Xorg driver for multitouch trackpads. Supports any trackpad whose kernel\ndriver uses the slotted multitouch protocol. For more information on the\nprotocol see the [kernel documentation][1].\n\nThis driver is compatible with Xorg server versions 1.7 to 1.19.0 It requires\nthe [mtdev][4] library to operate.\n\n\n## License\n\n* Copyright (C) 2015-2018 Paweł Turkowski \u003cp2rkw0@gmail.com\u003e\n* Copyright (C) 2011 Ryan Bourgeois \u003cbluedragonx@gmail.com\u003e\n* Copyright (C) 2008 Henrik Rydberg \u003crydberg@euromail.se\u003e\n\nThis software is licensed under the [GPLv2][2] and is a fork of the\n[xf86-input-multitouch][3] driver by Henrik Rydberg.\n\n\n## Building and Installing\nThis is a standard autoconf package. So:\n```\n    ./configure\n    make \u0026\u0026 make install\n```\nIt is likely that you will need to change system-dependent paths such as the\nxorg module directory. Otherwise mtrack may be not installed in xserver search\npath.\nSee `configure --help` for options.\n\nOn Debian systems (including Ubuntu) you may also need to install the `xorg-dev`\npackage prior to these commands.\n\nTo build deb package and install in system wide you will usually have to change\ninstallation prefix to /usr like so:\n```\n    ./configure --prefix=/usr\n    dpkg-buildpackage\n```\n## Bug Reporting\n\nIf you found a bug, and you are going to submit it, first run\n```\n    xinput --list\n```\nthen find your touchpad name/ID on the list and create report with output of\n```\n    xinput --list-props \u003cyour touchpad ID\u003e\n```\nattached.\n\n## Configuration\n\n\nThe following is a minimal working InputClass section for xorg.conf:\n```\n    Section \"InputClass\"\n        MatchIsTouchpad \"on\"\n        Identifier      \"Touchpads\"\n        Driver          \"mtrack\"\n\n#       In case of problems enable/disable this line:\n        MatchDevicePath \"/dev/input/event*\"\n    EndSection\n```\n\n---\nTo apply changes made in xorg.conf (or related files) X server have to be restarted.\nChanges made with `xinput` are applied immedietly but they are not saved between sessions.\n\n### Options\nConfiguration options may be defined inside the InputClass section to configure\nthe driver. See examples/ directory for example configuration files. Feel free to submit\nyours, named as your laptop's model.\nAvailable options and their defaults are as follows.\n\n---\n#### Basic\n**[TrackpadDisable](#TrackpadDisable)**\u003ca name=\"TrackpadDisable\"\u003e\u003c/a\u003e\nDisables trackpad touch input. A value of 0 will enable the trackpad. A value\nof 1 will disable tapping and gestures but not movement. A value of 2 will\ndisable all input. A value of 3 will also disable physical buttons.  \nInteger. Default is 0.\n\n**[ButtonEnable](#ButtonEnable)**\u003ca name=\"ButtonEnable\"\u003e\u003c/a\u003e\nWhether or not to enable the physical buttons on or near the trackpad.  \nBoolean value. Defaults to true.\n\n**[ButtonIntegrated](#ButtonIntegrated)**\u003ca name=\"ButtonIntegrated\"\u003e\u003c/a\u003e\nWhether or not the physical buttons are integrated with the trackpad. If you\nhave a one-piece trackpad like on newer MacBooks, this should be set to true.\nButton emulation depends on this value being correct.  \nBoolean value. Defaults to true.\n\n---\n#### Responsiveness\n**[Sensitivity](#Sensitivity)**\u003ca name=\"Sensitivity\"\u003e\u003c/a\u003e\nAdjusts the sensitivity (movement speed) of the touchpad. This is a real number\ngreater than or equal to zero. A value of 0 will disable pointer movement.  \nFloat value. Default is 1.\n\n**[FingerHigh](#FingerHigh)**\u003ca name=\"FingerHigh\"\u003e\u003c/a\u003e\nDefines the pressure at which a finger is detected as a touch. This is a\npercentage represented as an integer.  \nInteger value. Default is 5.\n\n**[FingerLow](#FingerLow)**\u003ca name=\"FingerLow\"\u003e\u003c/a\u003e\nDefines the pressure at which a finger is detected as a release. This is a\npercentage represented as an integer.  \nInteger value. Default is 5.\n\n**[IgnoreThumb](#IgnoreThumb)**\u003ca name=\"IgnoreThumb\"\u003e\u003c/a\u003e\nWhether or not to ignore touches that are determined to be thumbs.  \nBoolean value. Defaults to false.\n\n**[IgnorePalm](#IgnorePalm)**\u003ca name=\"IgnorePalm\"\u003e\u003c/a\u003e\nWhether or not to ignore touches that are determined to be palms.  \nBoolean value. Defaults to false.\n\n**[DisableOnThumb](#DisableOnThumb)**\u003ca name=\"DisableOnThumb\"\u003e\u003c/a\u003e\nWhether or not to disable the entire trackpad when a thumb is touching.  \nBoolean value. Defaults to false.\n\n**[DisableOnPalm](#DisableOnPalm)**\u003ca name=\"DisableOnPalm\"\u003e\u003c/a\u003e\nWhether or not to disable the entire trackpad when a palm is touching.  \nBoolean value. Defaults to false.\n\n**[ThumbSize](#ThumbSize)**\u003ca name=\"ThumbSize\"\u003e\u003c/a\u003e\nThe minimum size of what's considered a thumb. It is expected that a thumb\nwill be larger than other fingers. This is represented as a percentage of the\nmaximum touch value and is dependent on the trackpad hardware.  \nInteger value. Defaults to 25.\n\n**[PalmSize](#PalmSize)**\u003ca name=\"PalmSize\"\u003e\u003c/a\u003e\nThe minimum size of what's considered a palm. Palms are expected to be very\nlarge on the trackpad. This is represented as a percentage of the maximum touch\nvalue and is dependent on the trackpad hardware.  \nInteger value. Defaults to 40.\n\n**[ThumbRatio](#ThumbRatio)**\u003ca name=\"ThumbRatio\"\u003e\u003c/a\u003e\nThe width/length ratio of what's considered a thumb. It is expected that a\nthumb is longer than it is wide. This tells the driver how much longer.  \nPercentage represented by an integer.  \nInteger value. Defaults to 70.\n\n---\n#### Zones\u003ca name=\"Zones\"\u003e\u003c/a\u003e\nDivide the touchpad into \"zones\". Clicking the integrated button in one of\nthese zones will send the button event configured for each {First, Second, Third}ZoneButton.\nThe driver will only add zones for the ZoneButton values that\nare enabled. The zone splitting start from the left to right using the first to third value.\nSo enabling only SecondZoneButton and ThirdZoneButton will create two\nzones, the left-middle part will fire SecondZoneButton and the middle-right part ThirdZoneButton.  \n\n**[ButtonZonesEnable](#ButtonZonesEnable)**\u003ca name=\"ButtonZonesEnable\"\u003e\u003c/a\u003e\nWhether or not to enable button zones. If button zones are enabled then the\ntrackpad will be split into one, two, or three vertical zones.\nBoolean value. Defaults to false.\n\n**[FirstZoneButton](#FirstZoneButton)**\u003ca name=\"FirstZoneButton\"\u003e\u003c/a\u003e\nThe button to emulate when the zone is pressed. This is the leftmost part of the pad.\nInteger value. A value of 0 disables this zone split.  \nInteger value. Defaults to 1.\n\n**[SecondZoneButton](#SecondZoneButton)**\u003ca name=\"SecondZoneButton\"\u003e\u003c/a\u003e\nThe button to emulate when the zone is pressed. This will float to the right of\nthe leftmost zone. Integer value. A value of 0 disables this zone split.  \nInteger value. Defaults to 2.\n\n**[ThirdZoneButton](#ThirdZoneButton)**\u003ca name=\"ThirdZoneButton\"\u003e\u003c/a\u003e\nThe button to emulate when the zone is pressed. This will float to the right of\nthe leftmost zone. Integer value. A value of 0 disables this zone split.  \nInteger value. Defaults to 0.\n\n**[LimitButtonZonesToBottomEdge](#LimitButtonZonesToBottomEdge)**\u003ca name=\"LimitButtonZonesToBottomEdge\"\u003e\u003c/a\u003e\nRestrict button zones inside the [EdgeBottom](#EdgeBottomSize) area. So instead of enabling zones\non the full pad height, the zone is limited to the percentage set for the [EdgeBottom](#EdgeBottomSize).  \nBoolean value. Default to false.\n\n---\n#### Physical click\n**[ClickFinger0](#ClickFinger0)**\u003ca name=\"ClickFinger0\"\u003e\u003c/a\u003e\nWhich button to emulate when no valid finger placement is touching the trackpad during a\nclick, as on \"EdgeBottom\".  \nInteger value. A value of 0 disables one-touch emulation. Defaults to 0.\n\n**[ClickFinger1](#ClickFinger1)**\u003ca name=\"ClickFinger1\"\u003e\u003c/a\u003e\nWhich button to emulate when one finger is touching the trackpad during a\nclick.  \nInteger value. A value of 0 disables one-touch emulation. Defaults to 1.\n\n**[ClickFinger2](#ClickFinger2)**\u003ca name=\"ClickFinger2\"\u003e\u003c/a\u003e\nWhich button to emulate when two fingers are touching the trackpad during a\nclick.  \nInteger value. A value of 0 disabled one-touch emulation. Defaults to 2.\n\n**[ClickFinger3](#ClickFinger3)**\u003ca name=\"ClickFinger3\"\u003e\u003c/a\u003e\nWhich button to emulate when three fingers are touching the trackpad during a\nclick.  \nInteger value. A value of 0 disabled one-touch emulation. Defaults to 3.\n\n**[ButtonMoveEmulate](#ButtonMoveEmulate)**\u003ca name=\"ButtonMoveEmulate\"\u003e\u003c/a\u003e\nWhether or not to count the moving finger when emulating button clicks.\nUseful to disable if you use two hands on trackpad.  \nBoolean value. Defaults to true.\n\n**[ButtonTouchExpire](#ButtonTouchExpire)**\u003ca name=\"ButtonTouchExpire\"\u003e\u003c/a\u003e\nHow long (in ms) to consider a touching finger as part of button emulation. A\nvalue of 0 will not expire touches.  \nInteger value. Defaults to 100.\n\n---\n#### Tap clicking\n**[TapButton1](#TapButton1)**\u003ca name=\"TapButton1\"\u003e\u003c/a\u003e\nWhich button to emulate for one-finger tapping. Integer value. A value of 0\ndisables one-finger tapping.  \nInteger value. Defaults to 1.\n\n**[TapButton2](#TapButton2)**\u003ca name=\"TapButton2\"\u003e\u003c/a\u003e\nWhich button to emulate for two-finger tapping. Integer value. A value of 0\ndisables two-finger tapping.  \nInteger value. Defaults to 3.\n\n**[TapButton3](#TapButton3)**\u003ca name=\"TapButton3\"\u003e\u003c/a\u003e\nWhich button to emulate for three-finger tapping. Integer value. A value of 0\ndisables three-finger tapping.  \nInteger value. Defaults to 2.\n\n**[TapButton4](#TapButton4)**\u003ca name=\"TapButton4\"\u003e\u003c/a\u003e\nWhich button to emulate for four-finger tapping. Integer value. A value of 0\ndisables three-finger tapping.  \nInteger value. Defaults to 0.\n\n**[ClickTime](#ClickTime)**\u003ca name=\"ClickTime\"\u003e\u003c/a\u003e\nWhen tapping, how much time to hold down the emulated button.  \nInteger value representing milliseconds. Defaults to 50.\n\n**[MaxTapTime](#MaxTapTime)**\u003ca name=\"MaxTapTime\"\u003e\u003c/a\u003e\nThe amount of time to wait for incoming touches after first one before counting\nit as emulated button click.  \nInteger value representing milliseconds. Defaults to 120.\n\n**[MaxTapMove](#MaxTapMove)**\u003ca name=\"MaxTapMove\"\u003e\u003c/a\u003e\nHow far a touch is allowed to move before counting it is no longer considered a\ntap.  \nInteger value. Defaults to 400.\n\n#### Gesture\n\n---\n##### Basic\n**[GestureClickTime](#GestureClickTime)**\u003ca name=\"GestureClickTime\"\u003e\u003c/a\u003e\nWhen a gesture triggers a click, how much time to hold down the emulated button.\nInteger value representing milliseconds. Defaults to 10.  \n\n**[GestureWaitTime](#GestureWaitTime)**\u003ca name=\"GestureWaitTime\"\u003e\u003c/a\u003e\nTouches are allowed to transition from one gesture to another. For example, you\nmay go from scrolling to swiping without releasing your fingers from the pad.\nThis value is the amount of time you must be performing the new gesture before\nit is triggered. This prevents accidental touches from triggering other\ngestures.   \nInteger value representing milliseconds. Defaults to 100.  \n\n---\n##### Two fingers Scrolling\u003ca name=\"two-finger-scrolling\"\u003e\u003c/a\u003e\n\n**[ScrollDistance](#ScrollDistance)**\u003ca name=\"ScrollDistance\"\u003e\u003c/a\u003e\nFor two finger scrolling. This sets the speed of your scrolling: the lower the\nnumber, the faster you scroll. \nTechnically, it is how far you must move your fingers before a button\nclick registering scrolling is triggered.\nInteger value. Defaults to 150.\n\n**[ScrollClickTime](#ScrollClickTime)**\u003ca name=\"ScrollClickTime\"\u003e\u003c/a\u003e\nFor two finger scrolling. How long button triggered by scrolling\nwill be hold down. A value of 0 will hold button down till end of gesture.\n0 - emit button click only once pre \"instance\" of gesture.\nInteger value representing milliseconds.  \nInteger value. Defaults to 20.\n\n**[ScrollSensitivity](#ScrollSensitivity)**\u003ca name=\"ScrollSensitivity\"\u003e\u003c/a\u003e\nFor two finger scrolling. Sensitivity (movement speed) of pointer during two\nfinger scrolling. A value of 0 disables pointer movement during gesture.\nInteger value expressed as parts per thousand of normal sensivity.\nA value of 1000 results with normal movement speed.\nInteger value. Defaults to 0.\n\n**[ScrollUpButton](#ScrollUpButton)**\u003ca name=\"ScrollUpButton\"\u003e\u003c/a\u003e\nFor two finger scrolling. The button that is triggered by scrolling up.  \nInteger value. A value of 0 disables scrolling up. Defaults to 4.\n\n**[ScrollDownButton](#ScrollDownButton)**\u003ca name=\"ScrollDownButton\"\u003e\u003c/a\u003e\nFor two finger scrolling. The button that is triggered by scrolling down.  \nInteger value. A value of 0 disables scrolling down. Defaults to 5.\n\n**[ScrollLeftButton](#ScrollLeftButton)**\u003ca name=\"ScrollLeftButton\"\u003e\u003c/a\u003e\nFor two finger scrolling. The button that is triggered by scrolling left.  \nInteger value. A value of 0 disables scrolling left. Defaults to 6.\n\n**[ScrollRightButton](#ScrollRightButton)**\u003ca name=\"ScrollRightButton\"\u003e\u003c/a\u003e\nFor two finger scrolling. The button that is triggered by scrolling right.  \nInteger value. A value of 0 disables scrolling right. Defaults to 7.\n\n**[ScrollSmooth](#ScrollSmooth)**\u003ca name=\"ScrollSmooth\"\u003e\u003c/a\u003e\nFor two finger scrolling. Whether to generate high precision scroll events.  \nBoolean value. Defaults to 1.\nProperty: \"Trackpad High Smooth Scroll\"\n\n**[ScrollCoastDuration](#ScrollCoastDuration)**\u003ca name=\"ScrollCoastDuration\"\u003e\u003c/a\u003e\nHow long after finished scrolling movement should be continued. Works only\nwith smooth scrolling enabled.  \nFloating value representing miliseconds. Defaults to 200.0.\nProperty: \"Trackpad Scroll Coasting\"\n\n**[ScrollCoastEnableSpeed](#ScrollCoastEnableSpeed)**\u003ca name=\"ScrollCoastEnableSpeed\"\u003e\u003c/a\u003e\nHow fast scroll should be to enable coasting feature.  \nFloating value. Defaults to 0.1.\nProperty: \"Trackpad Scroll Coasting\"\n\n**[ScrollCoastNoBoost](#ScrollCoastNoBoost)**\u003ca name=\"ScrollCoastNoBoost\"\u003e\u003c/a\u003e\nDisable boosting on second scroll gesture during coasting\nBoolean value. Defaults to false.\nProperty: \"Trackpad Scroll Coasting\"\n\n**[ScrollCoastEase](#ScrollCoastEase)**\u003ca name=\"ScrollCoastEase\"\u003e\u003c/a\u003e\nApply easing effect on coasting\nBoolean value. Defaults to false.\nProperty: \"Trackpad Scroll Coasting\"\n\n---\n##### Three fingers swipe\u003ca name=\"three-finger-swipe\"\u003e\u003c/a\u003e\n**[SwipeDistance](#SwipeDistance)**\u003ca name=\"SwipeDistance\"\u003e\u003c/a\u003e\nFor three finger swiping. How far you must move your fingers before a button\nclick is triggered.  \nInteger value. Defaults to 700.\n\n**[SwipeClickTime](#SwipeClickTime)**\u003ca name=\"SwipeClickTime\"\u003e\u003c/a\u003e\nFor three finger swiping. How long button triggered by swiping\nwill be hold down.  \nInteger value representing milliseconds. Defaults to 300.\n\n**[SwipeSensitivity](#SwipeSensitivity)**\u003ca name=\"SwipeSensitivity\"\u003e\u003c/a\u003e\nFor three finger scrolling. Sensitivity (movement speed) of pointer during three\nfinger scrolling. A value of 0 disables pointer movement during gesture.  \nInteger value expressed as parts per thousand of normal sensivity.  \nA value of 1000 results with normal movement speed. Defaults to 0.\n\n**[SwipeUpButton](#SwipeUpButton)**\u003ca name=\"SwipeUpButton\"\u003e\u003c/a\u003e\nFor three finger swiping. The button that is triggered by swiping up.  \nInteger value. A value of 0 disables swiping up. Defaults to 8.\n\n**[SwipeDownButton](#SwipeDownButton)**\u003ca name=\"SwipeDownButton\"\u003e\u003c/a\u003e\nFor three finger swiping. The button that is triggered by swiping down.  \nInteger value. A value of 0 disables swiping down. Defaults to 9.\n\n**[SwipeLeftButton](#SwipeLeftButton)**\u003ca name=\"SwipeLeftButton\"\u003e\u003c/a\u003e\nFor three finger swiping. The button that is triggered by swiping left.  \nInteger value. A value of 0 disables swiping left. Defaults to 10.\n\n**[SwipeRightButton](#SwipeRightButton)**\u003ca name=\"SwipeRightButton\"\u003e\u003c/a\u003e\nFor three finger swiping. The button that is triggered by swiping right.  \nInteger value. A value of 0 disables swiping right. Defaults to 11.\n\n---\n##### Four fingers swipe\u003ca name=\"four-finger-swipe\"\u003e\u003c/a\u003e\n**[Swipe4Distance](#Swipe4Distance)**\u003ca name=\"Swipe4Distance\"\u003e\u003c/a\u003e\nFor four finger swiping. How far you must move your fingers before a button\nclick is triggered.  \nInteger value. Defaults to 700.\n\n**[Swipe4ClickTime](#Swipe4ClickTime)**\u003ca name=\"Swipe4ClickTime\"\u003e\u003c/a\u003e\nFor four finger swiping. How long button triggered by swiping\nwill be hold down.  \nInteger value representing milliseconds. Defaults to 300.\n\n**[Swipe4Sensitivity](#Swipe4Sensitivity)**\u003ca name=\"Swipe4Sensitivity\"\u003e\u003c/a\u003e\nFor four finger scrolling. Sensitivity (movement speed) of pointer during four\nfinger scrolling. A value of 0 disables pointer movement during gesture.  \nInteger value expressed as parts per thousand of normal sensivity.  \nA value of 1000 results with normal movement speed. Defaults to 0.\n\n**[Swipe4UpButton](#Swipe4UpButton)**\u003ca name=\"Swipe4UpButton\"\u003e\u003c/a\u003e\nFor four finger swiping. The button that is triggered by swiping up.  \nInteger value. A value of 0 disables swiping up. Defaults to 8.\n\n**[Swipe4DownButton](#Swipe4DownButton)**\u003ca name=\"Swipe4DownButton\"\u003e\u003c/a\u003e\nFor four finger swiping. The button that is triggered by swiping down.  \nInteger value. A value of 0 disables swiping down. Defaults to 9.\n\n**[Swipe4LeftButton](#Swipe4LeftButton)**\u003ca name=\"Swipe4LeftButton\"\u003e\u003c/a\u003e\nFor four finger swiping. The button that is triggered by swiping left.  \nInteger value. A value of 0 disables swiping left. Defaults to 10.\n\n**[Swipe4RightButton](#Swipe4RightButton)**\u003ca name=\"Swipe4RightButton\"\u003e\u003c/a\u003e\nFor four finger swiping. The button that is triggered by swiping right.  \nInteger value. A value of 0 disables swiping right. Defaults to 11.\n\n---\n##### Edge Scrolling - One finger\nShould be used in conjuction with the [`Edge disabling`](#EdgeDisabling) options.\n\n**[EdgeScrollDist](#EdgeScrollDist)**\u003ca name=\"EdgeScrollDist\"\u003e\u003c/a\u003e\nFor one finger edge scrolling. How far you must move your finger on edge before\na button click is triggered.  \nInteger value. Defaults to 105.\n\n**[EdgeScrollClickTime](#EdgeScrollClickTime)**\u003ca name=\"EdgeScrollClickTime\"\u003e\u003c/a\u003e\nFor one finger edge scrolling. How long button triggered by edge scrolling\nwill be hold down. A value of 0 will hold button down till end of gesture.  \n0 - emit button click only once pre \"instance\" of gesture.  \nInteger value representing milliseconds. Defaults to 20.\n\n**[EdgeScrollSensitivity](#EdgeScrollSensitivity)**\u003ca name=\"EdgeScrollSensitivity\"\u003e\u003c/a\u003e\nFor one finger edge scrolling. Sensitivity (movement speed) of pointer during one\nfinger scrolling. A value of 0 disables pointer movement during gesture.  \nInteger value expressed as parts per thousand of normal sensivity.  \nA value of 1000 results with normal movement speed. Defaults to 0.\n\n**[EdgeScrollUpButton](#EdgeScrollUpButton)**\u003ca name=\"EdgeScrollUpButton\"\u003e\u003c/a\u003e\nFor one finger edge scrolling. The button that is triggered by edge scrolling up.  \nInteger value. A value of 0 disables scrolling up. Defaults to 4.\n\n**[EdgeScrollDownButton](#EdgeScrollDownButton)**\u003ca name=\"EdgeScrollDownButton\"\u003e\u003c/a\u003e\nFor one finger edge scrolling. The button that is triggered by edge scrolling down.  \nInteger value. A value of 0 disables scrolling down. Defaults to 5.\n\n**[EdgeScrollLeftButton](#EdgeScrollLeftButton)**\u003ca name=\"EdgeScrollLeftButton\"\u003e\u003c/a\u003e\nFor one finger edge scrolling. The button that is triggered by edge scrolling left.  \nInteger value. A value of 0 disables scrolling left. Defaults to 6.\n\n**[EdgeScrollRightButton](#EdgeScrollRightButton)**\u003ca name=\"EdgeScrollRightButton\"\u003e\u003c/a\u003e\nFor one finger edge scrolling. The button that is triggered by edge scrolling right.  \nInteger value. A value of 0 disables scrolling right. Defaults to 7.\n\n---\n##### Pinch scaling - Two fingers\n**[ScaleDistance](#ScaleDistance)**\u003ca name=\"ScaleDistance\"\u003e\u003c/a\u003e\nFor pinch scaling. How far you must move your fingers before a button click is\ntriggered.  \nInteger value. Defaults to 150.\n\n**[ScaleUpButton](#ScaleUpButton)**\u003ca name=\"ScaleUpButton\"\u003e\u003c/a\u003e\nFor pinch scaling. The button that is triggered by scaling up.  \nInteger value. A value of 0 disables scaling up. Defaults to 12.\n\n**[ScaleDownButton](#ScaleDownButton)**\u003ca name=\"ScaleDownButton\"\u003e\u003c/a\u003e\nFor pinch scaling. The button that is triggered by scaling down.  \nInteger value. A value of 0 disables scaling down. Defaults to 13.\n\n---\n##### Rotation - Two fingers\n**[RotateDistance](#RotateDistance)**\u003ca name=\"RotateDistance\"\u003e\u003c/a\u003e\nFor two finger rotation. How far you must move your fingers before a button\nclick is triggered.  \nInteger value. Defaults to 150.\n\n**[RotateLeftButton](#RotateLeftButton)**\u003ca name=\"RotateLeftButton\"\u003e\u003c/a\u003e\nFor two finger rotation. The button that is triggered by rotating left.  \nInteger value. A value of 0 disables rotation left. Defaults to 14.\n\n**[RotateRightButton](#RotateRightButton)**\u003ca name=\"RotateRightButton\"\u003e\u003c/a\u003e\nFor two finger rotation. The button that is triggered by rotating right.  \nInteger value. A value of 0 disables rotation right. Defaults to 15.\n\n---\n#### Edge disabling\u003ca name=\"EdgeDisabling\"\u003e\u003c/a\u003e\n~~[EdgeSize](#EdgeSize)~~\u003ca name=\"EdgeSize\"\u003e\u003c/a\u003e\nDEPRECATED.\nThe size of an area around the trackpad where new touches are ignored (fingers\ntraveling into this area from above will still be tracked).  \nThis is represented as a percentage of the total trackpad height.  \nInteger value. Defaults to 0.  \nValue set here is overwriten by EdgeLeftSize, EdgeRightSize, EdgeTopSize and\nEdgeBottomSize\n\n**[EdgeTopSize](#EdgeTopSize)**\u003ca name=\"EdgeTopSize\"\u003e\u003c/a\u003e\nThe size of an area at the top of the trackpad where new touches are ignored\n(fingers travelling into this area from the bottom will still be tracked).  \nInteger value representing a percentage of the total trackpad height. Defaults to 0.\n\n**[EdgeBottomSize](#EdgeBottomSize)**\u003ca name=\"EdgeBottomSize\"\u003e\u003c/a\u003e\nThe size of an area at the bottom of the trackpad where new touches are ignored\n(fingers travelling into this area from the top will still be tracked).  \nInteger value representing a percentage of the total trackpad height. Defaults to 10.\n\n**[EdgeLeftSize](#EdgeLeftSize)**\u003ca name=\"EdgeLeftSize\"\u003e\u003c/a\u003e\nThe size of an area at the left of the trackpad where new touches are ignored\n(fingers travelling into this area from the right will still be tracked).  \nInteger value representing a percentage of the total trackpad width. Defaults to 0.\n\n**[EdgeRightSize](#EdgeRightSize)**\u003ca name=\"EdgeRightSize\"\u003e\u003c/a\u003e\nThe size of an area at the right of the trackpad where new touches are ignored\n(fingers travelling into this area from the left will still be tracked).  \nInteger value representing a percentage of the total trackpad width. Defaults to 0.\n\n---\n#### Special features\n**[Hold1Move1StationaryButton](#Hold1Move1StationaryButton)**\u003ca name=\"Hold1Move1StationaryButton\"\u003e\u003c/a\u003e\nFor two finger hold-and-move functionality. The button that is triggered by\nholding one finger and moving another one.  \nInteger value. A value of 0 disables hold-and-move.  \nValue of 0 disables this functionality.  \nDefaults to 1.\n\n**[Hold1Move1StationaryMaxMove](#Hold1Move1StationaryMaxMove)**\u003ca name=\"Hold1Move1StationaryMaxMove\"\u003e\u003c/a\u003e\nFor two finger hold-and-move functionality. Fow far stationary finger can be\nmoved berfore gesture invalidation.  \nInteger value. Default to 20.\n\n**[TapDragEnable](#TapDragEnable)**\u003ca name=\"TapDragEnable\"\u003e\u003c/a\u003e\nWhether or not to enable tap-to-drag functionality.  \nBoolean value. Defaults to true.\n\n**[TapDragTime](#TapDragTime)**\u003ca name=\"TapDragTime\"\u003e\u003c/a\u003e\nThe tap-to-drag timeout. This is how long the driver will wait after a single\ntap for a movement event before sending the click.  \nInteger value representing milliseconds. Defaults to 350.\n\n**[TapDragWait](#TapDragWait)**\u003ca name=\"TapDragWait\"\u003e\u003c/a\u003e\nHow long after detecting movement to trigger a button down event. During this\ntime pointer movement will be disabled. Increase this value if you find you're\ndraggin when you don't wish it.  \nInteger value representing milliseconds. Defaults to 40.\n\n**[TapDragDist](#TapDragDist)**\u003ca name=\"TapDragDist\"\u003e\u003c/a\u003e\nHow far the finger is allowed to move during drag wait time. If the finger\nmoves farther than this distance during the wait time then dragging will be\ncanceled and pointer movement will resume.  \nInteger value. Defaults to 200.\n\n**[TapDragLockTimeout](#TapDragLockTimeout)**\u003ca name=\"TapDragLockTimeout\"\u003e\u003c/a\u003e\nThis is how long the driver will wait after initial drag in 'drag ready' state\nin which it will be able to resume previous drag without additional `up`, `down`\nsequence.  \nValue of 0 disables this functionality.  \nValues of less than zero will make mtrack require additional tap to finish drag\nby sending `button up`.  \nInteger value representing milliseconds. Defaults to 500.\n\n**[AxisXInvert](#AxisXInvert)**\u003ca name=\"AxisXInvert\"\u003e\u003c/a\u003e\nWhether or not to invert the X axis.  \nBoolean value. Defaults to false.\n\n**[AxisYInvert](#AxisYInvert)**\u003ca name=\"AxisYInvert\"\u003e\u003c/a\u003e\nWhether or not to invert the Y axis.  \nBoolean value. Defaults to false.\n\nTips\n-------------\n#### Swipe to drag\nTo setup swipe to drag functionality you have to choose which swipe gesture ([Scroll](two-finger-scrolling), [Swipe](#three-finger-swipe), [Swipe4](#four-finger-swipe))\nwill be used for dragging.  \nExample configuration for three finger drag:\n```\n    Option \"SwipeDistance\" \"1\"\n    Option \"SwipeLeftButton\" \"1\"\n    Option \"SwipeRightButton\" \"1\"\n    Option \"SwipeUpButton\" \"1\"\n    Option \"SwipeDownButton\" \"1\"\n    Option \"SwipeClickTime\" \"0\"\n    Option \"SwipeSensitivity\" \"1000\"\n```\nThis will enable dragging with three fingers. Change [sensitivity](#SwipeSensitivity) for faster/slower movements.\nScroll, and Swipe4 are also supported.\n\n#### Hold and move\nHold down one finger in place to initiate hold-and-move gesture.\nThen move another finger to drag configured button.\nGesture will last as long as fist finger (a.k.a. stationary finger) will\nbe held down in place.\n\nIncrease [TapDragDist](#TapDragDist) to give stationary finger more freedom.\nSet [Hold1Move1StationaryButton](#Hold1Move1StationaryButton) to 0 to disable, set to other value to send button other\nthan \"1\".\n\n#### Persistent dragging\nIf you're using lot of tools that require dragging you can make it a little bit\neasier by enabling [persistent tap-to-drag](#TapDragLockTimeout):\n```\n    Option \"TapDragLockTimeout\" \"-1\"\n```\nWith that change you will have to perform additional tap when dragging with\ntap-to-drag. Other positive values will let you continue yor drag within\nspecified time.\n\n#### Enabling soft button\n##### Basic\nIf 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](#ClickFinger0) parameters.\n```\n    Option \"EdgeBottomSize\" \"20\"    # Disable tap and movement detection in the bottom 20% of the pad\n    Option \"ClickFinger0\" \"1\"       # Enable clicking action \"1\" when no finger is detected\n```\nYou could also use [ClickFinger0](#ClickFinger0) with [EdgeTop/Right/LeftSize](#EdgeDisabling).\n\n##### Advanced\nIf you want more than one button in the bottom edge, you need to use a more  \nadvanced configuration. It will enable you use up to [3 buttons](#Zones) inside that [edge](#EdgeBottomSize).  \n```\n    Option \"ButtonZonesEnable\" \"true\"               # Enable \"Zones\"\n    Option \"LimitButtonZonesToBottomEdge\" \"true\"    # Limit the zones to the bottom edge\n    Option \"EdgeBottomSize\" \"20\"                    # Disable tap and movement detection in the bottom 20% of the pad\n\n    # Zones stack from left to right inside the 20% height defined above\n    Option \"FirstZoneButton\" \"1\"   # Left part fire click 1\n    Option \"SecondZoneButton\" \"3\"   # Middle part fire click 3\n    Option \"ThirdZoneButton\" \"2\"   # Right part fire click 2\n```\n\n\n[1]: http://www.kernel.org/doc/Documentation/input/multi-touch-protocol.txt     \"Kernel Multitouch Protocol\"\n[2]: http://www.gnu.org/licenses/gpl-2.0.html                                   \"GNU General Public License, version 2\"\n[3]: http://bitmath.org/code/multitouch/                                        \"xf86-input-multitouch website\"\n[4]: http://bitmath.org/code/mtdev/                                             \"mtdev library website\"\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fp2rkw%2Fxf86-input-mtrack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fp2rkw%2Fxf86-input-mtrack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fp2rkw%2Fxf86-input-mtrack/lists"}