Tap, hold, and rotate your touchpad to control volume, brightness, media, keyboard backlight, night light, screenshots, and GPU mode — no extra hardware.
The ASUS Creator Dial is a physical knob found on premium creative laptops. It's a fantastic way to control tools while drawing, editing, or listening — but it's proprietary, expensive, and locked to specific hardware.
Touchpad Dial recreates the entire experience in software — right on the touchpad you already own. No dial hardware, no special laptops, no purchases.
If your touchpad can report multi-touch positions (virtually all modern ones can), you can have a creative dial:
| Need | Without Touchpad Dial | With Touchpad Dial |
|---|---|---|
| Change volume mid-work | Reach for keyboard / volume knob | Rotate on touchpad |
| Adjust brightness | Fumble with Fn keys | Rotate on touchpad |
| Next track | Alt-Tab to music app | Rotate on touchpad |
| Keyboard backlight | Keyboard shortcut | Rotate on touchpad |
| Night light | System settings hunt | Rotate on touchpad |
| Screenshot | PrintScreen + crop | Tap the center |
| GPU mode | Manufacturer software | Rotate on touchpad |
git clone https://github.com/AayusX/touchpad-dial.git
cd touchpad-dial
./install.shLog out and back in (group permissions), then:
systemctl --user start creatordial-daemon creatordial-uiTip
Both services start automatically with your desktop session after install.
- Move your finger to the top-right corner of the touchpad and hold for 1 second — the dial activates and the touchpad is now a dial.
- Rotate your finger in a circle to control the active function (volume by default).
- Quickly tap the center of the circle to cycle to the next function.
- Hold the center for 1 second — a segmented ring appears; rotate while holding to pick a function, release to select.
- Corner-activation gesture — hold the top-right corner to turn the touchpad into a dial; the cursor is frozen while active so your mouse never jumps.
- Rotary gesture recognition — 90° detents, adjustable sensitivity, works on any multi-touch touchpad.
- Circular function picker — hold the center to open a segmented ring UI, rotate to browse, release to select. Fades away automatically so it never blocks you.
- Silent by default — normal rotation does what it does without popping up UIs; the overlay appears only when you ask for it.
- 7 built-in plugins — Volume, Brightness, Media, Keyboard Backlight, Night Light, Screenshot/Recording, and GPU mode.
- Plugin architecture — drop a new plugin in
plugins/, register it indaemon.py, done. - System tray — quick show/hide and quit control.
- Extensible config — gestures, layout geometry, plugins, and themes all configurable (
~/.config/creatordial/config.json). - Wayland- and X11-friendly — automatically detects your desktop and uses the right IPC/DBus paths (KDE NightLight, PowerDevil brightness, Spectacle, etc.).
- Auto-start services — systemd user units install and enable themselves.
| Plugin | Rotate CW | Rotate CCW | Tap center | Hold center |
|---|---|---|---|---|
| Volume | Volume up | Volume down | Toggle mute | — |
| Brightness | Brightness up | Brightness down | — | — |
| Media | Next track | Previous track | Play / pause | Next track |
| Keyb. Backlight | Brightness up | Brightness down | Toggle | — |
| Night Light | Warmer | Cooler | Toggle | — |
| Screenshot | — | — | Screenshot | Record screen |
| GPU Mode | Next mode | Previous mode | — | — |
Adding your own? See the plugin development guide.
| Guide | What's inside |
|---|---|
| Installation | System requirements, apt deps, udev, uninstall |
| Usage | All gestures, UI behavior, troubleshooting tips |
| Configuration | Every config.json option explained |
| Architecture | Daemon ⇄ UI IPC, gesture engine, event flow |
| Plugin Development | Write your own plugin in 10 minutes |
| Troubleshooting | Logs, debug tool, common problems |
┌─────────────────────────────┐ Unix socket ┌─────────────────────────────┐
│ creatordial-daemon │ /tmp/creatordial.sock │ creatordial-ui (PySide6) │
│ │ ──────────────────────►│ - Dial overlay widget │
│ InputReader (libevdev) │ JSON datagrams │ - Circular picker │
│ GestureEngine (gestures) │ │ - System tray icon │
│ PluginManager (volume, …) │ └─────────────────────────────┘
│ ActionExecutor (uinput keys)│
│ I2C controller (dialpad EC) │
└─────────────────────────────┘
Touchpad events → gestures → plugin actions → system effects (via D-Bus, uinput, or CLI), with live feedback drawn by the UI process.
Full deep-dive: docs/ARCHITECTURE.md.
- Python 3.10+
- PySide6 / Qt 6 — the overlay UI, system tray, and animations
- libevdev + uinput — kernel input events and virtual key device
- systemd user services — auto-start daemon + UI
- D-Bus — KDE PowerDevil (brightness) and KWin NightLight integration
- CLI fallbacks —
wpctl/pactl/amixer(volume),spectacle/scrot(screenshots),nvidia-smi(GPU)
- Settings GUI (instead of raw JSON editing)
- Per-application profiles UI
- Gesture tweaks: haptic-style feedback, adjustable detent angle
- More plugins: app switcher, window management
- Conversation of the "scroll" companion gesture
- Flatpak / AUR packaging
Contributions of all kinds are welcome — code, docs, translations, bug reports.
- Fork it.
- Create your feature branch (
git checkout -b feat/awesome). - Commit your changes (
git commit -am 'Add awesome feature'). - Push (
git push origin feat/awesome). - Open a Pull Request.
See docs/CONTRIBUTING.md for style and testing guidance.
GNU General Public License v2.0 — because the I2C/DialPad protocol work was reverse-engineered from the GPL-licensed ASUS dialpad driver, this project keeps that license and extends the same freedom to you.
If this project helps your workflow, a ⭐ goes a long way.

