Skip to content

About

An open-source replacement for SteelSeries GG, to manage your Arctis headset on Linux!

Topics

Resources

Stars

210 stars

Watchers

8 watching

Forks

Repository files navigation

Linux Arctis Manager

An open-source replacement for SteelSeries GG, to manage your Arctis headset on Linux!

GitHub Release Release build Python

Discord Fluxer

Repositories 💿

Stable

Copr build status AUR Version

Testing

Copr build status (testing)

Want to support? 🙏

Paypal donation

🎚️ Key Points

  • Control ChatMix - enable and control balance between Media and Chat audio streams
  • Configure any device via a simple configuration file
  • Enable per-device features by adding them in the relative configuration file
  • D-Bus based communication, to support different clients (alternative clients, Plasma extensions, etc)

🎧 Supported Devices

Cross-checked against SteelSeries' own device specs, not just the previous v2 list — see docs/device_compatibility.md for the auto-generated, per-capability, per-PID breakdown of everything below marked ✅.

Device Supported Notes
Arctis 1 Wireless (+ Xbox, + Cyberpunk 2077 Edition) ✅ Hardware EQ is adjustable, just not firmware-computed — the daemon calculates the filter curve itself and streams it to the AV6X02 DSP chip.
Arctis 5 (+ 2018, Dota 2 Edition, PUBG 2018 Edition) ✅ No connection-status or battery readout — the raw protocol reads those over a two-step exchange this project's HID layer doesn't support yet. Mic volume is also not exposed: the vendor spec's own description of that setting is ambiguous.
Arctis 7 (+ 2019 refresh) ✅ Hardware EQ is adjustable on both revisions, just not firmware-computed — same AV6X02 chip/mechanism as Arctis 1 Wireless.
Arctis 7+ / Destiny 2 Edition ✅ —
Arctis 7X+ (Xbox) ✅ —
Arctis 7P+ (PlayStation) ✅ —
Arctis 9 ✅ Hardware EQ isn't adjustable — its register format is entirely undocumented, unlike Arctis 7/1 Wireless/5. Software EQ via PipeWire is the substitute.
Arctis 9X ❌ Uses a transport (AVNERA/LIGHTXIO) this project's engine doesn't implement yet.
Arctis Pro (wired, standalone) ✅ Shares Arctis 5's entire control plane — same chip, same protocol, just a different PID.
Arctis Pro GameDAC ✅ RGB lighting, OLED bitmap content, and DTS Headphone:X v2 spatial audio aren't exposed — out of scope, same as every other device. EQ gain units are unconfirmed (no dB-per-unit formula anywhere in the vendor spec). Mic volume and the per-band live EQ push only refresh on reconnect — the DSL's live-update path only reads a single byte per field.
Arctis Pro Wireless ✅ Live updates from the base station's own OLED menu/dial aren't reflected until reconnect — the raw protocol's push-event report isn't documented well enough to wire up safely.
Arctis Nova 3 (wired) ✅ —
Arctis Nova 3 / 3X Wireless ✅ —
Arctis Nova 4 / 4X ✅ —
Arctis Nova 5 / 5X / 5X White ✅ —
Arctis Nova 7 / 7X / WoW / Diablo IV (original firmware) ✅ —
Arctis Nova 7 / 7X / 7P Gen 2 (native hardware or Gen 2 upgrade firmware) ✅ —
Arctis Nova 7P (original firmware) ✅ —
Arctis Nova Elite (+ SNG SKU) ✅ —
Arctis Nova Pro (wired, GameDAC Gen 2, incl. v2 / Xbox) ✅ —
Arctis Nova Pro Omni ✅ —
Arctis Nova Pro Wireless (+ X, + X White) ✅ —
Arctis GameBuds (+ X) ✅ Button remapping isn't exposed — no per-gesture-action UI/capability exists in this project yet. The 2.4G/BT parametric EQ has two independent 10-band profiles, both adjustable.
Arctis GameBuds Case (+ X) ✅ Battery/charging status and lid-open/closed only — the case has no audio settings of its own.

Note: software EQ (10/15-band, applied via PipeWire regardless of what the headset itself supports) is always available as a substitute for hardware EQ. "No hardware EQ" above only means that headset's own onboard curve isn't adjustable — not that EQ itself is unavailable.

Legend

Symbol Description
✅ Supported by the v3 (Rust) daemon today
❌ Not ported yet

⌨️ Components

  • lam-daemon: the background service (Rust) that communicates with your headset, managed by systemd
  • lam-hidraw-helper: a minimal privileged sidecar that opens /dev/hidraw* on the daemon's behalf — the only process that needs elevated capability
  • lam-gui: the graphical interface (Python/Qt6) to configure your headset and view its status

📦 Install & Setup

Choose the installation method that fits your setup:


User-level installer (SteamOS and any distro)

Installs everything under ~/.local (and ~/.config for the systemd user units), from signed prebuilt binaries. It also works on SteamOS, whose read-only root filesystem rules out normal packages.

curl --proto '=https' --tlsv1.2 -fsSL https://github.com/elegos/Linux-Arctis-Manager/releases/latest/download/install.sh | sh
  • Installing again upgrades. --pre-release includes pre-releases, --version X.Y.Z pins one, --dry-run only verifies and checks prerequisites, --diagnose prints a report for bug reports.
  • ... | sh -s -- uninstall removes everything it installed (--purge also deletes your settings).
  • The release checksums are signed (SSH signature) and verified before anything is run. Every security-relevant step is announced and waits for you to press Enter (or Ctrl+C to abort); the only step needing root is giving the HID helper its capability (setcap), via pkexec/sudo.
  • Needs systemd (user session), libpulse, a PipeWire/PulseAudio server and glibc >= the version shown by --dry-run; if something is missing the installer stops before changing anything and tells you what.

Verifying a release by hand

Releases are signed with this SSH key (lam-release), fingerprint:

SHA256:ACwAZQm1Pfgrg2gv3CpS7jShGtASZKgmlaCYGsFoDA0

install.sh checks the signature of SHA256SUMS and then the tarball's checksum before extracting or running anything. To do the same yourself:

V=https://github.com/elegos/Linux-Arctis-Manager/releases/download/<tag>
curl -fsSLO $V/SHA256SUMS -O $V/SHA256SUMS.sig -O $V/lam-<version>-x86_64-generic.tar.gz
echo 'lam-release namespaces="lam-release" ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGEJRaTQKrVoLHoNLxtYs4s5TXt6KILaEEElIi83LYfH' > allowed_signers
ssh-keygen -Y verify -f allowed_signers -I lam-release -n lam-release -s SHA256SUMS.sig < SHA256SUMS
sha256sum -c --ignore-missing SHA256SUMS

The ssh-keygen command must print Good "lam-release" signature with the fingerprint above. The installer itself is only protected by TLS (it is the root of this chain), so you can download install.sh from the release page and read it before running it.


Arch Linux (AUR)

Arch Linux users can install the community-maintained package from the Arch User Repository (AUR):

Install with your preferred AUR helper:

yay -S linux-arctis-manager

# using paru: paru -S linux-arctis-manager

The package's post-install hook applies the required capability to lam-hidraw-helper and prints the two commands to enable the services:

systemctl --user daemon-reload
systemctl --user enable --now lam-hidraw-helper.service lam-daemon.service

Tip

To launch the system tray app automatically on login:

ln -sf /usr/share/applications/ArctisManagerSystray.desktop ~/.config/autostart/

For packaging-specific issues, report directly to the AUR maintainers: @tonitch and @Aiyahhh.


Fedora (COPR)

Prebuilt RPM packages are published on COPR, split into two channels:

  • elegos/linux-arctis-manager - stable, tagged releases only
  • elegos/linux-arctis-manager-testing - every alpha/beta/rc build, ahead of stable

Enable the channel you want and install the main package:

sudo dnf copr enable elegos/linux-arctis-manager
# or, for the testing channel:
# sudo dnf copr enable elegos/linux-arctis-manager-testing

sudo dnf install linux-arctis-manager

Optionally add whichever UI shell(s) you want, on top of the main package:

sudo dnf install linux-arctis-manager-plasma-widget    # KDE Plasma 6 widget
sudo dnf install linux-arctis-manager-gnome-extension  # GNOME Shell 45+ extension

The package's post-install scriptlet applies the required capability to lam-hidraw-helper - just enable the services:

systemctl --user daemon-reload
systemctl --user enable --now lam-hidraw-helper.service lam-daemon.service

Tip

To launch the system tray app automatically on login:

ln -sf /usr/share/applications/ArctisManagerSystray.desktop ~/.config/autostart/

On KDE Plasma 6, linux-arctis-manager-plasma-widget adds a native widget to a panel like any other widget ("Add Widgets..." → "Arctis Manager"); right-click it for its Configure dialog. On GNOME Shell 45+, linux-arctis-manager-gnome-extension adds an equivalent extension - enable it with the Extensions app (or gnome-extensions enable arctis-manager@giacomofurlan.name); its Preferences page picks which status fields and quick settings it shows.


Build from source

Fedora/Bazzite users: prefer the COPR packages above. Building straight from source with the provided Makefile is the supported path for every other distro (Debian, Ubuntu, ...).

Prerequisites

  • cargo/rustc (stable toolchain)
  • uv
  • Python 3.10+
  • libcap (for setcap) — usually already installed
  • Kernel headers for hidraw/udev: libudev-dev (Debian/Ubuntu), systemd-devel (Fedora), udev (Arch, already present)

Install

git clone https://github.com/elegos/Linux-Arctis-Manager.git
cd Linux-Arctis-Manager

make build            # cargo build --release + uv sync
sudo make install     # installs binaries, systemd units, desktop entries; applies setcap
make enable           # enable + start lam-hidraw-helper and lam-daemon (no sudo)

make install accepts the usual PREFIX/DESTDIR overrides — see make help for the full variable list, or the packaging recipes in packaging/arch/PKGBUILD and packaging/fedora/linux-arctis-manager.spec for reference.

Warning

PREFIX defaults to /usr/local, not /usr — the AUR/COPR packages' prefix. The two installs coexist on disk without file conflicts, but you'll end up with two separate sets of binaries, systemd units and desktop entries. Uninstall one before installing the other (see Uninstall / Cleanup) rather than running both side by side.

Tip

To launch the system tray app automatically on login:

ln -sf /usr/share/applications/ArctisManagerSystray.desktop ~/.config/autostart/
# or, if installed with PREFIX=/usr/local:
ln -sf /usr/local/share/applications/ArctisManagerSystray.desktop ~/.config/autostart/

Tip

On KDE Plasma 6, make install also installs a native Plasma widget (packaging/plasma6/) that talks directly to the daemon over D-Bus — no separate tray process needed. Add it to a panel like any other widget ("Add Widgets..." → "Arctis Manager"); right-click it for its Configure dialog to pick which status fields and quick settings it shows.

On GNOME Shell 45+, make install also installs an equivalent GNOME Shell extension (packaging/gnome-shell/). Enable it with the Extensions app (or gnome-extensions enable arctis-manager@giacomofurlan.name); its Preferences page picks which status fields and quick settings it shows.

🧹 Uninstall / Cleanup

Choose the method that matches your installation method:

Arch Linux (AUR)

Use the system package manager — the pre-removal hook stops and disables the services for you:

sudo pacman -Rns linux-arctis-manager

Fedora (COPR)

Removing the main package also pulls in whichever UI-shell subpackages you installed, since they Requires: it:

sudo dnf remove linux-arctis-manager

Build from source

From the cloned repository:

make disable          # stop + disable the services (no sudo)
sudo make uninstall   # remove binaries, systemd units, desktop entries

Then remove your local settings if you don't intend to reinstall:

rm -rf ~/.config/arctis_manager

Note

If you're coming from a v2 install, also remove the old udev rule — v3 doesn't need one: sudo rm -f /etc/udev/rules.d/91-steelseries-arctis.rules /usr/lib/udev/rules.d/91-steelseries-arctis.rules

🛠️ Development

Basic Commands

  • Run the daemon: cargo run --release --manifest-path daemon/Cargo.toml --bin lam-daemon
  • Run the GUI against it: uv run lam-gui --no-enforce-systemd (skips the systemd-managed-daemon check, since you're running one by hand)
  • Run the daemon's tests: cargo test --manifest-path daemon/Cargo.toml

Documentation

⚠️ Troubleshooting

  • App or headset becomes unresponsive: systemctl --user restart lam-hidraw-helper.service lam-daemon.service
  • Newly supported device does not appear after an update: systemctl --user daemon-reload && systemctl --user restart lam-daemon.service, or call the ReloadConfigs D-Bus method to pick up new/changed device YAML files without a restart.
  • App fails to start with a Qt xcb platform error: install libxcb-cursor0 (Debian/Ubuntu) or xcb-util-cursor (Arch/Fedora). Required on non-Qt desktop environments like Cinnamon.

💬 Community & Support

Linux Arctis Manager is a community-driven project - the more hardware data and feedback we get, the better support becomes for everyone.

Join us on:

Missing a Device?

If your headset isn't listed in the support table, we likely just need your hardware IDs to get started. Run lam-cli tools arctis-devices and share the output on Discord or Fluxer.


Linux Arctis Manager is licensed under the GPL-3.0 and is not affiliated with or endorsed by SteelSeries ApS. SteelSeries, Arctis, ChatMix, and SteelSeries GG are trademarks of their respective owners.

About

An open-source replacement for SteelSeries GG, to manage your Arctis headset on Linux!

Topics

Resources

Stars

210 stars

Watchers

8 watching

Forks

Releases

Packages

Contributors

Languages