A replacement for SteelSeries GG software, to manage your Arctis device on Linux!
Find a file
Giacomo "Mr. Wolf" Furlan 559f6b0f25
Merge pull request #23 from Sonofapo/fix-arctis-service-unit
Systemd: correct directives and .device target
2025-07-04 09:01:08 +02:00
.vscode Installer file now installs bundled binaries instead of python files, to address pip pre-built binary dependencies pointing to non-existing paths on the local system. Fixes #6 2025-02-10 21:32:18 +01:00
arctis_manager Docker-base RPM build and test in clean environment 2025-02-16 23:23:47 +01:00
docs Windows USB analyzer tutorial page 2025-02-04 22:54:49 +01:00
package_managers build.py: add support for Fedora 42 2025-04-19 20:02:17 +02:00
systemd Systemd: correct directives and .device target 2025-06-22 09:17:00 +02:00
tests Fix ubuntu deb naming convention typo 2025-02-18 03:02:55 +01:00
udev Arctis Manager rename + new install script 2025-01-06 20:11:35 +01:00
usb_helper Fixed Windows USB helper for devices not having init packets 2025-03-02 23:20:37 +01:00
.gitignore Build toolchain refactor; ubuntu build WIP 2025-02-17 17:49:19 +01:00
arctis-manager-launcher.spec Installer file now installs bundled binaries instead of python files, to address pip pre-built binary dependencies pointing to non-existing paths on the local system. Fixes #6 2025-02-10 21:32:18 +01:00
arctis-manager.spec Support for multi-platform build 2025-02-18 02:04:46 +01:00
arctis_manager.py Docker-base RPM build and test in clean environment 2025-02-16 23:23:47 +01:00
arctis_manager_launcher.py Desktop app (for systemtray-less desktop environments); v1.6.0. Resolves #2 2025-01-12 20:16:12 +01:00
ArctisManager.desktop Installer file now installs bundled binaries instead of python files, to address pip pre-built binary dependencies pointing to non-existing paths on the local system. Fixes #6 2025-02-10 21:32:18 +01:00
CHANGELOG.md Changelog update 2025-04-19 19:59:10 +02:00
install.sh Installer file now installs bundled binaries instead of python files, to address pip pre-built binary dependencies pointing to non-existing paths on the local system. Fixes #6 2025-02-10 21:32:18 +01:00
LICENSE.md Add .system time buffer, add license, amend logger 2022-07-03 19:51:35 +01:00
Pipfile Installer file now installs bundled binaries instead of python files, to address pip pre-built binary dependencies pointing to non-existing paths on the local system. Fixes #6 2025-02-10 21:32:18 +01:00
Pipfile.lock Installer file now installs bundled binaries instead of python files, to address pip pre-built binary dependencies pointing to non-existing paths on the local system. Fixes #6 2025-02-10 21:32:18 +01:00
pyproject.toml Settings window WIP 2025-01-02 18:50:43 +01:00
README.md Windows USB analyzer tutorial page 2025-02-04 22:54:49 +01:00
requirements.txt Desktop app (for systemtray-less desktop environments); v1.6.0. Resolves #2 2025-01-12 20:16:12 +01:00
uninstall_old_arctis_chatmix.sh New install script: integrate old software uninstall process 2025-01-06 20:22:06 +01:00
VERSION.ini Push version 1.6.3 release 1 2025-04-19 19:57:13 +02:00

Linux-Arctis-Manager

Important Licensing Notice

Linux-Arctis-Manager is under the GPLv3 license. While the GPL license does permit commercial use, it is strongly discouraged to reuse the work herein for any for-profit purpose as it relates to the usage of a third party proprietary hardware device.

Overview

The SteelSeries Arctis headsets series include a variety of features, like two mixable channels for VoIP and gaming (known as "ChatMix"), a hardware modulation knob, side-tone management, gain, etc. This is done partly hardware and partly software side, though the SteelSeries Engine (now included in the GG software) is required to setup and manage them all. If no software is used, only the very basic features are enabled (stereo audio out, mic in, hardware mute, possibly ANC).

This project aims to fill the gap, allowing the user to easily manage his/her own device on Linux distributions. On the plus side, this software is way lighter than SteelSeries's original :D

Install

Requirements

The software is based on the following prerequisites:

  • PulseAudio (very common in modern Linux distributions), including the pactl command line (perhaps not installed by default, possibly the pulseaudio-utils system package)
  • Python 3.9+ with pip installed
  • Python modules (they will be installed automatically in the install directory via pip)
    • dbus-next - DBus library
    • PyUSB - USB communication library
    • qasync - seamless async integration with Qt applications
    • PyQt6 (suggested: globally due to its size) - Qt6 bindings for UI parts

Execution

In order to install the application, simply run ./install.sh (as user, not as root). In order to uninstall, prepend UNINSTALL= , i.e. UNINSTALL= ./install.sh.

An optional PREFIX variable can be defined to install the software in a custom location (default: /usr/local)

Installed files

The following parts will be installed:

  • /usr/lib/udev/rules.d/: udev rules to set the ownership of the /dev device and to create a /dev/steelseries/arctis symlink to trigger the service (see below). The ownership part is not perfect for multi-users setups, but I'm working on it.
  • /usr/lib/systemd/user/: user space's systemd service, which starts up at device plugin (or user's login) and shuts down at device plug-out (or user's log off).
  • /usr/local/lib/arctis-manager (or $PREFIX/lib/arctis-manager): the Python application, including the service which communicates to the device, and a system tray icon which will display all the available information. If any setting is configurable software-side, the system tray app will show the relative action to open the settings menu.
  • /usr/local/bin/arctis-manager (or $PREFIX/bin/arctis-manager): a bash script to start the service.
  • /usr/share/icons/hicolor/scalable/apps/arctis_manager.svg: the desktop application's icon.
  • /usr/local/share/applications/ArctisManager.desktop (or $PREFIX/share/applications/ArctisManager.desktop): the desktop application's definition file.

Screenshots

System tray application

System tray application

Settings window (in the example: Arctis Nova Pro Wireless)

Settings window

Note: your device should automatically be configured after installation. If not, please unplug and plug the device again.

Supported devices

  • Arctis 7+ (original development by birdls)
    • Variants: PS5, XBOX, Destiny (only name and device id are changed)
  • Arctis Nova Pro Wireless (developed by Giacomo Furlan). Note: the PulseAudio's channel's volume will stay at 100% even turning the knob, because it is managed by the GameDAC gen2 directly, so applying an audio reduction would apply it twice.
    • Variants: X (name and device id changed)

How to add the support to a new device

The software has been rewritten from scratch from the original project to have an underlaying framework, in order to allow developers easily add new devices to the support list.

In order to support a new device you need to:

  • add a new set of rules in system-config/91-steelseries-arctis.rules -> if having troubles with udev selector with composite USB devices, you might start from udevadm info --attribute-walk --name=/dev/input/by-id/usb-SteelSeries_Arctis_[your specific device here]. Take a look at the Nova Pro Wireless's rules to get an idea.
  • Add a new DeviceManager and its relative DeviceStatus in arctis_chatmix/devices/. Read the Arctis Nova Pro Wireless definition to get the idea.
  • Update the lang/ json files, if you introduced new DeviceStatus attributes and/or values. By default untranslatable items will go untranslated.

The new device will automatically be registered for you in the application.

If your work does the job, consider forking the repository and open a pull request.

Important notes:

  • when working on the repository and running the application for debugging, remember to stop the service via systemctl --user disable --now arctis-pcm.service. Once finished, you can enable it again via sysetmctl --user enable arctis-pcm.service.
  • if working with vscode, a launch setup is ready to use (arctis_chatmix debug) which will run the software with debug logging
  • remember to refresh your installation once finished (see installation section)

Need help on reverse engineering?

First try the (Windows) USB analyzer guide!

Then try looking at the wireshark guide!

Do I need to override the DeviceManager.init_device for my new device?

It really depends. In my experience yes, if you have a GameDAC. If your device uses a GameDAC v2, it is possible that you can simply copy the Arctis Nova Pro Wireless method, which essentially enables the (otherwise missing) mixer functionality. The packets sent by that manager have been recorded using WireShark listening on the USB interface and I'm unsure whether all of them are required or not. If one or more features are missing to your device, you will probably need to tinker with Wireshark (or similar) listening on the USB interfaces and try to figure it out.

Acknowledgements

Thanks to:

Need support?

Don't hesitate to open an issue.

Please include as many details as possible, for example the otuput of journalctl --user -b -f -u arctis-pcm.

You can also run the software in debug mode, for increased output:

$ systemctl --user stop arctis-pcm.service
$ cd ~/.local/bin
$ python3 ./arctis_chatmix.py -v
# Debug level log will show

# To start again the service in normal mode
[CTRL]+[C]
$ systemctl --user start arctis-pcm.service