I own a SteelSeries Arctis Nova Pro Wireless.
Currently, the ChatMix functionality is limited to Chat and Game, while a third “Media” channel exists but isn’t integrated yet. Perhaps this will be officially supported in the future.
In the meantime, I’m using the following workaround:
pipewire-sound.py:
`
import subprocess
import time
def is_pipewire_running():
try:
result = subprocess.run(["pw-cli", "info"], capture_output=True, text=True)
return result.returncode == 0
except FileNotFoundError:
return False
def is_wireplumber_running():
try:
result = subprocess.run(["wpctl", "status"], capture_output=True, text=True)
return result.returncode == 0
except FileNotFoundError:
return False
def get_module_id(name):
"""Gibt die Module-ID zurück, die den gegebenen Sink-Namen enthält."""
try:
result = subprocess.run(
["pactl", "list", "short", "modules"], capture_output=True, text=True
)
for line in result.stdout.splitlines():
if name in line:
return line.split()[0]
except FileNotFoundError:
return None
return None
while not (is_pipewire_running() and is_wireplumber_running()):
time.sleep(1)
while True:
result = subprocess.run(["wpctl", "status"], capture_output=True, text=True)
if "SteelSeries Arctis Nova Pro Wireless Media" in result.stdout:
break
time.sleep(1)
module_id = get_module_id("Arctis_Media")
if module_id:
subprocess.run(["pactl", "unload-module", module_id])
subprocess.run([
"pactl", "load-module",
"module-null-sink",
"sink_name=Arctis_Media",
"sink_properties='device.description="SteelSeries\ Arctis\ Nova\ Pro\ Wireless\ Game"'"
])
subprocess.run([
"pactl", "load-module",
"module-null-sink",
"sink_name=Arctis_Music",
"sink_properties='device.description="SteelSeries\ Arctis\ Nova\ Pro\ Wireless\ Media"'"
])
subprocess.run([
"pw-link",
"Arctis_Music",
"alsa_output.usb-SteelSeries_Arctis_Nova_Pro_Wireless-00.analog-stereo"
])
`
This setup works for me. I wanted to share it in case it helps others.
I own a SteelSeries Arctis Nova Pro Wireless.
Currently, the ChatMix functionality is limited to Chat and Game, while a third “Media” channel exists but isn’t integrated yet. Perhaps this will be officially supported in the future.
In the meantime, I’m using the following workaround:
pipewire-sound.py:
`
import subprocess
import time
def is_pipewire_running():
try:
result = subprocess.run(["pw-cli", "info"], capture_output=True, text=True)
return result.returncode == 0
except FileNotFoundError:
return False
def is_wireplumber_running():
try:
result = subprocess.run(["wpctl", "status"], capture_output=True, text=True)
return result.returncode == 0
except FileNotFoundError:
return False
def get_module_id(name):
"""Gibt die Module-ID zurück, die den gegebenen Sink-Namen enthält."""
try:
result = subprocess.run(
["pactl", "list", "short", "modules"], capture_output=True, text=True
)
for line in result.stdout.splitlines():
if name in line:
return line.split()[0]
except FileNotFoundError:
return None
return None
while not (is_pipewire_running() and is_wireplumber_running()):
time.sleep(1)
while True:
result = subprocess.run(["wpctl", "status"], capture_output=True, text=True)
if "SteelSeries Arctis Nova Pro Wireless Media" in result.stdout:
break
time.sleep(1)
module_id = get_module_id("Arctis_Media")
if module_id:
subprocess.run(["pactl", "unload-module", module_id])
subprocess.run([
"pactl", "load-module",
"module-null-sink",
"sink_name=Arctis_Media",
"sink_properties='device.description="SteelSeries\ Arctis\ Nova\ Pro\ Wireless\ Game"'"
])
subprocess.run([
"pactl", "load-module",
"module-null-sink",
"sink_name=Arctis_Music",
"sink_properties='device.description="SteelSeries\ Arctis\ Nova\ Pro\ Wireless\ Media"'"
])
subprocess.run([
"pw-link",
"Arctis_Music",
"alsa_output.usb-SteelSeries_Arctis_Nova_Pro_Wireless-00.analog-stereo"
])
`
This setup works for me. I wanted to share it in case it helps others.