A command-line tool to configure the NOIR M1 gaming mouse on Linux. The vendor
software only runs on Windows; noirm1 speaks the same USB protocol, which was
worked out by reverse engineering the vendor tool (see How the protocol was found).
This is an independent project. It is not made or supported by NOIR GEAR.
| device | USB id | status |
|---|---|---|
| NOIR M1, USB cable | 25a7:fa7c |
tested |
| NOIR M1, USB cable, second product id from the vendor config | 25a7:fa7b |
accepted by the tool, not tested |
| NOIR M1 2.4G receiver | 25a7:fa70 |
not supported (noirm1 list shows it, nothing more) |
Connect the mouse with the USB cable to configure it.
- Write-only. The mouse firmware does not answer read requests, so
noirm1cannot show the current settings or make a backup. Write down what you set.noirm1 dumpexists for research and gets no answer from this mouse. - Sleep. About 5 seconds after the mouse last moved, it stops accepting writes.
When that happens,
noirm1 setasks you to keep moving the mouse and retries for up to 30 seconds. - Changes apply at once. There is no separate "save" step and no replug needed.
- Not tested on hardware yet:
set button(all actions). Slots 1 to 6 follow the vendor defaults (left, right, middle, back, forward, DPI cycle); which physical button each slot maps to has not been checked. See docs/BUTTONS.md.set dpi-effect, andset dpi-color: the indicator colors did not show in the one test so far.set lighting streamingandset lighting colorful-breathing, and--brightnessvalues below 10.
- Tested on hardware:
set polling(report interval measured at 1 ms and 2 ms),set dpi,set dpi-levelsandset dpi-count(checked by cursor feel and the DPI button, not by counts),set lightingwithoff,steady,breathing,neonandsingle-color-flow(checked by eye).
A graphical interface (noirm1-gui) is in progress and not ready to use.
You need Rust 1.80 or newer and a Linux system with the hidraw driver.
There are no C library dependencies.
Build from the source directory:
cargo build --release -p noirm1-cliThe binary is target/release/noirm1. Copy it somewhere on your PATH, or let
cargo install it into ~/.cargo/bin:
cargo install --path crates/noirm1-cliWithout a udev rule only root can open the mouse. Install the rule for your system:
# systemd-logind or elogind (most desktop distros)
sudo cp udev/70-noir-m1.rules /etc/udev/rules.d/
sudo udevadm control --reload
sudo udevadm triggerThen replug the mouse. For systems without logind (for example Void, Alpine or
Gentoo with OpenRC), use the group-based rule in udev/70-noir-m1-group.rules.
udev/README.md has the steps for both.
noirm1 [OPTIONS] <COMMAND>
Commands:
list List hidraw nodes that belong to the mouse or its receiver
status Handshake and show what the mouse reports about itself
dump Try to read EEPROM (the NOIR M1 firmware does not answer reads)
set Write one setting to the mouse
Options:
--device <PATH> hidraw node of the mouse config interface (default: detect)
--trace Print every packet sent to and received from the mouse
Check that the mouse is found:
noirm1 list
noirm1 statusPolling rate (125, 250, 500 or 1000 Hz):
noirm1 set polling 1000DPI. Values from 50 to 10000 go in steps of 50, and 10100 to 19000 in steps of 100.
noirm1 set dpi-levels 800,1600,3200 # levels 1-3, DPI button cycles through 3
noirm1 set dpi 2 1600 # change level 2 only
noirm1 set dpi 3 1600 --y 800 # different vertical DPI
noirm1 set dpi-count 4 # DPI button cycles through 4 levels
noirm1 set dpi-color 2 00ff00 # indicator color of level 2 (not tested)Main lighting. Effects: off, steady, breathing, streaming, neon,
single-color-flow, colorful-breathing. --color takes RRGGBB or r,g,b;
--speed and --brightness go from 1 to 10.
noirm1 set lighting steady --color ff0000
noirm1 set lighting breathing --color 00ff00 --speed 3
noirm1 set lighting offDPI indicator effect (not tested): off, steady, breathing, with
--brightness 1-10 and --speed 1-5.
noirm1 set dpi-effect steady --brightness 5Buttons (not tested). Slot 1-16 as in the vendor layout. Actions: left, right,
middle, back, forward, disabled, dpi-cycle, dpi-up, dpi-down,
double-click, triple-click, polling-switch, rgb-toggle, profile-switch.
noirm1 set button 5 dpi-upEvery command takes --device /dev/hidrawN to pick a node by hand and --trace
to print the raw packets. Run noirm1 <command> --help for the full option list.
The vendor installer contains OemDrv.exe, a 32-bit Windows program. Its
disassembly was read with a small Python kit (pefile and capstone, in
re/tools/). Each finding was then checked against the real mouse over hidraw
where possible. The notes mark every claim as confirmed on hardware, read from
the code, or a guess:
- docs/PROTOCOL.md: packet format, commands, EEPROM map, hardware results
- docs/STARTUP.md: what the vendor tool sends when it finds the mouse
- docs/RECOVERY.md: Restore, the Apply flow, events sent by the mouse
- docs/BUTTONS.md: button slots, combo keys and macros
- docs/LIGHTING.md: lighting fields
- This project is not affiliated with, endorsed by, or supported by NOIR or Compx. Product names are used only to say which device this tool works with; trademarks belong to their owners.
- The protocol was worked out by reverse engineering for interoperability, so that a mouse you own can be configured on Linux. The repository contains no vendor code, no vendor binaries and no disassembly of them.
- Writing settings with an unofficial tool may affect your warranty. Use it at your own risk; the software comes without any warranty (see the license).
- If you represent the vendor and have a concern, please open an issue.
MIT, see LICENSE.