Cross-platform keyboard cleaning utility — lock your keyboard, wipe it clean.
Project description
KeyClean
Cross-platform keyboard cleaning utility. Locks the keyboard, visualizes keypresses on a full ISO 105-key layout, and suppresses input to the OS — so you can wipe your physical keyboard without triggering commands.
Vibe-coded using Claude Sonnet 4.6.
Installation
pip install keyclean
Platform extras for stronger input suppression:
pip install "keyclean[grab]" # pynput (macOS / Windows)
pip install "keyclean[grab,linux]" # pynput + python-xlib (Linux X11)
Usage
keyclean
# or
python -m keyclean
# or from the dev tree
uv run keyclean
The application launches fullscreen. All keypresses are shown on the virtual keyboard and counted but have no effect on the OS.
Exit
- Type
keys are cleanon the physical keyboard, or - Click the Done button with the mouse.
Platform Notes
| Platform | Suppression method | Notes |
|---|---|---|
| Linux (X11) | XGrabKeyboard |
Full suppression while window is focused |
| Linux (Wayland) | SDL2 shortcuts_inhibit |
Best-effort; Ctrl+Alt+F* cannot be blocked |
| macOS | pynput / CGEventTap |
Requires Accessibility permission |
| Windows | pynput / LowLevelHook |
Ctrl+Alt+Del cannot be blocked (by design) |
Without the optional extras the app falls back to pygame-only mode (fullscreen), which prevents most accidental input but a warning banner is displayed.
Development
Clone and set up the dev environment with uv:
git clone https://github.com/gunchev/keyclean
cd keyclean
uv sync --group dev # core dev tools + pynput
uv sync --group dev --extra linux # also install python-xlib (Linux X11)
Run the test suite:
uv run pytest
# or via make
make test
Lint and format:
make lint # pylint
make pep8format # autopep8
Build a wheel:
make build
Publish to PyPI / TestPyPI:
make upload # PyPI
make test_upload # TestPyPI
Dependency groups:
| Command | Installs |
|---|---|
uv sync --group dev |
dev toolchain (pytest, pylint, autopep8, tox, twine, pynput) |
uv sync --extra grab |
pynput (runtime, macOS/Windows suppression) |
uv sync --extra linux |
python-xlib (runtime, Linux X11 suppression) |
uv sync --extra macos |
pyobjc-framework-Quartz (runtime, macOS) |
License
This is free and unencumbered software released into the public domain. See LICENSE or https://unlicense.org.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file keyclean-0.9.7.tar.gz.
File metadata
- Download URL: keyclean-0.9.7.tar.gz
- Upload date:
- Size: 365.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9f2b526d43163d5373a2ca3ba925f0912d9795913478ff8d3c80c546d59834ab
|
|
| MD5 |
404a94cdd896d97f44a48e494036014f
|
|
| BLAKE2b-256 |
59becdb8daef362d3b1a128a5dacacd4b39b18fc1b9ef91b2d433eca988f6db8
|
File details
Details for the file keyclean-0.9.7-py3-none-any.whl.
File metadata
- Download URL: keyclean-0.9.7-py3-none-any.whl
- Upload date:
- Size: 25.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
138d64f5e59b5a40d6ceb9d3cb01d4c277003d8885252dafb46cd24efd4722d6
|
|
| MD5 |
1f80da877108c664a9c962d453e49d18
|
|
| BLAKE2b-256 |
3903af133c0e0f5686c7cef99d518f70767819d6ac29e7cef644089135ca02c7
|