Skip to main content

GTK4 Wacom utility with Wayland pad daemon

Project description

Wacom Utility (GTK4 + Wayland)

Modernized Wacom utility with:

  • GTK4 GUI (wacom-utility)
  • Wayland backend via evdev + ydotool (wacom-wayland-pad-daemon)
  • X11 fallback for xsetwacom where available

Current Architecture

  • Frontend: wacom-utility
    • Device list, pad layout, mapping UI
    • Writes Wayland mappings to ~/.wacom_utility_wayland.json
  • Backend daemon: wacom-wayland-pad-daemon
    • Reads pad events from evdev
    • Executes mapped actions through ydotool
    • Supports strip scrolling (EV_ABS) with threshold/smoothing/multiplier

Dependencies

Common

  • Python 3.10+
  • python3-gi / GTK4 runtime
  • python3-cairo
  • python3-evdev

Wayland (sway/wlroots path)

  • ydotool
  • ydotoold running in user session
  • swaymsg (for output mapping in GUI)

X11

  • xsetwacom (wacom-tools)

Run

PyPI-style user install:

python3 -m pip install --user .

This installs console entry points to:

  • ~/.local/bin/wacom-utility
  • ~/.local/bin/wacom-wayland-pad-daemon

The Python package and bundled UI/images/XML are installed under the user site-packages directory, typically:

  • ~/.local/lib/python3.x/site-packages/wacom_utility

That is the standard Python packaging layout. A normal pip install --user does not install package data to ~/.local/share.

Run after user install:

wacom-utility

Quick environment check:

wacom-utility --check

Source checkout without installation:

PYTHONPATH=src python3 -m wacom_utility.wacom_utility

Wayland Mapping Flow

  1. Open GUI and configure pad buttons (Pad/Edit or Mapping tab).
  2. Settings are stored in:
    • ~/.wacom_utility_wayland.json
  3. Start daemon:
wacom-wayland-pad-daemon

Source checkout without installation:

PYTHONPATH=src python3 -m wacom_utility.wayland_pad_daemon

Strip scroll tuning

~/.wacom_utility_wayland.json supports:

{
  "strip_scroll": {
    "enabled": true,
    "threshold": 150,
    "multiplier": 3,
    "smoothing": 0.4
  }
}

Future enhancement note:

  • The current Wayland touch strip behavior applies pressure-based acceleration by default for scroll actions.
  • If finer control is needed later, add dedicated left/right touch strip tuning controls in the GUI for pressure threshold and multiplier instead of relying only on the shared strip_scroll defaults.

systemd --user (Auto-start daemon)

For PyPI-style user installs, the repo user unit targets:

  • %h/.local/bin/wacom-wayland-pad-daemon
  • /usr/bin/ydotoold --socket-path=%t/.ydotool_socket --socket-perm=0660

Service files included:

  • %h/.local/bin/wacom-wayland-pad-daemon
  • systemd/user/wacom-wayland-pad-daemon.service
  • systemd/user/ydotoold.service

Both the repo user unit and the RPM unit are rendered from the shared template:

  • systemd/wacom-wayland-pad-daemon.service.in
  • systemd/ydotoold.service.in

User install flow:

python3 -m pip install --user .
mkdir -p ~/.config/systemd/user
cp systemd/user/wacom-wayland-pad-daemon.service ~/.config/systemd/user/
cp systemd/user/ydotoold.service ~/.config/systemd/user/
systemctl --user daemon-reload
systemctl --user enable --now ydotoold.service wacom-wayland-pad-daemon.service

For RPM installs, the packaged user unit targets the system wrapper:

  • /usr/bin/wacom-wayland-pad-daemon
  • /usr/bin/ydotoold --socket-path=%t/.ydotool_socket --socket-perm=0660

RPM install:

systemctl --user daemon-reload
systemctl --user enable --now ydotoold.service wacom-wayland-pad-daemon.service

Source checkout:

Do not use the bundled user unit directly from a source checkout unless you have already installed the package to ~/.local/bin. Otherwise run the daemon directly from the repo:

PYTHONPATH=src python3 -m wacom_utility.wayland_pad_daemon

Check status/logs:

systemctl --user status wacom-wayland-pad-daemon.service
journalctl --user -u ydotoold.service -f
journalctl --user -u wacom-wayland-pad-daemon.service -f

Disable:

systemctl --user disable --now wacom-wayland-pad-daemon.service ydotoold.service

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wacom_utility-0.1.4.tar.gz (919.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wacom_utility-0.1.4-py3-none-any.whl (1.2 MB view details)

Uploaded Python 3

File details

Details for the file wacom_utility-0.1.4.tar.gz.

File metadata

  • Download URL: wacom_utility-0.1.4.tar.gz
  • Upload date:
  • Size: 919.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for wacom_utility-0.1.4.tar.gz
Algorithm Hash digest
SHA256 f208f7157f4b10e472f787b42bd280909412835c42e612784ce06806a5a58fee
MD5 87a2595084cfd59e6a6cc96ac64c3d3e
BLAKE2b-256 8eee002ab1d4c6997debf96c6f4084647dcbbd7d3a0f9621ce5e070a92d194b5

See more details on using hashes here.

File details

Details for the file wacom_utility-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: wacom_utility-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 1.2 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for wacom_utility-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 9cc789c743f35a896117248a9fc25d43a8548d3f366a5670bdc23bb489b09b82
MD5 20c49a3236f43c15d2e912b086b883e0
BLAKE2b-256 55feaf5b0515b998efd8c171b0e8d0cc1f086fc249dbbce3787b7763f0e6fdf8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page