Open-source SteelSeries GG replacement for Linux. Control SteelSeries keyboards and headsets: RGB lighting, GameSense-compatible server, profiles, and (optional) audio/Sonar integration.
git clone https://github.com/Ven0m0/steelseriesgg-rs.git
cd steelseriesgg-rs
cargo build --release
./target/release/ssgg devicesTo run the daemon as a user service after installing the package:
systemctl --user daemon-reload
systemctl --user enable --now ssgg.service- RGB lighting: static, breathing, spectrum, wave, reactive, gradient, custom per-zone, off
- GameSense server: HTTP API compatible with SteelSeries GameSense
- Profiles: save/load device configurations
- Daemon mode: background service with animations + GameSense overlays
- Audio mixer (feature
audio): domain model, PulseAudio/PipeWire wiring planned - Sonar API (feature
sonar): control SteelSeries Sonar via HTTP (Sonar must be running)
- Apex Pro / Apex Pro TKL / Apex Pro TKL 2023
- Apex 3 / Apex 3 TKL
- Apex 5
- Apex 7 / Apex 7 TKL
- Arctis 1 / Arctis 1 Wireless
- Arctis 5 / Arctis 7 / Arctis 7 (2019 Edition)
- Arctis 9 / Arctis Pro / Arctis Pro Wireless
- Arctis Nova Pro / Arctis Nova Pro Wireless
- Arctis Nova 5 / Arctis Nova 3 / Arctis Nova 1
- Linux with udev
- Rust 1.94.1 (recommended/tested and pinned in
rust-toolchain.tomlfor local development) - Rust 1.88+ as the minimum supported version for environments that do not honor
rust-toolchain.toml(for example, distro packaging)
No extra HID development packages are required for the default source build.
sudo pacman -U ssgg-*.pkg.tar.zstWhat you get: /usr/bin/ssgg, systemd user unit, udev rules, docs.
After install:
sudo usermod -aG input $USER
sudo udevadm control --reload-rules
sudo udevadm trigger
systemctl --user daemon-reload
systemctl --user enable --now ssgg.service # optionalFor boot without login: sudo loginctl enable-linger $USER.
git clone https://github.com/Ven0m0/steelseriesgg-rs.git
cd steelseriesgg-rs
cargo build --releaseFor the optional audio feature on Debian/Ubuntu, install libpulse-dev first:
sudo apt install libpulse-devBinary: target/release/ssgg.
The project includes optional build optimizations in .cargo/config.toml. These are not required but can improve build times:
sccache (compilation cache):
cargo install sccache
# Then uncomment the rustc-wrapper line in .cargo/config.tomllld (faster linker):
# Debian/Ubuntu
sudo apt install lld
# Fedora
sudo dnf install lld
# Arch Linux
sudo pacman -S lld
# Then uncomment the lld line in .cargo/config.tomlThese optimizations are experimental and optional. The project builds successfully without them.
sudo cp assets/99-steelseries.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
sudo udevadm trigger
sudo usermod -aG input $USERLog out/in to apply the group change.
ssgg devicesSet a static color:
ssgg rgb --color red
ssgg rgb --color "#ff5500"Set brightness:
ssgg rgb --brightness 80Apply effects:
ssgg rgb --effect breathing --color cyan
ssgg rgb --effect spectrum
ssgg rgb --effect wave --direction left-to-rightAvailable effects: static, breathing, spectrum, wave, reactive, gradient, off
Save current configuration:
ssgg profile save my-profileLoad a profile:
ssgg profile load my-profileList profiles:
ssgg profile listView audio status:
ssgg audio statusSet volume:
ssgg audio volume --channel master --level 75Mute/unmute:
ssgg audio mute --channel game
ssgg audio unmute --channel gameAdjust chat mix:
ssgg audio chat-mix --balance 25The Sonar integration provides direct control over the SteelSeries Sonar audio device through its HTTP API. Sonar must be running for these commands to work.
View Sonar status:
ssgg sonar statusDiscover the dynamic Sonar API port:
ssgg sonar discoverList audio devices:
ssgg sonar devicesSet volume for a channel (classic mode):
ssgg sonar volume master 80
ssgg sonar volume game 100
ssgg sonar volume chat 75Get current mode:
ssgg sonar modeControl streamer mode volumes:
# Set monitoring volume
ssgg sonar streamer monitoring master 75
ssgg sonar streamer monitoring game 80
# Set streaming volume
ssgg sonar streamer streaming master 90List available configurations:
ssgg sonar configsStart the GameSense HTTP server:
ssgg serverThe server runs on port 27301 by default and is compatible with games that support SteelSeries GameSense.
Run as a background daemon with device control and GameSense server:
ssgg daemonThe daemon will run in the foreground and can be stopped gracefully with Ctrl+C or systemctl --user stop ssgg.service when running as a systemd service.
Run as systemd user service
systemctl --user daemon-reload
systemctl --user enable --now ssgg.service
journalctl --user -u ssgg.service -fConfiguration is stored in ~/.config/ssgg/config.toml:
[gamesense]
enabled = true
bind = "127.0.0.1"
port = 27301
[audio]
master_volume = 100
game_volume = 100
chat_volume = 100
[general]
default_profile = "default"
debug = false| Crate | Purpose |
|---|---|
| hidapi | HID device communication |
| tokio | Async runtime |
| axum | GameSense HTTP server |
| reqwest | Sonar HTTP client |
| serde / serde_json | Serialization |
| clap | CLI argument parsing |
| tracing | Logging |
| libpulse-binding | Audio integration (feature audio) |
audio- Enable audio mixer with PulseAudio support (optional)sonar- Enable SteelSeries Sonar API integration (optional, requiresaudio)
By default, no optional features are enabled. The Arch package ships with default features only.
Build with audio support:
cargo build --release --features audioBuild with all features:
cargo build --release --all-featuresThis project is licensed under the MIT License - see the LICENSE file for details.
Issues and PRs are welcome. Please run cargo fmt && cargo clippy --all-targets --locked before submitting.