{"id":13441667,"url":"https://github.com/JoseExposito/touchegg","last_synced_at":"2025-03-20T12:32:20.480Z","repository":{"id":28813807,"uuid":"32337002","full_name":"JoseExposito/touchegg","owner":"JoseExposito","description":"Linux multi-touch gesture recognizer","archived":false,"fork":false,"pushed_at":"2024-12-01T20:22:17.000Z","size":121692,"stargazers_count":3795,"open_issues_count":32,"forks_count":174,"subscribers_count":52,"default_branch":"master","last_synced_at":"2025-03-19T10:15:44.652Z","etag":null,"topics":["gesture-recognition","libinput","linux","multi-touch","touchpad","touchscreen"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JoseExposito.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","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,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"JoseExposito"}},"created_at":"2015-03-16T16:09:19.000Z","updated_at":"2025-03-18T15:03:42.000Z","dependencies_parsed_at":"2023-02-10T08:15:46.539Z","dependency_job_id":"566fb052-f349-4b32-b32c-0e18972a9ca6","html_url":"https://github.com/JoseExposito/touchegg","commit_stats":{"total_commits":632,"total_committers":37,"mean_commits":17.08108108108108,"dds":0.384493670886076,"last_synced_commit":"5b191856e0f6ca5f061ec5a8a71b0829d897ca23"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JoseExposito%2Ftouchegg","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JoseExposito%2Ftouchegg/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JoseExposito%2Ftouchegg/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JoseExposito%2Ftouchegg/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JoseExposito","download_url":"https://codeload.github.com/JoseExposito/touchegg/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244422590,"owners_count":20450239,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["gesture-recognition","libinput","linux","multi-touch","touchpad","touchscreen"],"created_at":"2024-07-31T03:01:36.689Z","updated_at":"2025-03-20T12:32:20.474Z","avatar_url":"https://github.com/JoseExposito.png","language":"C++","funding_links":["https://github.com/sponsors/JoseExposito","https://www.paypal.com/cgi-bin/webscr?cmd=_donations\u0026business=FT2KS37PVG8PU\u0026currency_code=EUR\u0026source=url"],"categories":["HarmonyOS","C++","Productivity Tools","Linux"],"sub_categories":["Windows Manager","Media Servers","Other"],"readme":"**Follow Touchégg on...** [![Twitter](.github/images/twitter.png \"Twitter\")](https://twitter.com/Jose__Exposito) \u003ca href=\"https://www.paypal.com/cgi-bin/webscr?cmd=_donations\u0026business=FT2KS37PVG8PU\u0026currency_code=EUR\u0026source=url\"\u003e\u003cimg align=\"right\"  src=\"https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif\"\u003e\u003c/a\u003e\n\n\n# Touchégg\n\nTouchégg is an app that runs in the background and transform the gestures you make on your touchpad\nor touchscreen into visible actions in your desktop.\n\nFor example, you can swipe up with 3 fingers to maximize a window or swipe left with 4 finger to\nswitch to the next desktop.\n\nMany more actions and gestures are available and everything is easily configurable.\n\n![Demo](.github/images/Ubuntu.gif)\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://youtu.be/PLsH-XPFuN4\"\u003e:movie_camera: Ubuntu demo\u003c/a\u003e\n  \u003cbr/\u003e\n  \u003ca href=\"https://youtu.be/nuMT-MwyTXU\"\u003e:movie_camera: elementary OS demo\u003c/a\u003e\n  \u003cbr/\u003e\n  \u003ca href=\"https://www.youtube.com/watch?v=7gKONPKNZlc\"\u003e:movie_camera: Touchscreen demo\u003c/a\u003e\n\u003c/p\u003e\n\n# Table of contents\n\n  * [Installation](#installation)\n    * [Ubuntu, Debian and derivatives](#ubuntu-debian-and-derivatives)\n    * [Fedora, CentOS, RHEL and derivatives](#fedora-centos-rhel-and-derivatives)\n    * [Arch Linux, Manjaro and derivatives](#arch-linux-manjaro-and-derivatives)\n    * [openSUSE](#opensuse)\n    * [Alpine Linux](#alpine-linux)\n    * [Void Linux](#void-linux)\n    * [NixOS](#nixos)\n    * [GNOME](#gnome)\n  * [Configuration](#configuration)\n    * [Using Touché](#using-touché)\n    * [Manual configuration](#manual-configuration)\n    * [Global settings](#global-settings)\n    * [Available gestures](#available-gestures)\n      * [Swipe](#swipe)\n      * [Pinch](#pinch)\n      * [Tap](#tap)\n    * [Available actions](#available-actions)\n      * [Maximize or restore a window](#maximize-or-restore-a-window-maximize_restore_window)\n      * [Minimize a window](#minimize-a-window-minimize_window)\n      * [Tile/snap a window](#tilesnap-a-window-tile_window)\n      * [Fullscreen a window](#fullscreen-a-window-fullscreen_window)\n      * [Close a window](#close-a-window-close_window)\n      * [Switch desktops/workspaces](#switch-desktopsworkspaces-change_desktop)\n      * [Show desktop](#show-desktop-show_desktop)\n      * [Keyboard shortcut](#keyboard-shortcut-send_keys)\n      * [Execute a command](#execute-a-command-run_command)\n      * [Mouse click](#mouse-click-mouse_click)\n    * [Custom animations](#custom-animations)\n    * [Daemon configuration](#daemon-configuration)\n  * [FAQ](#faq)\n  * [Copyright](#copyright)\n\n\n# Installation\n\nOn the [releases](https://github.com/JoseExposito/touchegg/releases) page you will find a package\nfor your distribution.\n\nOtherwise you can compile the source code yourself by following the instructions available in the\n[HACKING.md](HACKING.md) file.\n\n## Ubuntu, Debian and derivatives\n\nOn Ubuntu, it is recommended to use the\n[official PPA](https://launchpad.net/~touchegg/+archive/ubuntu/stable) to install Touchégg and\nreceive updates:\n\n```bash\n$ sudo add-apt-repository ppa:touchegg/stable\n$ sudo apt update\n$ sudo apt install touchegg\n```\n\nRunning `add-apt-repository` may fail because of temporary server issues; try again a few times, it should work.\nThe PPA is signed with key\n[7EA12677D47B593CE22727D4C0FCE32AF6B96252](https://keyserver.ubuntu.com/pks/lookup?search=7EA12677D47B593CE22727D4C0FCE32AF6B96252\u0026hash=on\u0026exact=on\u0026op=index)\nin case you want to install it manually.\n\nIf PPAs are not available on your operating system,\n[download](https://github.com/JoseExposito/touchegg/releases) the `.deb` package and install it.\nDouble click on the package may work, otherwise install it from the terminal:\n\n```bash\n$ cd ~/Downloads # Or to the path where the deb package is placed at\n$ sudo apt-get install ./touchegg_*.deb # Install the package\n```\n\nRun Touchégg manually by running the command `touchegg` or reboot to get started.\n\nIncluded by default on elementary OS 6, Zorin OS 16, Pop!\\_OS 21.04+ and Linux Mint 21.2\n\n## Fedora, CentOS, RHEL and derivatives\n\nOn Fedora, Touchegg is available in the [official repository](https://src.fedoraproject.org/rpms/touchegg):\n\n```bash\n$ dnf install touchegg\n# You may also need to manually start the service\n$ sudo systemctl start touchegg\n$ sudo systemctl enable touchegg\n```\n\nOn CentOS (EPEL) it is recommended to use the\n[official COPR](https://copr.fedorainfracloud.org/coprs/joseexposito/touchegg/) to install Touchégg and\nreceive updates.\n\n```bash\n$ sudo dnf copr enable joseexposito/touchegg\n$ sudo dnf install touchegg\n```\n\nOn other RPM based operating systems,\n[download](https://github.com/JoseExposito/touchegg/releases) the `.rpm` package and install it.\nDouble click on the package may work, otherwise install it from the terminal:\n\n```bash\n$ cd ~/Downloads # Or to the path where the rpm package is placed at\n$ sudo dnf install touchegg-*.rpm # Install the package\n```\n\nRun Touchégg manually by running the command `touchegg` or reboot to get started.\n\n## Arch Linux, Manjaro and derivatives\n\nInstall the `touchegg` package from [Arch Linux Packages Registry](https://archlinux.org/packages/extra/x86_64/touchegg/).\n\nNotice that on Arch services are not enabled or started by default, so you'll have to do it manually:\n\n```bash\n$ sudo systemctl enable touchegg.service\n$ sudo systemctl start touchegg\n```\n\nOnce the service is enabled, run Touchégg manually by running the command `touchegg` or reboot to get started.\n\nA version for Arch based distributions without systemd support, like Artix, is also available on [AUR](https://aur.archlinux.org/packages/touchegg-nosystemd/)\n\n## openSUSE\n\nTouchégg is available in the [official repositories](https://software.opensuse.org/package/touchegg).\n\n```bash\n$ sudo zypper install touchegg\n$ sudo systemctl enable touchegg.service\n$ sudo systemctl start touchegg\n```\n\nIf the version of Touchégg included for your distro is too old (v1.x)\nit is recommended to use the\n[official COPR](https://copr.fedorainfracloud.org/coprs/joseexposito/touchegg/) to install Touchégg and\nreceive updates.\n\n## Alpine Linux\n\nUncomment the url for the testing repository in /etc/apk/repositories, then install:\n\n```bash\n$ sudo apk update\n$ sudo apk add touchegg\n```\n\nThe Touchégg package includes an Openrc init script for starting the Touchégg daemon at boot. To enable:\n\n```bash\n$ sudo rc-update add touchegg\n```\nThe init script can also be used to manually start and stop the Touchégg daemon as required:\n\n```bash\n$ sudo rc-service touchegg start\n$ sudo rc-service touchegg stop\n```\n\n## Void Linux\n\nTouchégg is available from the main repository. To use it, you have to enable its service after installing.\n\n```bash\n$ sudo xbps-install touchegg\n$ sudo ln -s /etc/sv/touchegg /var/service\n```\n\n## NixOS\n\nAdd the `touchegg` package in your `configuration.nix` file and enable the services.\n\n```\n# configuration.nix\n...\nenvironment.systemPackages = with pkgs; [\n  touchegg\n];\n\nservices.touchegg.enable = true;\n...\n```\n\n## GNOME\n\nIf you are using the GNOME Desktop Environment it is recommended to also install this extension:\n\nhttps://github.com/JoseExposito/gnome-shell-extension-x11gestures\n\nBoth Touchégg and the extension need to installed, so don't forget to follow the install\ninstructions for your distro!\n\n\n# Configuration\n\nAfter [installing](#installation) Touchégg you'll notice that you can start using multi-touch\ngestures. However, you are not forced to use the gestures and actions that come out of the box, you\ncan configure the gestures you'd like to use and the actions they'll trigger.\n\n## Using Touché\n\n[Touché](https://github.com/JoseExposito/touche) is a desktop application to easily configure your\ntouchpad and touchscreen multi-touch gestures.\n\n\u003cdiv align=\"center\"\u003e\n\n  ![Touché on GNOME](https://raw.githubusercontent.com/JoseExposito/touche/master/.github/images/adwaita.png)\n\n\u003c/div\u003e\n\nFollow the instructions on [the project page](https://github.com/JoseExposito/touche) to install it.\n\n## Manual configuration\n\n[Touché](https://github.com/JoseExposito/touche) is the recommended way of configuring your\ngestures. However, you can also manually configure Touchégg by editing an XML file.\n\nStart by copying the default configuration from `/usr/share/touchegg/touchegg.conf` to\n`~/.config/touchegg/touchegg.conf`. You can do it using your file manager or by running this command\nin your terminal:\n\n```bash\n$ mkdir -p ~/.config/touchegg \u0026\u0026 cp -n /usr/share/touchegg/touchegg.conf ~/.config/touchegg/touchegg.conf\n```\n\nNow open `~/.config/touchegg/touchegg.conf` with your favorite text editor.\nIt is a XML document with 3 main sections:\n\n  * [Global settings](#global-settings)\n  * Global gestures: `\u003capplication name=\"All\"\u003e...\u003c/application\u003e`\n  * Application specific gestures: `\u003capplication name=\"Google-chrome,Firefox\"\u003e\u003c/application\u003e`\n\n    The application name can be obtained by running this command and clicking on the target application window:\n    ```bash\n    $ xprop | grep WM_CLASS\n    ```\n\nFind more information in the sections below.\n\n\n## Global settings\n\n| Option | Value | Default | Description | Example\n| - | - | - | - | - |\n| animation_delay | Number | 150 | Delay, in milliseconds, since the gesture starts before the animation is displayed | Use the MAXIMIZE_RESTORE_WINDOW action. You will notice that no animation is displayed if you complete the action quick enough. This property configures that time |\n| action_execute_threshold | Number | 20 | Percentage of the gesture to be completed to apply the action. Set to 0 to execute actions unconditionally | Use the MAXIMIZE_RESTORE_WINDOW action. You will notice that, even if the animation is displayed, the action is not executed if you did not move your fingers far enough. This property configures the percentage of the gesture that must be reached to execute the action |\n| color | Hex color | 3E9FED | Color of the animation | `#909090`\n| borderColor | Hex color | 3E9FED | Color of the animation | `FFFFFF`\n\n\n## Available gestures\n\n### Swipe\n\nFrom [libinput documentation](https://wayland.freedesktop.org/libinput/doc/latest/gestures.html#swipe-gestures):\nSwipe gestures are executed when three or more fingers are moved synchronously in the same\ndirection.\n\nNote that **three** is the minimum number of fingers that Touchégg allows for swipe gestures on\ntouchpads and **two** on touchscreens.\n\nExample:\n\n```xml\n\u003cgesture type=\"SWIPE\" fingers=\"3\" direction=\"UP\"\u003e\n  \u003caction type=\"MAXIMIZE_RESTORE_WINDOW\"\u003e\n    \u003canimate\u003etrue\u003c/animate\u003e\n  \u003c/action\u003e\n\u003c/gesture\u003e\n```\n\n### Pinch\n\nFrom [libinput documentation](https://wayland.freedesktop.org/libinput/doc/latest/gestures.html#pinch-gestures):\nPinch gestures are executed when two or more fingers are located on the touchpad and are either\nchanging the relative distance to each other (pinching) or are changing the relative angle (rotate).\n\nExample:\n\n```xml\n\u003cgesture type=\"PINCH\" fingers=\"4\" direction=\"IN\"\u003e\n  \u003caction type=\"CLOSE_WINDOW\"\u003e\n    \u003canimate\u003etrue\u003c/animate\u003e\n    \u003ccolor\u003eF84A53\u003c/color\u003e\n    \u003cborderColor\u003eF84A53\u003c/borderColor\u003e\n  \u003c/action\u003e\n\u003c/gesture\u003e\n```\n\n### Tap\n\nTap gestures are executed when two or more fingers \"click\" on the touchscreen.\n\n**Only available on touchscreens**\n\nExample:\n\n```xml\n\u003cgesture type=\"TAP\" fingers=\"2\"\u003e\n  \u003caction type=\"MOUSE_CLICK\"\u003e\n    \u003cbutton\u003e3\u003c/button\u003e\n    \u003con\u003ebegin\u003c/on\u003e\n  \u003c/action\u003e\n\u003c/gesture\u003e\n```\n\n\n## Available actions\n\n### Maximize or restore a window (MAXIMIZE_RESTORE_WINDOW)\n\nMaximize the window under the pointer. If it is already maximized, restore it.\n\nOptions:\n\n| Option | Value | Description |\n| - | - | - |\n| animate | `true`/`false` | Set it to `true` to display the animation. `false` otherwise. |\n| color | Hex color | Color of the animation. For example: `909090` |\n| borderColor | Hex color | Border color of the animation. For example: `#FFFFFF` |\n\nExample:\n\n```xml\n\u003cgesture type=\"SWIPE\" fingers=\"3\" direction=\"UP\"\u003e\n  \u003caction type=\"MAXIMIZE_RESTORE_WINDOW\"\u003e\n    \u003canimate\u003etrue\u003c/animate\u003e\n    \u003ccolor\u003e3E9FED\u003c/color\u003e\n    \u003cborderColor\u003e3E9FED\u003c/borderColor\u003e\n  \u003c/action\u003e\n\u003c/gesture\u003e\n```\n\n![Animation](.github/images/MAXIMIZE_RESTORE_WINDOW.gif)\n\n### Minimize a window (MINIMIZE_WINDOW)\n\nMinimize the window under the pointer.\n\nOptions:\n\n| Option | Value | Description |\n| - | - | - |\n| animate | `true`/`false` | Set it to `true` to display the animation. `false` otherwise. |\n| color | Hex color | Color of the animation. For example: `909090` |\n| borderColor | Hex color | Border color of the animation. For example: `#FFFFFF` |\n\nExample:\n\n```xml\n\u003cgesture type=\"SWIPE\" fingers=\"3\" direction=\"DOWN\"\u003e\n  \u003caction type=\"MINIMIZE_WINDOW\"\u003e\n    \u003canimate\u003etrue\u003c/animate\u003e\n    \u003ccolor\u003e3E9FED\u003c/color\u003e\n    \u003cborderColor\u003e3E9FED\u003c/borderColor\u003e\n  \u003c/action\u003e\n\u003c/gesture\u003e\n```\n\n![Animation](.github/images/MINIMIZE_WINDOW.gif)\n\n### Tile/snap a window (TILE_WINDOW)\n\nResize and move the window under the pointer to use half of the screen.\n\nOptions:\n\n| Option | Value | Description |\n| - | - | - |\n| direction | `left`/`right` | Use the `left` or `right` half of the screen |\n| animate | `true`/`false` | Set it to `true` to display the animation. `false` otherwise. |\n| color | Hex color | Color of the animation. For example: `909090` |\n| borderColor | Hex color | Border color of the animation. For example: `#FFFFFF` |\n\nExample:\n\n```xml\n\u003cgesture type=\"SWIPE\" fingers=\"3\" direction=\"LEFT\"\u003e\n  \u003caction type=\"TILE_WINDOW\"\u003e\n    \u003cdirection\u003eleft\u003c/direction\u003e\n    \u003canimate\u003etrue\u003c/animate\u003e\n    \u003ccolor\u003e3E9FED\u003c/color\u003e\n    \u003cborderColor\u003e3E9FED\u003c/borderColor\u003e\n  \u003c/action\u003e\n\u003c/gesture\u003e\n\n\u003cgesture type=\"SWIPE\" fingers=\"3\" direction=\"RIGHT\"\u003e\n  \u003caction type=\"TILE_WINDOW\"\u003e\n    \u003cdirection\u003eright\u003c/direction\u003e\n    \u003canimate\u003etrue\u003c/animate\u003e\n    \u003ccolor\u003e3E9FED\u003c/color\u003e\n    \u003cborderColor\u003e3E9FED\u003c/borderColor\u003e\n  \u003c/action\u003e\n\u003c/gesture\u003e\n```\n\n![Animation](.github/images/TILE_WINDOW.gif)\n\n### Fullscreen a window (FULLSCREEN_WINDOW)\n\nToggles fullscreen mode for the window under the pointer.\n\nOptions:\n\n| Option | Value | Description |\n| - | - | - |\n| animate | `true`/`false` | Set it to `true` to display the animation. `false` otherwise. |\n| color | Hex color | Color of the animation. For example: `909090` |\n| borderColor | Hex color | Border color of the animation. For example: `#FFFFFF` |\n\nExample:\n\n```xml\n\u003cgesture type=\"SWIPE\" fingers=\"3\" direction=\"UP\"\u003e\n  \u003caction type=\"FULLSCREEN_WINDOW\"\u003e\n    \u003canimate\u003etrue\u003c/animate\u003e\n    \u003ccolor\u003e3E9FED\u003c/color\u003e\n    \u003cborderColor\u003e3E9FED\u003c/borderColor\u003e\n  \u003c/action\u003e\n\u003c/gesture\u003e\n```\n\n### Close a window (CLOSE_WINDOW)\n\nClose the window under the pointer.\n\nOptions:\n\n| Option | Value | Description |\n| - | - | - |\n| animate | `true`/`false` | Set it to `true` to display the animation. `false` otherwise. |\n| color | Hex color | Color of the animation. For example: `909090` |\n| borderColor | Hex color | Border color of the animation. For example: `#FFFFFF` |\n\nExample:\n\n```xml\n\u003cgesture type=\"PINCH\" fingers=\"4\" direction=\"IN\"\u003e\n  \u003caction type=\"CLOSE_WINDOW\"\u003e\n    \u003canimate\u003etrue\u003c/animate\u003e\n    \u003ccolor\u003eF84A53\u003c/color\u003e\n    \u003cborderColor\u003eF84A53\u003c/borderColor\u003e\n  \u003c/action\u003e\n\u003c/gesture\u003e\n```\n\n![Animation](.github/images/CLOSE_WINDOW.gif)\n\n### Switch desktops/workspaces (CHANGE_DESKTOP)\n\nChange to another desktop/workspace.\n\nOptions:\n\n| Option | Value | Description |\n| - | - | - |\n| direction | `previous`/`next`/`up`/`down`/`left`/`right`/`auto` | The desktop/workspace to switch to. It is recommended to use `previous`/`next` for better compatibility. However, some desktop environments, like KDE, allow to configure a grid of desktops and `up`/`down`/`left`/`right` come in handy. With `SWIPE` gestures, `auto` will use your natural scroll preferences to figure out the direction. |\n| cyclic | `true`/`false` | Set it to `true` when using `previous`/`next` directions to navigate from last desktop to first desktop or from first to last. |\n| animate | `true`/`false` | Set it to `true` to display the animation. `false` otherwise. |\n| animationPosition | `up`/`down`/`left`/`right`/`auto` | Edge of the screen where the animation will be displayed. With `SWIPE` gestures, `auto` will use your natural scroll preferences to figure out the animation position. |\n| color | Hex color | Color of the animation. For example: `909090` |\n| borderColor | Hex color | Border color of the animation. For example: `#FFFFFF` |\n\nExample:\n\n```xml\n\u003cgesture type=\"SWIPE\" fingers=\"4\" direction=\"LEFT\"\u003e\n  \u003caction type=\"CHANGE_DESKTOP\"\u003e\n    \u003cdirection\u003enext\u003c/direction\u003e\n    \u003canimate\u003etrue\u003c/animate\u003e\n    \u003canimationPosition\u003eright\u003c/animationPosition\u003e\n    \u003ccolor\u003e3E9FED\u003c/color\u003e\n    \u003cborderColor\u003e3E9FED\u003c/borderColor\u003e\n  \u003c/action\u003e\n\u003c/gesture\u003e\n\n\u003cgesture type=\"SWIPE\" fingers=\"4\" direction=\"RIGHT\"\u003e\n  \u003caction type=\"CHANGE_DESKTOP\"\u003e\n    \u003cdirection\u003eprevious\u003c/direction\u003e\n    \u003canimate\u003etrue\u003c/animate\u003e\n    \u003canimationPosition\u003eleft\u003c/animationPosition\u003e\n    \u003ccolor\u003e3E9FED\u003c/color\u003e\n    \u003cborderColor\u003e3E9FED\u003c/borderColor\u003e\n  \u003c/action\u003e\n\u003c/gesture\u003e\n```\n\n![Animation](.github/images/CHANGE_DESKTOP.gif)\n\n### Show desktop (SHOW_DESKTOP)\n\nShow the desktop. If the desktop is already being shown, restore all the windows.\n\nOptions:\n\n| Option | Value | Description |\n| - | - | - |\n| animate | `true`/`false` | Set it to `true` to display the animation. `false` otherwise. |\n| color | Hex color | Color of the animation. For example: `909090` |\n| borderColor | Hex color | Border color of the animation. For example: `#FFFFFF` |\n\nExample:\n\n```xml\n\u003cgesture type=\"SWIPE\" fingers=\"4\" direction=\"DOWN\"\u003e\n  \u003caction type=\"SHOW_DESKTOP\"\u003e\n    \u003canimate\u003etrue\u003c/animate\u003e\n    \u003ccolor\u003e909090\u003c/color\u003e\n    \u003cborderColor\u003eFFFFFF\u003c/borderColor\u003e\n  \u003c/action\u003e\n\u003c/gesture\u003e\n```\n\n![Animation](.github/images/SHOW_DESKTOP.gif)\n\n### Keyboard shortcut (SEND_KEYS)\n\nEmulate a keyboard shortcut.\n\nOptions:\n\n| Option | Value | Description |\n| - | - | - |\n| repeat | `true`/`false` | Whether to execute the keyboard shortcut multiple times (default: `false`). This is useful to perform actions like pinch to zoom. |\n| modifiers | Keysym | Typical values are: `Shift_L`, `Control_L`, `Alt_L`, `Alt_R`, `Meta_L`, `Super_L`, `Hyper_L`. You can use multiple keysyms: `Control_L+Alt_L`.See \"Keysyms\" below for more information. |\n| keys | Keysym | Shortcut keys. You can use multiple keysyms: `A+B+C`. See \"Keysyms\" below for more information. |\n| on | `begin`/`end`/`begin-and-end` | Only used when `repeat` is `false`. Whether to execute the shortcut at the beginning and/or at the end of the gesture. |\n| decreaseKeys | Keysym | Only used when `repeat` is `true`. Keys to press when you change the gesture direction to the opposite. You can use multiple keysyms: `A+B+C`. This is useful to perform actions like pinch to zoom, check `Example 2` below. |\n| times | 2...15 | Only used when `repeat` is `true`. Number of times to repeat the action. |\n| animate | `true`/`false` | Set it to `true` to display the animation set in `animation`. `false` otherwise. |\n| color | Hex color | Color of the animation. For example: `909090` |\n| borderColor | Hex color | Border color of the animation. For example: `#FFFFFF` |\n| animation | Animation | See [custom animations](#custom-animations) |\n\nKeysyms:\n\nKeysyms can be found in two places:\n - Regular keys are in `/usr/include/X11/keysymdef.h`, you can open it with your favorite text editor.\n\n   It is important to remove the `XK_` prefix. For example, the super keysym is defined as\n   `XK_Super_L` but it must be used as `Super_L` in the configuration.\n - Special keys (e.g. media keys, browser back, sleep, etc.) are in `/usr/include/X11/XF86keysym.h`.\n\n   Again, remove `XK_`, but leave the rest (including the bit before the\n   `XK_`). For example, `XF86XK_Back` becomes `XF86Back`.\n\nNote that only keysyms that are mapped onto a keycode can be used by\nTouchégg. You can use `xmodmap -pk` to show the current mapping. To add\na keysym that is not mapped by default (for example `XF86ZoomIn`), you\ncan tell `xmodmap` to map it to any free keycode:\n\n    xmodmap -e 'keycode any=XF86ZoomIn'\n\nExample 1: Pinch to zoom example\n\n```xml\n\u003cgesture type=\"PINCH\" fingers=\"2\" direction=\"IN\"\u003e\n  \u003caction type=\"SEND_KEYS\"\u003e\n    \u003crepeat\u003etrue\u003c/repeat\u003e\n    \u003cmodifiers\u003eControl_L\u003c/modifiers\u003e\n    \u003ckeys\u003eKP_Subtract\u003c/keys\u003e\n    \u003cdecreaseKeys\u003eKP_Add\u003c/decreaseKeys\u003e\n  \u003c/action\u003e\n\u003c/gesture\u003e\n\n\u003cgesture type=\"PINCH\" fingers=\"2\" direction=\"OUT\"\u003e\n  \u003caction type=\"SEND_KEYS\"\u003e\n    \u003crepeat\u003etrue\u003c/repeat\u003e\n    \u003cmodifiers\u003eControl_L\u003c/modifiers\u003e\n    \u003ckeys\u003eKP_Add\u003c/keys\u003e\n    \u003cdecreaseKeys\u003eKP_Subtract\u003c/decreaseKeys\u003e\n  \u003c/action\u003e\n\u003c/gesture\u003e\n```\n\nExample 2: Switch between windows (Alt+Tab)\n\n```xml\n\u003cgesture type=\"SWIPE\" fingers=\"3\" direction=\"LEFT\"\u003e\n  \u003caction type=\"SEND_KEYS\"\u003e\n    \u003crepeat\u003etrue\u003c/repeat\u003e\n    \u003cmodifiers\u003eAlt_L\u003c/modifiers\u003e\n    \u003ckeys\u003eShift_L+Tab\u003c/keys\u003e\n    \u003cdecreaseKeys\u003eTab\u003c/decreaseKeys\u003e\n  \u003c/action\u003e\n\u003c/gesture\u003e\n\n\u003cgesture type=\"SWIPE\" fingers=\"3\" direction=\"RIGHT\"\u003e\n  \u003caction type=\"SEND_KEYS\"\u003e\n    \u003crepeat\u003etrue\u003c/repeat\u003e\n    \u003cmodifiers\u003eAlt_L\u003c/modifiers\u003e\n    \u003ckeys\u003eTab\u003c/keys\u003e\n    \u003cdecreaseKeys\u003eShift_L+Tab\u003c/decreaseKeys\u003e\n  \u003c/action\u003e\n\u003c/gesture\u003e\n```\n\nExample 3: Open Gnome application launcher\n\n```xml\n\u003cgesture type=\"PINCH\" fingers=\"4\" direction=\"IN\"\u003e\n  \u003caction type=\"SEND_KEYS\"\u003e\n    \u003crepeat\u003efalse\u003c/repeat\u003e\n    \u003cmodifiers\u003eSuper_L\u003c/modifiers\u003e\n    \u003ckeys\u003eA\u003c/keys\u003e\n    \u003con\u003ebegin\u003c/on\u003e\n  \u003c/action\u003e\n\u003c/gesture\u003e\n```\n\n![Animation](.github/images/SEND_KEYS.gif)\n\n### Execute a command (RUN_COMMAND)\n\nRun any command.\n\nOptions:\n\n| Option | Value | Description |\n| - | - | - |\n| repeat | `true`/`false` | `true` if the command should be executed multiple times. `false` otherwise. |\n| command | Command | The command to execute. |\n| on | `begin`/`end`/`begin-and-end` | Only used when `repeat` is `false`. If the command should be executed and/on the beginning or on the end of the gesture. |\n| decreaseCommand | Command | Only used when `repeat` is `true`. Command to run when you change the gesture direction to the opposite. Check `Example 2` below. |\n| times | 2...15 | Only used when `repeat` is `true`. Number of times to repeat the action. |\n| animate | `true`/`false` | Set it to `true` to display the animation set in `animation`. `false` otherwise. |\n| color | Hex color | Color of the animation. For example: `909090` |\n| borderColor | Hex color | Border color of the animation. For example: `#FFFFFF` |\n| animation | Animation | See [custom animations](#custom-animations) |\n\nExample 1:\n\n```xml\n\u003cgesture type=\"SWIPE\" fingers=\"4\" direction=\"DOWN\"\u003e\n  \u003caction type=\"RUN_COMMAND\"\u003e\n    \u003crepeat\u003efalse\u003c/repeat\u003e\n    \u003ccommand\u003enotify-send 'Hello World' \"Swipe down, DEVICE_TYPE=$TOUCHEGG_DEVICE_TYPE TOUCHEGG_GESTURE_ON=$TOUCHEGG_GESTURE_ON\"\u003c/command\u003e\n    \u003con\u003ebegin\u003c/on\u003e\n  \u003c/action\u003e\n\u003c/gesture\u003e\n```\n\nExample 2:\n\n```xml\n\u003cgesture type=\"SWIPE\" fingers=\"4\" direction=\"DOWN\"\u003e\n  \u003caction type=\"RUN_COMMAND\"\u003e\n    \u003crepeat\u003etrue\u003c/repeat\u003e\n    \u003ccommand\u003enotify-send 'Swipe direction' 'DOWN'\u003c/command\u003e\n    \u003cdecreaseCommand\u003enotify-send 'Swipe direction' 'UP'\u003c/decreaseCommand\u003e\n  \u003c/action\u003e\n\u003c/gesture\u003e\n```\n\n### Mouse click (MOUSE_CLICK)\n\nEmulate a mouse click.\n\nOptions:\n\n| Option | Value | Description |\n| - | - | - |\n| button | `1`/`2`/`3`/`8`/`9` | Left click (1), middle click (2), right click (3), back button (8) or forward button (9) |\n| on | `begin`/`end`/`begin-and-end` | If the mouse click should be executed on the beginning and/or on the end of the gesture. |\n\nWhen the `begin-and-end` option is used, the mouse button is down when the gesture begins and up when the gesture ends.\n\nExample:\n\n```xml\n\u003cgesture type=\"TAP\" fingers=\"2\"\u003e\n  \u003caction type=\"MOUSE_CLICK\"\u003e\n    \u003cbutton\u003e3\u003c/button\u003e\n    \u003con\u003ebegin\u003c/on\u003e\n  \u003c/action\u003e\n\u003c/gesture\u003e\n```\n\n\n## Custom animations\n\nThe [keyboard shortcut action](#keyboard-shortcut-send_keys) and the [execute a command action](#execute-a-command-run_command)\nallow to set a custom animation. These are the available values:\n\n| Animation | Example |\n| - | - |\n| CHANGE_DESKTOP_UP | [Switch desktops/workspaces](#switch-desktopsworkspaces-change_desktop) |\n| CHANGE_DESKTOP_DOWN | [Switch desktops/workspaces](#switch-desktopsworkspaces-change_desktop) |\n| CHANGE_DESKTOP_LEFT | [Switch desktops/workspaces](#switch-desktopsworkspaces-change_desktop) |\n| CHANGE_DESKTOP_RIGHT | [Switch desktops/workspaces](#switch-desktopsworkspaces-change_desktop) |\n| CLOSE_WINDOW | [Close a window](#close-a-window-close_window) |\n| MAXIMIZE_WINDOW | [Maximize or restore a window](#maximize-or-restore-a-window-maximize_restore_window) |\n| RESTORE_WINDOW | [Maximize or restore a window](#maximize-or-restore-a-window-maximize_restore_window) |\n| MINIMIZE_WINDOW | [Minimize a window](#minimize-a-window-minimize_window) |\n| SHOW_DESKTOP | [Show desktop](#show-desktop-show_desktop) |\n| EXIST_SHOW_DESKTOP | [Show desktop](#show-desktop-show_desktop) |\n| TILE_WINDOW_LEFT | [Tile/snap a window](#tilesnap-a-window-tile_window) |\n| TILE_WINDOW_RIGHT | [Tile/snap a window](#tilesnap-a-window-tile_window) |\n\n\n## Daemon configuration\n\nTouchégg runs in two different processes, one of them is a systemd daemon configured in\n`/lib/systemd/system/touchegg.service`. In addition to the `--daemon` argument, you can pass two optional arguments:\n\n| Option | Value | Default | Description | Example\n| - | - | - | - | - |\n| start_threshold | Number | Calculated automatically according to your device characteristics | Amount of motion to be made on the touchpad before a gesture is started | Put 3 fingers on your touchpad. You will notice that the action does not start until you move them a little bit. This property configures how much you should move your fingers before the action starts |\n| finish_threshold | Number | Calculated automatically according to your device characteristics | Amount of motion to be made on the touchpad to reach the 100% of an animation | Use the MAXIMIZE_RESTORE_WINDOW action. You will notice that you need to move your fingers a certain amount until the animation fills your entire screen. This property configures how much you need to move your fingers |\n\nIt is recommended NOT to configure `start_threshold` and `finish_threshold` since an optimal value\nis calculated for you.\n\nHowever, if your device size is unknown, you will need to set their values manually:\n\n```\n$ journalctl -u touchegg -b\n[...]\nIt wasn't possible to get your device physical size, falling back to default start_threshold and finish_threshold. You can tune this values in your service file:\nhttps://github.com/JoseExposito/touchegg#daemon-configuration\n```\n\nThe recommended values are:\n\n- start_threshold: The 3% of the height of your screen in mm\n- finish_threshold: The 15% of the height of your screen in mm\n\nFor example, if your screen height is 100mm, edit `/lib/systemd/system/touchegg.service`\nand set the right values:\n\n```bash\nExecStart=/usr/bin/touchegg --daemon 3 15\n```\n\nFinally, restart the daemon and make sure the right values are printed:\n\n```bash\n$ sudo systemctl daemon-reload \u0026\u0026 sudo systemctl restart touchegg\n\n$ journalctl -u touchegg -b -f\nCompatible device detected:\n  [...]\n  Calculating threshold and animation_finish_threshold. You can tune this values in your service file\n  threshold: 3\n  animation_finish_threshold: 15\n```\n\n\n# FAQ\n\n#### Does Touchégg work on Wayland?\n\nNo, Touchégg only works on X11.\n\n#### What hardware is supported?\n\nUnder the hood, Touchégg relies on [libinput](https://wayland.freedesktop.org/libinput/doc/latest/index.html).\n\nAll hardware supported by libinput is supported by Touchégg.\n\n#### Is there a GUI to configure Touchégg?\n\nYes, [Touché](https://github.com/JoseExposito/touche) is the official desktop application.\n\n#### Can I use 2 finger swipes for web browser navigation?\n\nNo, at least not with Touchégg. However, you can use following alternatives methods.\n\nIf you are using a Firefox-based browser, you can use Wayland instead of X11 for this functionality as standard; if you want to stay in X11 or cannot use Wayland, you can also use [this extension](https://addons.mozilla.org/firefox/addon/two-finger-history-jump/) instead.\n\nIf you are using a Chromium-based browser, simply run it with the `--enable-features=TouchpadOverscrollHistoryNavigation` command line option.If you want this to permanent, edit the shortcut on the Start menu.\n\n# Copyright\n\nCopyright 2011 - 2021 José Expósito \u003c\u003cjose.exposito89@gmail.com\u003e\u003e\n\nThe source code is available under GPL v3 license on [GitHub](https://github.com/JoseExposito/touchegg)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FJoseExposito%2Ftouchegg","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FJoseExposito%2Ftouchegg","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FJoseExposito%2Ftouchegg/lists"}