ak820ctl
linux driver for the ajazz ak820 max plus (the tri-mode rgb one). it does lighting, per-key colors, key remaps, macros, sleep/response settings and battery status, over the usb cable or the 2.4g dongle.
install
pipx install ak820ctl
then let your user talk to the keyboard without sudo:
sudo curl -o /etc/udev/rules.d/70-ajazz-ak820.rules \
https://raw.githubusercontent.com/shrey715/ak820ctl/main/udev/70-ajazz-ak820.rules
sudo udevadm control --reload && sudo udevadm trigger
unplug and replug the dongle or cable after that.
usage
run ak820ctl with no arguments to get the tui. it has tabs for lighting, per-key rgb, remaps, macros and settings. you click keys on the keyboard map to select them, pick a color, and hit upload. battery refreshes every 5 seconds.
everything is also available as plain commands if you want to script it:
ak820ctl status # battery + link state
ak820ctl modes # list lighting effects
ak820ctl light 7 -b 5 # static light, full brightness
ak820ctl light 8 -s 3 # breathing at speed 3
ak820ctl custom -a 101010 esc=red w=cyan a=cyan s=cyan d=cyan
ak820ctl sleep 30 # 5 | 15 | 30 | never
ak820ctl response 1 # key response gear, 1 is fastest
ak820ctl fn-switch fn # normal | fn
ak820ctl remap capslock esc
ak820ctl remap --fn f1 playpause
ak820ctl remap --list-targets
ak820ctl macro f12 +lctrl c -lctrl # ctrl+c on f12
ak820ctl reset-keys
ak820ctl menu # old-school prompt menu
macro events: +key presses, -key releases, a bare key taps it, and @ms sets the delay after an event (like a@200). flags like --fn or -r 3 go before the key name.
-n / --dry-run prints the packets and sends nothing, and -v shows every packet that goes out. both work with the tui too (ak820ctl -n).
what works and what doesn't
decoded from the driver: lighting effects with brightness/speed/direction, per-key colors (custom mode), sleep timer, key response time, the fn switch, remapping to keys or media functions, keyboard macros, and the battery/link query.
still open (see the issues tab): what the effect color index numbers mean, live streaming frames, one unidentified command (0x0A), firmware updates and mouse-button assignments.
if you own one of these, running ak820ctl -v status and posting what comes back helps a lot.
how it works
every command is a 64-byte hid output report that starts with aa 55 cc 33, sent to the vendor hid interface (usage page 0xff02). PROTOCOL.md has the full command table and the driver function each finding came from.
dev
git clone https://github.com/shrey715/ak820ctl && cd ak820ctl
python -m venv .venv && .venv/bin/pip install -e ".[dev]"
.venv/bin/pytest
license
mit. "ajazz" and "ak820" are their owner's trademarks and only used here to say what hardware this is for.
Metadata
Release files for ak820ctl 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| ak820ctl-0.1.0.tar.gz | 23.1 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ak820ctl-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 45.0 kB
Release files / ak820ctl-0.1.0.tar.gz
| Download URL | ak820ctl-0.1.0.tar.gz |
|---|---|
| Size | 23.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8bbcd9d2201212121589e13939cbb4e330db4ec8bb3016f9e0a3dcebd5e97890
|
|
BLAKE2b-256 checksum How to use checksums |
255055e5ecabae4e2ff3d8a5daf90732cc3177182e129145e16ee81a24c8b17a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / ak820ctl-0.1.0-py3-none-any.whl
| Download URL | ak820ctl-0.1.0-py3-none-any.whl |
|---|---|
| Size | 21.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e4d35e824296dc103f22aa38d01df93e3300c1bb56ae7355f50ef627f38351b2
|
|
BLAKE2b-256 checksum How to use checksums |
67a4f0e8873117a6b2b5159223b70777edf7030f4d9240a96d5e6a1e042ee866
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for ak820ctl 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.