{"id":35495671,"url":"https://github.com/asus-linux-drivers/asus-dialpad-driver","last_synced_at":"2026-02-11T17:08:27.880Z","repository":{"id":279284228,"uuid":"897032419","full_name":"asus-linux-drivers/asus-dialpad-driver","owner":"asus-linux-drivers","description":"Feature-rich linux configurable driver for DialPad including cross-distribution user interface. Asus DialPad allows intuitive fingertip control over defined shortcuts for defined apps. Appears when is done tap on top right corner of touchpad for atleast 1s by default (configurable).","archived":false,"fork":false,"pushed_at":"2026-02-06T16:24:45.000Z","size":821,"stargazers_count":31,"open_issues_count":0,"forks_count":8,"subscribers_count":3,"default_branch":"master","last_synced_at":"2026-02-07T00:34:51.439Z","etag":null,"topics":["asus","dialpad","driver","i2c","illuminated","knob","libinput","linux","pyside6","python-virtualenv","python3","systemctl","touchpad","udev-rules","ui","wayland","x11"],"latest_commit_sha":null,"homepage":"","language":"Python","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/asus-linux-drivers.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"ko_fi":"ldrahnik"}},"created_at":"2024-12-01T22:14:04.000Z","updated_at":"2026-02-06T16:25:53.000Z","dependencies_parsed_at":"2025-04-16T17:31:45.679Z","dependency_job_id":"9cf1a364-800f-4f1f-9529-ddf2ee7183f6","html_url":"https://github.com/asus-linux-drivers/asus-dialpad-driver","commit_stats":null,"previous_names":["asus-linux-drivers/asus-dialpad-driver"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/asus-linux-drivers/asus-dialpad-driver","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asus-linux-drivers%2Fasus-dialpad-driver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asus-linux-drivers%2Fasus-dialpad-driver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asus-linux-drivers%2Fasus-dialpad-driver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asus-linux-drivers%2Fasus-dialpad-driver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/asus-linux-drivers","download_url":"https://codeload.github.com/asus-linux-drivers/asus-dialpad-driver/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/asus-linux-drivers%2Fasus-dialpad-driver/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29338756,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-11T16:14:43.024Z","status":"ssl_error","status_checked_at":"2026-02-11T16:14:15.258Z","response_time":97,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["asus","dialpad","driver","i2c","illuminated","knob","libinput","linux","pyside6","python-virtualenv","python3","systemctl","touchpad","udev-rules","ui","wayland","x11"],"created_at":"2026-01-03T17:17:07.374Z","updated_at":"2026-02-11T17:08:27.873Z","avatar_url":"https://github.com/asus-linux-drivers.png","language":"Python","funding_links":["https://ko-fi.com/ldrahnik","https://buymeacoffee.com/ldrahnik"],"categories":[],"sub_categories":[],"readme":"# Asus touchpad DialPad driver\n\n[![License: GPL v2](https://img.shields.io/badge/License-GPLv2-blue.svg)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)\n![Maintainer](https://img.shields.io/badge/maintainer-ldrahnik-blue)\n[![GitHub Release](https://img.shields.io/github/release/asus-linux-drivers/asus-dialpad-driver.svg?style=flat)](https://github.com/asus-linux-drivers/asus-dialpad-driver/releases)\n[![GitHub commits](https://img.shields.io/github/commits-since/asus-linux-drivers/asus-dialpad-driver/v2.1.1.svg)](https://GitHub.com/asus-linux-drivers/asus-dialpad-driver/commit/)\n[![GitHub issues-closed](https://img.shields.io/github/issues-closed/asus-linux-drivers/asus-dialpad-driver.svg)](https://GitHub.com/asus-linux-drivers/asus-dialpad-driver/issues?q=is%3Aissue+is%3Aclosed)\n[![GitHub pull-requests closed](https://img.shields.io/github/issues-pr-closed/asus-linux-drivers/asus-dialpad-driver.svg)](https://github.com/asus-linux-drivers/asus-dialpad-driver/compare)\n[![Ask Me Anything !](https://img.shields.io/badge/Ask%20about-anything-1abc9c.svg)](https://github.com/asus-linux-drivers/asus-dialpad-driver/issues/new/choose)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)\n![Badge](https://hitscounter.dev/api/hit?url=https%3A%2F%2Fgithub.com%2Fasus-linux-drivers%2Fasus-dialpad-driver\u0026label=Visitors\u0026icon=suit-heart-fill\u0026color=%23e35d6a)\n--\n[![Nix Flakes: Compatible](https://img.shields.io/badge/Nix%20Flakes-Compatible-brightgreen)](https://github.com/asus-linux-drivers/asus-dialpad-driver#installation)\n\n![Demo](./preview/ui_demo.gif)\n\nThe driver is written in python and does not necessarily run as a systemd service ([How to start DialPad without systemd service?](#faq)). It contains the common DialPad layouts, you can pick up the right one during the install process. Default settings aim to be the most convenient for the majority. All possible customizations can be found [here](#configuration).\n\nIf you find this project useful, please do not forget to give it a [![GitHub stars](https://img.shields.io/github/stars/asus-linux-drivers/asus-dialpad-driver.svg?style=social\u0026label=Star\u0026maxAge=2592000)](https://github.com/asus-linux-drivers/asus-dialpad-driver/stargazers) People already did!\n\n[![BuyMeACoffee](https://img.shields.io/badge/Buy%20to%20maintainer%20a%20coffee-ffdd00?style=for-the-badge\u0026logo=buy-me-a-coffee\u0026logoColor=black)](https://ko-fi.com/ldrahnik)\n\n## Changelog\n\n[CHANGELOG.md](CHANGELOG.md)\n\n## Frequently Asked Questions\n\n[FAQ](#faq)\n\n## Features of User Interface\n\n- Support for own icons in `.svg` format\n- Double-clicking by left mouse button unlocks / locks the element position allowing it to be moved across the screen\n\n## Features\n\n- Driver during installation collects anonymous data with goal improve driver (e.g. automatic layout detection; data are publicly available [here](https://lookerstudio.google.com/s/gaK2TftgZqM), you can provide used config using `$ bash install_config_send_anonymous_report.sh`)\n- Driver (including backlighting if hardware supported) installed for the current user\n- Driver creates own virtual environment of currently installed version of `Python3`\n- Multiple pre-created [DialPad layouts](https://github.com/asus-linux-drivers/asus-dialpad-driver#layouts) with the possibility of [creating custom layouts or improving existing ones (circle_diameter, center_button_diameter, circle_center_x..)](https://github.com/asus-linux-drivers/asus-dialpad-driver#keyboard-layout)\n- Customization through 2-way sync [configuration file](https://github.com/asus-linux-drivers/asus-dialpad-driver#configuration-file) (when `$ bash ./install.sh` is run, changes previously made in the config file will not be overwritten without user permission, similarly when `$ bash ./uninstall.sh` is run the config file will be kept. In either case, when the config file or parts of it do not exist they will be automatically created or completed with default values)\n- Automatic DialPad layout detection\n- Activation/deactivation of DialPad by pressing and holding the top-right icon (activation time by default is 1s)\n- Optional co-activator key requirement (`Shift`, `Control`, `Alt`) to prevent accidental DialPad activation\n- Recognize of currently focused app by binary path (e.g. `/usr/share/code/code`) or part of the title (during finding the first matched shortcut wins so `visual studio code` defined after `code` will be never be matched)\n- For each configured app a possibility to define single-function or multi-function mode (when is app not recognized is used `None` block)\n- Single-function mode (distinction of shortcuts for each app is possible only by key modifier like `Shift`; for each shortcut is possible to use `clockwise`, `counterclockwise` or `center`)\n- Adding events with `EV_KEY` which contain press and release events (e.g. key volume up, down and mute: `EV_KEY.KEY_VOLUMEUP, EV_KEY.KEY_VOLUMEDOWN, EV_KEY.KEY_MUTE`)\n\n```\n...\napp_shortcuts = {\n    ...\n    \"none\": {\n        \"center\": [\n          {\"key\": EV_KEY.KEY_MUTE, \"trigger\": \"release\", \"duration\": 1, \"modifier\": EV_KEY.KEY_LEFTSHIFT}\n        ],\n        \"clockwise\": [\n          {\"key\": [EV_REL.REL_WHEEL, EV_REL.REL_WHEEL_HI_RES], \"value\": [1, 120], \"trigger\": \"immediate\", \"title\": \"Scroll\"},\n          # works even better with `dconf write /org/gnome/desktop/sound/allow-volume-above-100-percent true`\n          {\"key\": EV_KEY.KEY_VOLUMEUP, \"trigger\": \"immediate\", \"modifier\": EV_KEY.KEY_LEFTSHIFT, \"value\": \"pactl get-sink-volume @DEFAULT_SINK@ | grep -oP '\\d+%' | head -n 1 | tr -d '%'\", \"unit\": \"%\", \"title\": \"Volume\"}\n        ],\n        \"counterclockwise\": [\n          {\"key\": [EV_REL.REL_WHEEL, EV_REL.REL_WHEEL_HI_RES], \"value\": [-1, -120], \"trigger\": \"immediate\", \"title\": \"Scroll\"},\n          # works even better with `dconf write /org/gnome/desktop/sound/allow-volume-above-100-percent true`\n          {\"key\": EV_KEY.KEY_VOLUMEDOWN, \"trigger\": \"immediate\", \"modifier\": EV_KEY.KEY_LEFTSHIFT, \"value\": \"pactl get-sink-volume @DEFAULT_SINK@ | grep -oP '\\d+%' | head -n 1 | tr -d '%'\", \"unit\": \"%\", \"title\": \"Volume\"}\n        ]\n    }\n}\n```\n\n- Multi-function mode (not possible to use `center` because middle button is used as configuration button / return button between functions; by default is grid of circle rendered for 5 apps `slices_minimum_count=5`)\n- Using `EV_REL` with values (e.g. scrolling: `EV_REL.REL_WHEEL, EV_REL.REL_WHEEL_HI_RES` and values: `-1, -120`)\n\n```\n        \"Scroll\": {\n            \"icon\": \"/usr/share/icons/elementary/status/symbolic/rotation-allowed-symbolic.svg\",\n            \"clockwise\": [\n               {\"key\": [EV_REL.REL_WHEEL, EV_REL.REL_WHEEL_HI_RES], \"value\": [1, 120], \"trigger\": \"immediate\"},\n            ],\n            \"counterclockwise\": [\n              {\"key\": [EV_REL.REL_WHEEL, EV_REL.REL_WHEEL_HI_RES], \"value\": [-1, -120], \"trigger\": \"immediate\"},\n            ]\n        },\n```\n- Using `command` for toggling instead of sending any key\n- Have icon displayed according to current state determined by `value` command\n\n```\n        \"Notifications\": {\n          \"value\": \"dconf read /io/elementary/notifications/do-not-disturb\",\n          \"icons\": {\n              \"true\": \"/usr/share/icons/elementary/status/symbolic/notification-disabled-symbolic.svg\",\n              \"false\": \"/usr/share/icons/elementary/status/symbolic/notification-symbolic.svg\"\n          },\n          # toggle do-not-disturb (\"command\" with toggle effect is preferred if exists over going into and clockwise/counterclockwise)\n          \"command\": 'dconf write /io/elementary/notifications/do-not-disturb \"$( [ \"$(dconf read /io/elementary/notifications/do-not-disturb)\" = \"true\" ] \u0026\u0026 echo false || echo true )\"',\n        },\n```\n\n- Possibility to trigger both types `EV_REL` and `EV_KEY` on `release` or `immediately`\n- Using for a less continous function with increasing `treshold` (e.g. editing changes undo and redo)\n\n```\n        \"Edit\": {\n            \"icon\": \"/usr/share/icons/elementary/status/symbolic/media-playlist-repeat-symbolic-rtl.svg\",\n            \"treshold\": 180,\n            \"clockwise\": [\n              {\"key\": [EV_KEY.KEY_LEFTCTRL, EV_KEY.KEY_Y], \"trigger\": \"immediate\"}\n            ],\n            \"counterclockwise\": [\n              {\"key\": [EV_KEY.KEY_LEFTCTRL, EV_KEY.KEY_Z], \"trigger\": \"immediate\"}\n            ]\n        },\n```\n\n- Possibility to temporary force using not app specific shortcut without removing app specific shortcuts from layout (`config_supress_app_specifics_shortcuts`)\n- Disabling the Touchpad (e.g. Fn+special key) disables by default the DialPad as well (can be disabled)\n\n## Installation\n\nGet the latest stable or dev version using `git`:\n\n```bash\n$ git clone https://github.com/asus-linux-drivers/asus-dialpad-driver\n$ cd asus-dialpad-driver\n# now you are using master branch with the latest changes which may be not stable\n# jump to the latest release of stable version:\n$ git checkout v2.0.1\n```\n\nor customized install:\n\n```\n# ENV VARS (with the defaults)\nINSTALL_DIR_PATH=\"/usr/share/asus-dialpad-driver\"\nLOGS_DIR_PATH=\"/var/log/asus-dialpad-driver\" # only for install and uninstall logs\nINSTALL_UDEV_DIR_PATH=\"/usr/lib/udev\"\n\n# e.g. for BazziteOS (https://github.com/asus-linux-drivers/asus-numberpad-driver/issues/198)\n$ INSTALL_DIR_PATH=\"/home/$USER/.local/share/asus-dialpad-driver\"\\\nINSTALL_UDEV_DIR_PATH=\"/etc/udev\"\\\nbash install.sh\n```\n\nor run separately parts of the install script.\n\nTry found Touchpad with DialPad:\n\n```bash\n$ bash install_device_check.sh\n```\n\nAdd a user to the groups `i2c,input,uinput`:\n\n```bash\n$ bash install_user_groups.sh\n```\n\nRun driver now and every time that user logs in (do NOT run as `$ sudo`, works via `systemctl --user`):\n\n```bash\n$ bash install_service.sh\n```\n\nor for NixOS you can use flakes for the installation of this driver.\n\n\u003e [!IMPORTANT]\n\u003e In case the layout isn't provided, the \"proartp16\" DialPad layout is used.\n\n\u003e The default value for runtimeDir is `/run/usr/1000/`, for waylandDisplay is `wayland-0` and wayland is `true`.\n\n\u003e Enabling `ignoreWaylandDisplayEnv` removes the explicit declaration of `WAYLAND_DISPLAY` in the service, allowing it to function correctly when switching between desktop environments or window managers that may have different `WAYLAND_DISPLAY` environment variables.\n\n\u003cdetails\u003e\n\u003csummary\u003eThe driver installation (NixOS)\u003c/summary\u003e\n\u003cbr\u003e\n\nThis repo contains a Flake that exposes a NixOS Module that manages and offers options for asus-dialpad-driver. To use it, add the flake as an input to your `flake.nix` file and enable the module:\n\n```nix\n# flake.nix\n\n{\n\n    inputs = {\n        # ---Snip---\n        asus-dialpad-driver = {\n          url = \"github:asus-linux-drivers/asus-dialpad-driver\";\n          inputs.nixpkgs.follows = \"nixpkgs\";\n        };\n        # ---Snip---\n    }\n\n    outputs = {nixpkgs, asus-dialpad-driver, ...} @ inputs: {\n        nixosConfigurations.HOSTNAME = nixpkgs.lib.nixosSystem {\n            specialArgs = { inherit inputs; };\n            modules = [\n                ./configuration.nix\n                asus-dialpad-driver.nixosModules.default\n            ];\n        };\n    }\n}\n```\nThen you can enable the program in your `configuration.nix` file:\n```nix\n# configuration.nix\n\n{inputs, pkgs, ...}: {\n  # ---Snip---\n  # Enable Asus DialPad Service\n  services.asus-dialpad-driver = {\n    enable = true;\n    layout = \"default\";\n    wayland = true;\n    ignoreWaylandDisplayEnv = false;\n    runtimeDir = \"/run/user/1000/\";\n    waylandDisplay = \"wayland-0\";\n  };\n  # ---Snip---\n}\n\n```\n\n\u003e The key for the caclulator toggling script should be associated with XF86Calculator, allowing it to toggle any calculator application, not just the one specified in the configuration. This means that the key binding can be used to manage various calculator applications across different key binding configurations. For e.g.:\n\n```\n\"XF86Calculator\".action = sh -c \"if pidof gnome-calculator \u003e /dev/null; then kill $(pidof gnome-calculator); else gnome-calculator; fi\";\n```\n\n\u003c/details\u003e\n\n## Uninstallation\n\nTo uninstall run\n\n```bash\n$ bash uninstall.sh\n\n# ENV VARS (with the defaults)\nINSTALL_DIR_PATH=\"/usr/share/asus-dialpad-driver\"\nCONFIG_FILE_DIR_PATH=\"$INSTALL_DIR_PATH\"\nCONFIG_FILE_NAME=\"dialpad_dev\"\nLOGS_DIR_PATH=\"/var/log/asus-dialpad-driver\" # only for install and uninstall logs\nSERVICE_INSTALL_DIR_PATH=\"$HOME/.config/systemd/user\"\nINSTALL_UDEV_DIR_PATH=\"/usr/lib/udev\"\n\n# e.g. for BazziteOS (https://github.com/asus-linux-drivers/asus-numberpad-driver/issues/198)\n$ INSTALL_DIR_PATH=\"/home/$USER/.local/share/asus-dialpad-driver\"\\\nINSTALL_UDEV_DIR_PATH=\"/etc/udev/\"\\\nbash uninstall.sh\n```\n\nor run separately parts of the uninstall script\n\n```bash\n$ bash uninstall_service.sh\n$ bash uninstall_user_groups.sh\n```\n\n## Layouts\n\nLayouts below are named by laptop models, but the name is not important. What is important is their visual appearance because they are repeated on multiple laptop models across series. The install script should recognize the correct one automatically for your laptop. If yours was not recognized, please create issue.\n\n| Name | Description                                                                                                  | Image                                                                                               |\n| ------------ | ------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------- |\n| \u003ca id=\"asusvivobook16x\"\u003e\u003c/a\u003e\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e\u003cbr\u003easusvivobook16x\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e | not nested                                                                | ![](images/Asus-Vivobook-16-x.png)                                             |\n| \u003ca id=\"proartp16\"\u003e\u003c/a\u003e\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e\u003cbr\u003eproartp16\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e | nested                                                               | ![](images/Asus-ProArt-P16.png)   |\n| \u003ca id=\"zenbookpro14\"\u003e\u003c/a\u003e\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e\u003cbr\u003ezenbookpro14\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e | nested                                                               | ![](images/Asus-Zenbook-Pro-14.jpg)   |\n\n\n### FAQ ###\n\n**How to start DialPad without systemd service?**\n\n- install in standard way using `bash install.sh` and answer no to the question about using `systemd`\n- layout name is required as first argument and as second argument can be optionally passed path to directory where will be autocreated config `dialpad_dev` (default is current working directory):\n\n```\n/usr/share/asus-dialpad-driver/.env/bin/python3 /usr/share/asus-dialpad-driver/dialpad.py \u003casusvivobook16x|proartp16|..\u003e\n```\n\n**How to install the driver when is used pyenv for managing multiple Python versions?**\n\n```\n$ git clone https://github.com/asus-linux-drivers/asus-dialpad-driver\n$ cd asus-dialpad-driver\n\n$ # pyenv install Ubuntu 22.04\n$ apt install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python3-openssl git\n$ curl https://pyenv.run | bash\n\n# install \u0026 change to the Python version for which one do you want to install the driver\n$ CC=clang pyenv install 3.9.4\n$ pyenv global 3.9.4 # change as global\n$ # pyenv local 3.9.4 # will create file .python-version inside source dir so next (re)install will be used automatically saved Python version in this file\n\n# install the driver\n$ bash install.sh\n\n# change to the standardly (previously) used Python version\n$ pyenv global system\n```\n\n**How can DialPad be activated via CLI?**\n\n- directly just change `enabled` in the appropriate lines of the config file:\n\n```\n# enabling DialPad via command line\nsed -i \"s/enabled = 0/enabled = 1/g\" dialpad_dev\nsed -i \"s/enabled = 0/enabled = 1/g\" /usr/share/asus-dialpad-driver/dialpad_dev\n# disabling\nsed -i \"s/enabled = 1/enabled = 0/g\" dialpad_dev\nsed -i \"s/enabled = 1/enabled = 0/g\" /usr/share/asus-dialpad-driver/dialpad_dev\n```\n\n## Configuration\n\n### Keyboard layout\n\nDuring the install process `bash ./install.sh`, you're required to select your keyboard layout:\n\n```\n...\n1) asusvivobook16x.py\n2) proartp16.py\n3) zenbookpro14.py\n4) Quit\nPlease enter your choice\n...\n```\n\n| Option                                        | Required | Default           | Description |\n| --------------------------------------------- | -------- | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **Position of DialPad**                                |          |\n| `circle_diameter`                                        | Required |                   | in px\n| `center_button_diameter`                                        | Required |                   | in px\n| `circle_center_x`                                        | Required |                   | in px\n| `circle_center_y`                                        | Required |                   | in px\n| **Associated apps**                                |          |          |\n| `app_shortcuts`                                        | Optional | Yes                  | | required format like in `default` layout\n\n### Co-activator keys\n\nTo prevent accidental DialPad activation while using the touchpad, you can configure a co-activator key. This requires holding a modifier key like `Alt` while touching the top right icon to activate the DialPad.\n\nDuring installation, you will be prompted to select a co-activator key:\n\n```\nSelect co-activator key:\n1) None\n2) Shift\n3) Control\n4) Alt\n6) Quit\n```\n\nThe co-activator is configured by modifying the `top_right_icon_coactivator_key` in your config file. When a co-activator is set, the `top_right_icon_coactivator_key` value becomes:\n\n```\n...\ntop_right_icon_coactivator_key = Alt\n```\n\n### Configuration file\n\nAttributes which do not depend on a specific DialPad keyboard can be changed according to the table below in the config `dialpad_dev` in the installed driver location `/usr/share/asus-dialpad-driver`. See the example below showing the default attibutes:\n\n```\n[main]\ndisable_due_inactivity_time = 0\ntouchpad_disables_dialpad = 1\nactivation_time = 1\nenabled = 0\nsocket_enabled = 1\ntop_right_icon_coactivator_key = Alt\ndefault_treshold = 90\nslices_minimum_count = 5\n```\n\n| Option                                        | Required | Default           | Description |\n| --------------------------------------------- | -------- | ----------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **System**                                    |          |                   |\n| `enabled`                                     |          | `0`               | DialPad running status (enabled/disabled)\n| `disable_due_inactivity_time`                 |          | `0` [s]            | DialPad is automatically disabled when no event received for this interval\u003cbr\u003e\u003cbr\u003edecimal numbers allowed (e.g. `60.0` [s] is one minute, `0` set up by default disables this functionality)\n| `touchpad_disables_dialpad`                    |          | `1`            | when Touchpad is disabled DialPad is disabled aswell\n| **User Interface**                                |          |\n| `socket_enabled`                                     |          | `0`               | DialPad is sending to the socket what is the user doing (enabled/disabled)\n| `socket_send_progress_above_treshold`                                     |          | `120`               | Is send progress when command `value` is not defined and angle is above this\n| **Layout**                                |          |\n| `slices_minimum_count`              |          | `5`             | minimum count of slices in the circle for multi-functional mode\n| `default_treshold`              |          | `90` [angle]             | this angle is considered as one step when moving with finger around\n| `suppress_app_specifics_shortcuts`              |          | `0`             | app specific shortcuts are ignored when is specific window with app opened\n| **Top right icon**                            |          |                   |\n| `activation_time`              |          | `1.0` [seconds]             | amount of time you have to hold `top_right_icon`\n| `top_right_icon_coactivator_key`                     |          | ``            | empty default means no co-activator keys are required (valid values are `Shift`, `Control` or `Alt` delimeted by space)\u003cbr\u003e\u003cbr\u003ethis works only for activation by touching the top right icon\n\n## Debugging\n\n\nAt first check systemd service logs:\n\n```\n$ journalctl --user -u asus_dialpad_driver@$USER.service\n```\n\nFor further debugging stop installed systemd services:\n\n```\nsystemctl --user stop asus_dialpad_driver@ldrahnik.service\nsystemctl --user disable asus_dialpad_driver@ldrahnik.service\n\nsystemctl --user stop asus_dialpad_driver_ui@ldrahnik.service\nsystemctl --user disable asus_dialpad_driver_ui@ldrahnik.service\n\nsystemctl --user stop asus_numberpad_driver@ldrahnik.service\nsystemctl --user disable asus_numberpad_driver@ldrahnik.service\n```\n\nAnd listen on socket using `socat` (e.g. `$ sudo apt install socat`):\n\n**Is necessary to have enabled in config `socket_enabled`.**\n\n```\n$ socat - UNIX-RECV:/tmp/dialpad.sock\n{\"ts\": 1767791846.2734825, \"enabled\": true}\n{\"ts\": 1767791846.3734825, \"input\": \"center\", \"value\": 1}\n{\"ts\": 1767791846.3737416, \"input\": \"center\", \"value\": 0}\n{\"ts\": 1767791846.461517, \"input\": \"counterclockwise\", \"value\": \"62\", \"title\": \"Volume\"}\n{\"ts\": 1767791846.6073422, \"input\": \"counterclockwise\", \"value\": \"58\", \"title\": \"Volume\"}\n{\"ts\": 1767791846.698195, \"input\": \"counterclockwise\", \"value\": \"56\", \"title\": \"Volume\"}\n{\"ts\": 1767791846.814567, \"input\": \"center\", \"value\": 1}\n{\"ts\": 1767791846.8146207, \"input\": \"center\", \"value\": 0}\n{\"ts\": 1767791846.8976963, \"input\": \"counterclockwise\", \"value\": \"54\", \"title\": \"Volume\"}\n{\"ts\": 1767791846.9604836, \"input\": \"counterclockwise\", \"value\": \"52\", \"title\": \"Volume\"}\n{\"ts\": 1767791847.161212, \"input\": \"counterclockwise\", \"value\": \"50\", \"title\": \"Volume\"}\n{\"ts\": 1767791847.3800304, \"input\": \"clockwise\", \"value\": \"52\", \"title\": \"Volume\"}\n{\"ts\": 1767791847.5570402, \"input\": \"clockwise\", \"value\": \"54\", \"title\": \"Volume\"}\n{\"ts\": 1767791847.6351395, \"input\": \"center\", \"value\": 1}\n{\"ts\": 1767791847.6357095, \"input\": \"center\", \"value\": 0}\n{\"ts\": 1767791847.7126362, \"input\": \"clockwise\", \"value\": \"56\", \"title\": \"Volume\"}\n{\"ts\": 1767791847.789433, \"input\": \"clockwise\", \"value\": \"58\", \"title\": \"Volume\"}\n{\"ts\": 1767791846.2734825, \"enabled\": false}\n```\n\nor use log level `DEBUG`:\n\n```\n$ source /usr/share/asus-dialpad-driver/.env/bin/activate\n(.env) $ LOG=DEBUG python3 dialpad_ui.py\nListening on /tmp/dialpad.sock\n2026-01-15 12:34:23,980 DEBUG {'ts': 1768476870.9540725, 'enabled': True}\n2026-01-15 12:34:26,281 DEBUG {'ts': 1768476866.2752297, 'titles': ['Volume', 'Scroll', 'Brightness'], 'icons': ['/usr/share/icons/elementary/status/symbolic/audio-volume-medium-symbolic.svg', '/usr/share/icons/elementary/status/symbolic/rotation-allowed-symbolic.svg', '/usr/share/icons/elementary/status/symbolic/display-brightness-symbolic.svg'], 'title': None}\n2026-01-15 12:34:27,481 DEBUG {'ts': 1768476867.4463465, 'enabled': False}\n```\n\n## Similar existing\n\n- I do not know any\n\n## Existing related projects\n\n- [c] Set of tools for handling ASUS Dial and simmilar designware hardware under Linux (https://github.com/fredaime/openwheel)\n\n**Why was this project created?** Because linux does not support integration of DialPad into a Touchpad\n\n**Stargazer evolution for the project**\n\n[![Stargazers over time](https://starchart.cc/asus-linux-drivers/asus-dialpad-driver.svg)](https://starchart.cc/asus-linux-drivers/asus-dialpad-driver)\n\n**Buy me a coffee**\n\nDo you think my effort put into open source is useful for you / others? Please put a star in the GitHub repository. Every star makes me proud. Any contribution is also welcome. Would you like to reward me more? There now exists a way : you can invite me for a coffee! I would really appreciate that!\n\nFor this [ko-fi.com/ldrahnik](https://ko-fi.com/ldrahnik) is preferred instead of [buymeacoffee.com/ldrahnik](https://buymeacoffee.com/ldrahnik) because of zero commissions.\n\n[![Ko-fi supporters](images/kofi.png)](https://ko-fi.com/ldrahnik)\n\n[![Buy me a coffee supporters](images/buymeacoffee.png)](https://buymeacoffee.com/ldrahnik)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fasus-linux-drivers%2Fasus-dialpad-driver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fasus-linux-drivers%2Fasus-dialpad-driver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fasus-linux-drivers%2Fasus-dialpad-driver/lists"}