Skip to content

juanjodarko/razer-nari-pairing

Razer Nari Wireless Pairing Tool

Open-source tool to pair Razer Nari headsets with their USB dongles on Linux - no Razer software required!

What This Does

Pairs any Razer Nari headset variant with any Razer Nari dongle variant, bypassing Razer's artificial restrictions.

Supported Hardware:

  • Razer Nari Ultimate TESTED (confirmed working - thanks @grumblefoot and @rashidcultura!)
  • Razer Nari (Regular) TESTED (confirmed working)
  • Razer Nari Essential NOT TESTED (likely works, needs verification)

Tested Distros:

Note: The pairing command was extracted from Razer's official utility which supports all Nari variants, and cross-model pairing has been confirmed working (Regular + Ultimate dongle). If you have a Nari Essential, please test and report your results!

Quick Start

Installation

  1. Install Python dependencies:
    pip install -r requirements.txt

Requirements

  1. Python 3.7+
  2. PyUSB library:
    pip install pyusb
  3. USB charging cable for your headset
  4. Root/sudo access (for USB control)

Pairing Process

  1. Connect both devices:

    • Plug dongle into USB port
    • Connect headset via USB charging cable
    • Turn ON the headset (press power button)
  2. Run the pairing tool:

    ./pair.sh

    Or directly:

    sudo python3 razer_nari_pair.py
  3. Follow on-screen instructions:

    • Tool sends pairing commands to both devices
    • Devices exchange pairing data
    • Wait 5 seconds
  4. Test wireless connection:

    • Disconnect headset USB cable
    • Turn headset OFF then ON
    • Headset should connect wirelessly!

Expected Result

  • Headset LED: Solid blue then disappears (connected)
  • Sound: Connection tone in headset
  • Audio: Works wirelessly!
  • Pairing is permanent - they remember each other forever! (so far)

What's Next?

After pairing your headset:

Audio Configuration (Important!)

The Razer Nari has dual audio outputs (Game stereo + Chat mono). For best audio quality, you'll need proper audio profiles:

For PulseAudio:

For PipeWire:

After installing the profiles, set Game Output as default for best quality:

pactl set-default-sink alsa_output.usb-Razer_Razer_Nari_Ultimate-00.analog-game

Note: Additional tools (battery monitoring, audio testing) are under development and will be released in future versions.

How It Works

This tool was created through reverse engineering of the Razer Nari pairing protocol:

  • Analyzed the pairing process to understand the USB HID communication
  • Identified the pairing command: FF 19 00 40 00 00 00 00
  • Discovered that both devices (dongle AND headset) need the command
  • Created an independent, open-source implementation

Troubleshooting

"No dongle found"

  • Ensure dongle is plugged in
  • Check lsusb shows device 1532:051a (or 051c/051e)

"No headset found"

  • Headset MUST be connected via USB charging cable
  • Turn ON the headset while USB-connected
  • Check lsusb shows device 1532:051d (or 051b/051f)

"Permission denied"

  • Run with sudo:
    sudo python3 razer_nari_pair.py

Headset keeps blinking blue

  • Means it's searching but not connected
  • Try running the pairing tool again
  • Make sure headset was ON when commands were sent

CachyOS / strict PEP 668 distros

Some distros (CachyOS, Fedora 38+, Ubuntu 23.04+) enforce PEP 668 and block global pip installs. Use a virtual environment instead:

python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt    # use -v flag if install seems to hang
sudo venv/bin/python3 razer_nari_pair.py

(Thanks @rashidcultura for testing on CachyOS!)

No audio

  • On Linux, check PulseAudio/PipeWire:
    pactl list sinks | grep Nari
    pactl set-default-sink alsa_output.usb-Razer_Razer_Nari_Ultimate-00.analog-game

Technical Details

Pairing Command:

FF 19 00 40 00 00 00 00
│  │  │  │  └─ Padding
│  │  │  └─ PAIR command (0x40)
│  │  └─ Padding
│  └─ Report ID (0x18 + 1)
└─ Header marker

Protocol:

  • Standard USB HID Feature Reports
  • Control Transfer: bmRequestType=0x21, bRequest=0x09 (SET_REPORT)
  • Dongle: Interface 5
  • Headset: Interface 0

Both devices must receive the pairing command to establish wireless connection.

Project Structure

razer-nari-pairing/
├── razer_nari_pair.py       # Main pairing tool
├── pair.sh                  # Quick runner script
├── requirements.txt         # Python dependencies
├── README.md                # This file
├── CONTRIBUTING.md          # Contribution guidelines
├── CODE_OF_CONDUCT.md       # Community guidelines
├── SECURITY.md              # Security policy
├── LICENSE                  # MIT License

License

MIT License - See LICENSE file for details.

Contributing

We need your help! This is a community reverse engineering project - contributions are very welcome!

Priority areas:

  • Hardware testing - Razer Nari Essential variant needs testing
  • Bug reports - Found an issue? Let us know!
  • Code contributions - Bug fixes, features, platform support
  • Documentation - Improvements, translations, troubleshooting tips

See CONTRIBUTING.md for detailed guidelines on how to contribute, report issues, and submit pull requests.

Let's help others with "orphaned" Razer headsets get their devices working on Linux!

Disclaimer

This tool is not affiliated with or endorsed by Razer Inc. Use at your own risk.


Enjoy your wireless headset!

Made with reverse engineering, persistence, and a lot of USB packet analysis.

About

Open-source tool to pair Razer Nari headsets with USB dongles on Linux. No Razer software required. Supports cross-model pairing between Ultimate, Regular, and Essential variants.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages