AJAZZ Keyboard for Omarchy
A native Omarchy Quattro top-bar controller for the AJAZZ AK820 MAX keyboard. Choose a lighting effect, full RGB color, brightness, speed, direction, and rainbow mode without running the Windows driver.
Requirements
- Omarchy Quattro on Linux
- Python 3; the backend uses only the standard library
- udev and Linux hidraw support
- AJAZZ AK820 MAX connected in wired USB mode
- USB identity
0C45:8009with HID collectionFF13:0001
No Python packages, external services, remote builds, or second Quickshell process are required.
Bluetooth device 0C45:FEFE exposes only standard keyboard, mouse, media, and
lock-LED reports, so it cannot carry these RGB commands. The unverified
05AC:024F 2.4 GHz receiver is intentionally read-only as well.
Install
Install the plugin through Omarchy's transactional Git installer:
omarchy plugin add https://github.com/ESHAYAT102/ajazz-keyboard-omarchy-plugin.git --enable
The RGB interface is root-owned by default. Install the included udev rule to grant the active desktop session access only to USB interface 3:
PLUGIN_DIR="$HOME/.config/omarchy/plugins/esh.ajazz-keyboard"
sudo install -Dm644 "$PLUGIN_DIR/udev/70-ajazz-ak820.rules" \
/etc/udev/rules.d/70-ajazz-ak820.rules
sudo udevadm control --reload-rules
Reconnect the keyboard in wired mode after installing the rule. The panel detects the supported interface automatically.
Usage
- Left-click the keyboard icon to open or close the panel.
- Press Escape to close the panel.
- Select an effect from the dropdown.
- Pick a color visually or enter
#RRGGBBin the hex field. - Adjust brightness, speed, direction, and rainbow mode in the panel.
- Scroll over the bar icon to adjust brightness.
- Right-click the bar icon to toggle lighting power.
The plugin can also be opened and closed through the standard shell lifecycle:
omarchy-shell shell summon esh.ajazz-keyboard '{}'
omarchy-shell shell hide esh.ajazz-keyboard
Backend diagnostics
The bundled helper can inspect the connection without writing to hardware:
PLUGIN_DIR="$HOME/.config/omarchy/plugins/esh.ajazz-keyboard"
"$PLUGIN_DIR/bin/ajazz-keyboard" status
"$PLUGIN_DIR/bin/ajazz-keyboard" diagnose
"$PLUGIN_DIR/bin/ajazz-keyboard" apply --effect static --color '#ff3158' --dry-run
The helper refuses writes unless both the wired VID/PID and vendor collection match. It never opens the standard keyboard input interfaces.
Remove
Remove the plugin through Omarchy:
omarchy plugin remove esh.ajazz-keyboard
The privileged udev rule and optional saved lighting state are separate from the Git checkout. Remove them explicitly if they are no longer wanted:
sudo rm -f /etc/udev/rules.d/70-ajazz-ak820.rules
sudo udevadm control --reload-rules
rm -rf "${XDG_STATE_HOME:-$HOME/.local/state}/omarchy/plugins/esh.ajazz-keyboard"
Reconnect the keyboard once after removing the rule.
Development
Validate the repository root and QML entry points before publishing:
omarchy plugin validate .
/usr/lib/qt6/bin/qmllint -I "$OMARCHY_PATH/shell" \
BarWidget.qml Panel.qml Service.qml ColorPicker.qml
PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests -v
The protocol tests cover report size, command order, control markers, RGB and
parameter offsets, state persistence, and the captured AA 55 trailer.
Protocol
The implementation follows the vendor driver's 35 ms pacing and captured feature-report transaction:
04 18start, then feature readback04 13mode preamble with byte 8 set to01, then readback- 64-byte effect payload
04 02save, then readback04 F0finish, then readback
At the Linux hidraw boundary every feature transfer is prefixed with report ID zero, producing a 65-byte ioctl buffer for the unnumbered 64-byte report.
License
MIT. See LICENSE.