Vitaliy Alexeyev

07 / 07 · Rust · syngui · hidraw

ardor-mouse

A native Linux configuration tool for ARDOR GAMING wireless mice — a replacement for the vendor's Windows-only utilities. Supported now: Edge Air Ultra and Rukh; new models are added as one table each.

Licence
MIT
Platform
Linux · ARDOR GAMING mice
Packages
ardor-mouse (AUR)
Status
0.3.0 · Edge Air Ultra, Rukh
ardor-mouse: DPI stages with indicator colours and the live mouse
ardor-mouse: DPI stages with indicator colours and the live mouse
mouse models supported, more to come
2
DPI on the Rukh (from 50), up to 8 stages
30 000
interface languages, switched on the fly
5
tests on packets and dumps from both mice
59
01

What it is

The vendor ships no Linux software and publishes no protocol. Everything here was reverse-engineered: the Windows utilities were decompiled, their USB traffic compared against live mice, and every EEPROM field verified on real dumps.

Written in Rust on syngui, it talks to the mouse directly through hidraw — no kernel module, no daemon, no root. Settings are read from the mouse's own memory and only the changed regions are written back, so the tool never overwrites what it does not understand.

It is built for the whole ARDOR GAMING line on the JM03 (Compx) controller: the mice share one command set and EEPROM map, and everything that differs between models — sensor, DPI codec, polling rates, report types — lives in one table per model. Rukh support came from a contributor, @Metisav, tested on a real Rukh.

The live mouse in ardor-mouse playing the lighting effect
The mouse in the app glows the way the real one will: the lighting effect plays at the chosen speed and brightness.
02

Key features

  • Live mouse, as in Lenovo Legion Space: the picture of your mouse plays the lighting effect at the chosen speed and brightness, the DPI indicator flashes in the stage colour, and hovering a button highlights it on the mouse.
  • DPI: up to 8 stages (6 on the Rukh), 50–19 000 DPI on the Edge Air Ultra and 50–30 000 on the Rukh, each with its own indicator colour.
  • RGB lighting (Edge Air Ultra): static, breathing, flow, neon, marquee, colour breathing or off — colour, speed, brightness, lights off while moving.
  • Buttons: remap all 6 — clicks, back / forward, DPI cycle / up / down, or disable; macros and the fire button are kept as they are.
  • Sensor: polling rate 125–1000 Hz (2000 Hz on the Rukh), lift-off distance 1 / 2 mm (0.7 mm on the Rukh), debounce, angle snapping, ripple control, sleep timeout; Motion Sync and LP/HP sensor mode on the Rukh.
  • Battery level and charging state.
  • 5 interface languages: English, Russian, Ukrainian, Kazakh, German — from the system, switchable from the title bar without a restart.
  • Its own window frame with animated page transitions; --probe [--write-test] checks the mouse from the terminal (write and revert verified byte for byte); --simulate [rukh] runs without hardware.
03

Install

yay -S ardor-mouse        # or: paru -S ardor-mouse

The package installs the binary, a menu entry, icons and a udev rule that gives the logged-in user access to the mouse; replug the receiver once if it was already plugged in. Other distributions: the release archive ardor-mouse-<version>-x86_64-linux.tar.gz with sudo ./install.sh. From source: cargo build --release plus the udev rule from packaging/.

Full instructions in the README →

04

Requirements and limitations

  • Supported mice: Edge Air Ultra (PixArt PMW3370; receiver 25a7:fa7c, cable 25a7:fa7b) and Rukh (PixArt PAW3950; receiver 3554:f53e, cable 3554:f53d). The list grows: other ARDOR GAMING mice on the JM03 controller are added as a model table.
  • The Rukh's cable mode is taken from the vendor's configuration and not tested — on the tested unit the cable only charges.
  • If the mouse is asleep the receiver answers but its memory is unreachable — move the mouse and the settings load by themselves.
  • Unofficial and not affiliated with ARDOR GAMING. EEPROM writes are done the way the vendor utilities do them, but at your own risk.
05

Screenshots

Measured, not promised

How it is tested

The protocol was reverse-engineered from and tested on real mice — the Edge Air Ultra on my desk and the Rukh by @Metisav; the tests decode packets and EEPROM dumps captured from both.

Every number here is measured on my own hardware. github.com/VitaminDB/ardor-mouse