Open-source tool to pair Razer Nari headsets with their USB dongles on Linux - no Razer software required!
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:
- Arch Linux
- CachyOS (see CachyOS notes below)
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!
- Install Python dependencies:
pip install -r requirements.txt
- Python 3.7+
- PyUSB library:
pip install pyusb
- USB charging cable for your headset
- Root/sudo access (for USB control)
-
Connect both devices:
- Plug dongle into USB port
- Connect headset via USB charging cable
- Turn ON the headset (press power button)
-
Run the pairing tool:
./pair.sh
Or directly:
sudo python3 razer_nari_pair.py
-
Follow on-screen instructions:
- Tool sends pairing commands to both devices
- Devices exchange pairing data
- Wait 5 seconds
-
Test wireless connection:
- Disconnect headset USB cable
- Turn headset OFF then ON
- Headset should connect wirelessly!
- 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)
After pairing your headset:
The Razer Nari has dual audio outputs (Game stereo + Chat mono). For best audio quality, you'll need proper audio profiles:
For PulseAudio:
- razer-nari-pulseaudio-profile - Enables both Game and Chat outputs
- Arch Linux: Install from AUR
- Other distros: Run
install.shscript or see installation instructions
For PipeWire:
- razer-nari-pipewire-profile - PipeWire-specific profile (archived but working)
- Arch Linux: Install from AUR
- Fedora: Binary package in releases
- Other distros: Clone and run install script
- Alternative: razer-nari-pulseaudio-profile also works with PipeWire (use
install-pipewire.sh)
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-gameNote: Additional tools (battery monitoring, audio testing) are under development and will be released in future versions.
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
- Ensure dongle is plugged in
- Check
lsusbshows device1532:051a(or 051c/051e)
- Headset MUST be connected via USB charging cable
- Turn ON the headset while USB-connected
- Check
lsusbshows device1532:051d(or 051b/051f)
- Run with
sudo:sudo python3 razer_nari_pair.py
- Means it's searching but not connected
- Try running the pairing tool again
- Make sure headset was ON when commands were sent
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!)
- On Linux, check PulseAudio/PipeWire:
pactl list sinks | grep Nari pactl set-default-sink alsa_output.usb-Razer_Razer_Nari_Ultimate-00.analog-game
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.
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
MIT License - See LICENSE file for details.
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!
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.