HeadsetControl

September 10, 2026 · View on GitHub

A cross-platform tool to control USB gaming headsets on Linux, macOS, and Windows. Manage sidetone, battery status, LED lights, equalizers, and more.

Features

  • Sidetone - Hear your own voice without latency (unlike software loopback)
  • Battery Status - Monitor charge level, voltage, and time remaining
  • LED Control - Toggle lights on/off
  • Equalizer - Presets and custom EQ curves (including parametric EQ)
  • Inactive Time - Auto power-off timer
  • Chat-Mix - Game/chat audio balance
  • Microphone - Volume, mute LED brightness, rotate-to-mute
  • Voice Prompts - Enable/disable audio cues
  • Bluetooth - Power-on behavior, call volume

Check the Supported Devices table below to confirm your headset is covered.

Installation

The quickest way to install is through your platform's package manager. Prefer a ready-made binary? Grab one from the Releases page — every release ships GPG-signed source, Linux (AppImage / .deb / .rpm / portable), macOS, and Windows (installer + portable) builds. The rolling continuous pre-release tracks the latest master.

Linux

Ubuntu / Debian — PPA

sudo add-apt-repository ppa:sapd/headsetcontrol
sudo apt update && sudo apt install headsetcontrol

Fedora — COPR

sudo dnf copr enable thesapd/headsetcontrol
sudo dnf install headsetcontrol

RHEL / CentOS Stream / Rocky / AlmaLinux 10 — COPR

hidapi ships in EPEL on the RHEL family, so enable that first:

sudo dnf install epel-release
sudo dnf copr enable thesapd/headsetcontrol
sudo dnf install headsetcontrol

Arch Linux — available in the AUR

yay -S headsetcontrol   # or the -git variant for the latest master

NixOS

# configuration.nix
environment.systemPackages = [ pkgs.headsetcontrol ];
services.udev.packages = [ pkgs.headsetcontrol ];  # for udev rules

Or run without installing: nix run nixpkgs#headsetcontrol

Gentoo — nitratesky overlay

eselect repository enable nitratesky
emerge -a app-misc/headsetcontrol

FreeBSD

pkg install headsetcontrol

macOS

Homebrew

brew install sapd/headsetcontrol/headsetcontrol

Append --HEAD for the latest development version. A portable binary is also available on the Releases page — it is a self-contained universal build (Apple Silicon and Intel) that needs no Homebrew and runs on macOS 13.3 or newer.

Windows

Download the installer or the portable .exe from the Releases page.

Build from source

Click to expand build instructions

Requirements

  • C++20 compiler (GCC 13+, Clang 16+, Apple Clang 15+, MSVC 2019 16.10+)
  • CMake 3.12+
  • HIDAPI library

Install dependencies

Debian / Ubuntu

apt-get install build-essential git cmake libhidapi-dev

Fedora

dnf install cmake hidapi-devel g++

Arch Linux

pacman -S git cmake hidapi

RHEL / CentOS / Rocky / AlmaLinux

dnf install epel-release
dnf groupinstall "Development Tools"
dnf install git cmake hidapi-devel

openSUSE

zypper in -t pattern devel_basis
zypper in cmake libhidapi-devel

FreeBSD

pkg install hidapi cmake

macOS

brew install hidapi cmake

Xcode (from the App Store) is required for the compilers.

Windows — for compilation using MSYS2/MinGW, see the Development Guide.

Build and install

git clone https://github.com/Sapd/HeadsetControl && cd HeadsetControl
mkdir build && cd build
cmake ..
make
sudo make install

On Linux, make install also installs udev rules for non-root access. Reload them with:

sudo udevadm control --reload-rules && sudo udevadm trigger

Supported Devices

DevicePlatformsidetonebatterynotification soundlightsinactive timechatmixvoice promptsrotate to muteequalizer presetequalizerparametric equalizermicrophone mute led brightnessmicrophone volumevolume limiterbluetooth when powered onbluetooth call volumemicrophone noise filtersidetone status
Logitech ASTRO A50 Gen 5Allxxxxxx
Logitech G522 LIGHTSPEEDAllxxxx
Logitech G533Allxxx
Logitech G535Allxxx
Logitech G633/G635/G733/G933/G935Allxxx
Logitech G431/G432/G433Allx
Logitech G930Allxx
Logitech G PRO X 2 LIGHTSPEEDAllxxxxxx
Logitech G PRO SeriesAllxxx
Logitech Zone Wired/Zone 750Allxxx
Corsair Headset DeviceAllxxxx
Corsair Wireless V2 Headset DeviceAllxxx
Corsair Virtuoso XT/SEAllx
SteelSeries Arctis (1/7X/7P) WirelessAllxxx
SteelSeries Arctis (7/Pro)Allxxxxx
SteelSeries Arctis 9Allxxxx
SteelSeries Arctis Pro WirelessAllxxx
SteelSeries Arctis Nova 3Allxxxxx
SteelSeries Arctis Nova (5/5X)Allxxxxxxxxxx
SteelSeries Arctis Nova 7Allxxxxxxxxxxxx*
SteelSeries Arctis Nova 7PAllxxxxxxxxx
SteelSeries Arctis 7+Allxxxxxx
SteelSeries Arctis Nova Pro WirelessAllxxxxxx
SteelSeries Arctis Nova 3P WirelessAllxxxxxxx
SteelSeries Arctis GameBudsAllx
HyperX Cloud Alpha WirelessAllxxxx
HyperX Cloud Flight WirelessAllx
HyperX Cloud II WirelessAllxx
HyperX Cloud II Wireless (Kingston)Allxxx
HyperX Cloud 3Allx
ROCCAT Elo 7.1 AirAllxx
ROCCAT Elo 7.1 USBAllx
Audeze MaxwellAllxxxxxxxx
Audeze Maxwell 2Allxxxxxxx
Lenovo Wireless VoIP HeadsetAllxxxxxxxx
Plantronics Voyager 8200 UC (BT600)L/Wxxxxx
Jabra Link 390 (paired headset)L/Mxxxxxxx
Jabra Evolve2 65 Flex (USB)L/Mxxxxxxx
Sony INZONE BudsAllx
Sony INZONE H5Allxxxx
MCHOSE X9 WirelessL/Wx
HeadsetControl Test deviceAllxxxxxxxxxxxxxxxxxx

Platform: All = Linux, macOS, Windows | L/M = Linux and macOS only | L/W = Linux and Windows only

* Only available on some product variants of that device. Sidetone status reading, for instance, is verified only for the SteelSeries Arctis Nova 7 Gen 2 (1038:227e).

Note: Some Corsair headsets may need additional configuration - see Adding a Corsair device. Some headsets (HS80, HS70 wired, RGB Elite, Virtuoso) expose sidetone via ALSA mixer instead.

Usage

# Show available options for your headset
headsetcontrol -h

# Show all options
headsetcontrol --help-all

# Get battery status
headsetcontrol -b

# Set sidetone level (0-128)
headsetcontrol -s 64

# Read the current sidetone level (when supported)
headsetcontrol -s

# Turn off LEDs
headsetcontrol -l 0

# Set auto-off timer (minutes, 0 = disabled)
headsetcontrol -i 30

# List device capabilities
headsetcontrol --capabilities
# or shorthand
headsetcontrol --caps

Output Formats

For scripting and integration with other tools:

# JSON output
headsetcontrol -o json

# YAML output
headsetcontrol -o yaml

# Environment variables
headsetcontrol -o env

See docs/LIBRARY_USAGE.md for building applications on top of HeadsetControl.

Developer Mode

For debugging and reverse-engineering headset protocols:

# List all HID devices
headsetcontrol --dev -- --list

# Send raw HID data
headsetcontrol --dev -- --device 0x1b1c:0x1b27 --send "0xC9, 0x64" --receive

Library API

HeadsetControl can be used as a library with C++ and C APIs. Build with shared library support:

cmake -DBUILD_SHARED_LIBRARY=ON ..
make

See docs/LIBRARY_USAGE.md for complete documentation.

Test Device

For development without hardware:

headsetcontrol --test-device -b

GUI Applications

Linux

macOS

Windows

Contributing

Want to add support for a new headset or improve the software? See the Development Guide.

Adding a new device requires capturing USB traffic between the headset and its Windows software using Wireshark or USBlyzer (a VM with USB passthrough works well).

License

Released under GPL v3.

HeadsetControl is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


If you find this useful, please star the repository!