Skip to content

About

NOIR M1 mouse software for Linux: set DPI, polling rate, RGB lighting and buttons from a CLI or GUI. Written in Rust, reverse-engineered from the official Windows app.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

Repository files navigation

noirm1

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.

Supported hardware

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.

Limitations

  • Write-only. The mouse firmware does not answer read requests, so noirm1 cannot show the current settings or make a backup. Write down what you set. noirm1 dump exists 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 set asks 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, and set dpi-color: the indicator colors did not show in the one test so far.
    • set lighting streaming and set lighting colorful-breathing, and --brightness values below 10.
  • Tested on hardware: set polling (report interval measured at 1 ms and 2 ms), set dpi, set dpi-levels and set dpi-count (checked by cursor feel and the DPI button, not by counts), set lighting with off, steady, breathing, neon and single-color-flow (checked by eye).

A graphical interface (noirm1-gui) is in progress and not ready to use.

Install

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-cli

The binary is target/release/noirm1. Copy it somewhere on your PATH, or let cargo install it into ~/.cargo/bin:

cargo install --path crates/noirm1-cli

Permissions (udev)

Without 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 trigger

Then 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.

Usage

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 status

Polling rate (125, 250, 500 or 1000 Hz):

noirm1 set polling 1000

DPI. 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 off

DPI indicator effect (not tested): off, steady, breathing, with --brightness 1-10 and --speed 1-5.

noirm1 set dpi-effect steady --brightness 5

Buttons (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-up

Every 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.

How the protocol was found

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:

Disclaimer

  • 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.

License

MIT, see LICENSE.

About

NOIR M1 mouse software for Linux: set DPI, polling rate, RGB lighting and buttons from a CLI or GUI. Written in Rust, reverse-engineered from the official Windows app.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages