WaveController is a native Linux multi-track audio mixing engine, PipeWire session manager, and hardware controller. It is engineered to deliver the full Elgato Wave Link and Wave Device tier-1 experience natively on Linux, alongside universal support for third-party USB microphones and audio interfaces.
WaveController is actively developed, human-tested, and audited on production Linux audio workstations. Hardware support currently centers on the Elgato Wave XLR (MK1), with scaffolded support and milestones planned for the Wave XLR MK2, Wave:3, and Wave:1.
WaveController organizes hardware support into two distinct operational tiers:
libusb control transfers on Endpoint 0 (wIndex=0x3303). This bypasses standard Linux kernel ALSA driver locks, permitting real-time control of analog preamp gain, true 48V phantom power, dual-stage hardware Clipguard limiters, low-cut filters, capacitive touch mute events, and customizable RGB LED rings without interrupting audio capture or playback.| Device | USB VID:PID | Support Tier | Hardware Features | Status |
|---|---|---|---|---|
| Elgato Wave XLR (MK1) | 0fd9:007d | Tier 1 (Native USB) | 0–75 dB Preamp Gain, 48V Phantom Power, Clipguard Limiter, 80Hz/120Hz Low-Cut, Capacitive Touch Mute, Headphone Volume, Mic/PC Crossfade, RGB LED Ring | Fully Supported |
| Elgato Wave XLR MK2 | 0fd9:00b6 | Tier 1 (Native USB) | 0–75 dB Preamp Gain, 48V Phantom Power, Clipguard Limiter, 80Hz/120Hz Low-Cut, Capacitive Touch Mute, Headphone Volume, Mic/PC Crossfade, RGB LED Ring | Planned (Beta 1) |
| Elgato Wave:3 | 0fd9:0070 | Tier 1 (Native USB) | 0–40 dB Gain, Clipguard Limiter, 80Hz/120Hz Low-Cut, Capacitive Touch Mute, Headphone Volume, Mic/PC Crossfade, LED Bar Sync | Planned (Beta 1) |
| Elgato Wave:1 | 0fd9:007c | Tier 1 (Native USB) | Software Gain, Clipguard Limiter, 80Hz/120Hz Low-Cut, Hardware Dial Mute, Headphone Volume | Planned |
| Generic USB Microphones & Interfaces | Any USB Audio Device | Tier 2 (Universal) | Software Gain, Emulated Clipguard Limiter, Emulated Low-Cut Filter, PipeWire Submix Routing, System Mute Sync | Fully Supported |
~/.vst3 and ~/.lv2 and tracked in an installation manifest for clean removal.~/.config/WaveController/ipc.sock.get_fx_status, toggle_fx (master rack bypass), toggle_channel_effect, and set_channel_effect.media.class="Audio/Sink"), enabling discrete routing inside external software (OBS, Discord, games) without requiring a group channel.pw-mon stream monitor immediately routes newly launched applications or browser tabs with zero audible lag.application.process.binary metadata to eliminate collisions between Chromium and Electron applications.application.id=org.PulseAudio.pavucontrol and media.role=volume-control, preventing GNOME Shell from displaying a persistent recording microphone pill on the top panel.WaveController requires a modern Linux distribution running PipeWire with WirePlumber session management.
pw-link, pw-loopback, wpctlrsync, udevadmUbuntu / Debian / Pop!_OS / Linux Mint:
sudo apt update && sudo apt install -y python3-gi python3-gi-cairo gir1.2-gtk-4.0 gir1.2-adw-1 python3-pil pipewire wireplumber pipewire-bin rsync
Fedora / RHEL:
sudo dnf install -y python3-gobject gtk4 libadwaita python3-pillow pipewire wireplumber rsync
Arch Linux / Manjaro:
sudo pacman -S --needed python-gobject gtk4 libadwaita python-pillow pipewire wireplumber rsync
openSUSE (Tumbleweed / Leap):
sudo zypper install -y python3-gobject gtk4 typelib-1_0-Adw-1 python3-Pillow pipewire wireplumber rsync
Install WaveController, systemd service units, desktop launcher, icons, WirePlumber profiles, and udev hardware permissions:
curl -fsSL https://raw.githubusercontent.com/oparada1988/WaveController/main/install.sh | bash
Clone the repository and run the installation script:
git clone https://github.com/oparada1988/WaveController.git
cd WaveController
./install.sh
install.sh)The unified installer manages installation, systemd user services, and upgrades:
| Option | Description |
|---|---|
./install.sh (or -i, --install) | Checks dependencies, installs application files to ~/.local/share/wavecontroller, deploys WirePlumber studio profiles, installs the systemd unit, creates CLI launcher ~/.local/bin/wavecontroller, installs icons, and configures udev rules. |
./install.sh -u (--upgrade) | Pulls latest code from Git, updates application files, refreshes systemd and WirePlumber units, and syncs icons while preserving user configuration. |
./install.sh -r (--uninstall) | Cleanly stops and removes the systemd service, WirePlumber profile drop-in, desktop menu entry, icons, and application files. |
./install.sh --autostart | Enables and starts the user-space systemd unit (wavecontroller.service) to run the audio daemon on login. |
./install.sh --disable-autostart | Disables and stops the systemd background auto-start service. |
./install.sh -h (--help) | Displays script usage and path information. |
~/.local/share/wavecontroller/~/.local/bin/wavecontroller~/.config/systemd/user/wavecontroller.service~/.config/wireplumber/wireplumber.conf.d/51-wavecontroller-wave-xlr.conf~/.local/share/applications/com.oparada.WaveController.desktop~/.local/share/icons/hicolor/ (48x48 through 512x512, scalable, and symbolic)~/.config/WaveController/config.json~/.config/WaveController/ipc.sock/etc/udev/rules.d/99-elgato-wave.rules/usr/local/bin/wavecontroller-hw-initWaveController includes a user-level systemd service that manages background audio routing and mixer state without requiring root privileges:
# Start background daemon
systemctl --user start wavecontroller.service
# Check daemon status and journal logs
systemctl --user status wavecontroller.service
# Enable automatic start on user login
systemctl --user enable --now wavecontroller.service
# Disable background startup
systemctl --user disable --now wavecontroller.service
If you only need to install or update the hardware USB permissions manually:
curl -fsSL https://raw.githubusercontent.com/oparada1988/WaveController/main/data/99-elgato-wave.rules | sudo tee /etc/udev/rules.d/99-elgato-wave.rules > /dev/null && sudo udevadm control --reload-rules && sudo udevadm trigger && echo "Elgato Wave udev rules installed and activated."
Once installed, launch WaveController from your desktop application launcher or run:
wavecontroller
To run exclusively as a background routing daemon (without showing the main mixer window):
wavecontroller --daemon
WaveController is a native Linux multi-track audio mixing engine, PipeWire session manager, and hardware controller. It is engineered to deliver the full Elgato Wave Link and Wave Device tier-1 experience natively on Linux, alongside universal support for third-party USB microphones and audio interfaces.
WaveController is actively developed, human-tested, and audited on production Linux audio workstations. Hardware support currently centers on the Elgato Wave XLR (MK1), with scaffolded support and milestones planned for the Wave XLR MK2, Wave:3, and Wave:1.
WaveController organizes hardware support into two distinct operational tiers:
libusb control transfers on Endpoint 0 (wIndex=0x3303). This bypasses standard Linux kernel ALSA driver locks, permitting real-time control of analog preamp gain, true 48V phantom power, dual-stage hardware Clipguard limiters, low-cut filters, capacitive touch mute events, and customizable RGB LED rings without interrupting audio capture or playback.| Device | USB VID:PID | Support Tier | Hardware Features | Status |
|---|---|---|---|---|
| Elgato Wave XLR (MK1) | 0fd9:007d | Tier 1 (Native USB) | 0–75 dB Preamp Gain, 48V Phantom Power, Clipguard Limiter, 80Hz/120Hz Low-Cut, Capacitive Touch Mute, Headphone Volume, Mic/PC Crossfade, RGB LED Ring | Fully Supported |
| Elgato Wave XLR MK2 | 0fd9:00b6 | Tier 1 (Native USB) | 0–75 dB Preamp Gain, 48V Phantom Power, Clipguard Limiter, 80Hz/120Hz Low-Cut, Capacitive Touch Mute, Headphone Volume, Mic/PC Crossfade, RGB LED Ring | Planned (Beta 1) |
| Elgato Wave:3 | 0fd9:0070 | Tier 1 (Native USB) | 0–40 dB Gain, Clipguard Limiter, 80Hz/120Hz Low-Cut, Capacitive Touch Mute, Headphone Volume, Mic/PC Crossfade, LED Bar Sync | Planned (Beta 1) |
| Elgato Wave:1 | 0fd9:007c | Tier 1 (Native USB) | Software Gain, Clipguard Limiter, 80Hz/120Hz Low-Cut, Hardware Dial Mute, Headphone Volume | Planned |
| Generic USB Microphones & Interfaces | Any USB Audio Device | Tier 2 (Universal) | Software Gain, Emulated Clipguard Limiter, Emulated Low-Cut Filter, PipeWire Submix Routing, System Mute Sync | Fully Supported |
~/.vst3 and ~/.lv2 and tracked in an installation manifest for clean removal.~/.config/WaveController/ipc.sock.get_fx_status, toggle_fx (master rack bypass), toggle_channel_effect, and set_channel_effect.media.class="Audio/Sink"), enabling discrete routing inside external software (OBS, Discord, games) without requiring a group channel.pw-mon stream monitor immediately routes newly launched applications or browser tabs with zero audible lag.application.process.binary metadata to eliminate collisions between Chromium and Electron applications.application.id=org.PulseAudio.pavucontrol and media.role=volume-control, preventing GNOME Shell from displaying a persistent recording microphone pill on the top panel.WaveController requires a modern Linux distribution running PipeWire with WirePlumber session management.
pw-link, pw-loopback, wpctlrsync, udevadmUbuntu / Debian / Pop!_OS / Linux Mint:
sudo apt update && sudo apt install -y python3-gi python3-gi-cairo gir1.2-gtk-4.0 gir1.2-adw-1 python3-pil pipewire wireplumber pipewire-bin rsync
Fedora / RHEL:
sudo dnf install -y python3-gobject gtk4 libadwaita python3-pillow pipewire wireplumber rsync
Arch Linux / Manjaro:
sudo pacman -S --needed python-gobject gtk4 libadwaita python-pillow pipewire wireplumber rsync
openSUSE (Tumbleweed / Leap):
sudo zypper install -y python3-gobject gtk4 typelib-1_0-Adw-1 python3-Pillow pipewire wireplumber rsync
Install WaveController, systemd service units, desktop launcher, icons, WirePlumber profiles, and udev hardware permissions:
curl -fsSL https://raw.githubusercontent.com/oparada1988/WaveController/main/install.sh | bash
Clone the repository and run the installation script:
git clone https://github.com/oparada1988/WaveController.git
cd WaveController
./install.sh
install.sh)The unified installer manages installation, systemd user services, and upgrades:
| Option | Description |
|---|---|
./install.sh (or -i, --install) | Checks dependencies, installs application files to ~/.local/share/wavecontroller, deploys WirePlumber studio profiles, installs the systemd unit, creates CLI launcher ~/.local/bin/wavecontroller, installs icons, and configures udev rules. |
./install.sh -u (--upgrade) | Pulls latest code from Git, updates application files, refreshes systemd and WirePlumber units, and syncs icons while preserving user configuration. |
./install.sh -r (--uninstall) | Cleanly stops and removes the systemd service, WirePlumber profile drop-in, desktop menu entry, icons, and application files. |
./install.sh --autostart | Enables and starts the user-space systemd unit (wavecontroller.service) to run the audio daemon on login. |
./install.sh --disable-autostart | Disables and stops the systemd background auto-start service. |
./install.sh -h (--help) | Displays script usage and path information. |
~/.local/share/wavecontroller/~/.local/bin/wavecontroller~/.config/systemd/user/wavecontroller.service~/.config/wireplumber/wireplumber.conf.d/51-wavecontroller-wave-xlr.conf~/.local/share/applications/com.oparada.WaveController.desktop~/.local/share/icons/hicolor/ (48x48 through 512x512, scalable, and symbolic)~/.config/WaveController/config.json~/.config/WaveController/ipc.sock/etc/udev/rules.d/99-elgato-wave.rules/usr/local/bin/wavecontroller-hw-initWaveController includes a user-level systemd service that manages background audio routing and mixer state without requiring root privileges:
# Start background daemon
systemctl --user start wavecontroller.service
# Check daemon status and journal logs
systemctl --user status wavecontroller.service
# Enable automatic start on user login
systemctl --user enable --now wavecontroller.service
# Disable background startup
systemctl --user disable --now wavecontroller.service
If you only need to install or update the hardware USB permissions manually:
curl -fsSL https://raw.githubusercontent.com/oparada1988/WaveController/main/data/99-elgato-wave.rules | sudo tee /etc/udev/rules.d/99-elgato-wave.rules > /dev/null && sudo udevadm control --reload-rules && sudo udevadm trigger && echo "Elgato Wave udev rules installed and activated."
Once installed, launch WaveController from your desktop application launcher or run:
wavecontroller
To run exclusively as a background routing daemon (without showing the main mixer window):
wavecontroller --daemon