Skip to content

germanua/Linux-SoundBoard

Repository files navigation

Linux Soundboard

Native Linux soundboard with PipeWire virtual microphone, LUFS normalization, and global hotkeys for Wayland and X11.

Latest Release AUR License

Download · Install Guide · Feature Reference · Screenshots · Troubleshooting

Install with one command — no root required:

curl -fsSL https://raw.githubusercontent.com/germanua/Linux-SoundBoard/main/install.sh | bash

Sets up the runtime audio engine, desktop entry, and icons automatically.


What it does

Linux Soundboard routes sound effects into a runtime virtual microphone (Linux_Soundboard_Mic) that apps can use as their input device. By default it leaves EasyEffects or your real microphone as the system default, then routes movable recording apps to the soundboard mic while the engine is running.

Unlike browser-based or Electron wrappers, this is a native Rust + GTK4 + PipeWire application. The audio engine runs as a background systemd user service, creates the virtual microphone at runtime, and keeps audio active even when the UI is closed.


Screenshots

Main window — dark mode

Main window — light mode

Settings — dark mode Hotkey settings — dark mode

Full gallery → docs/SCREENSHOTS.md


Install

One-liner (recommended)

The command at the top of this page is all you need.

install.sh detects your distro and does the right thing:

Distro What happens
Arch / CachyOS / EndeavourOS Installs from the AUR via yay or paru
Debian / Ubuntu Downloads and installs the .deb package
Fedora Downloads and installs the .rpm package
Everything else Downloads the release tarball and runs the user-space installer

On Wayland, swhkd for global hotkeys is installed automatically.

After install, use install.sh for full repair/uninstall. The low-level install-user.sh tool remains available when you only want to manage per-user files:

install.sh repair               # repair via the smart wrapper
install.sh uninstall --yes      # remove user files and native package
install-user.sh repair          # clean old audio configs, restart engine
install-user.sh remove          # uninstall with interactive prompt
install-user.sh remove --yes    # uninstall without prompts
install-user.sh status          # show what is installed and service status

AppImage (portable, no install)

chmod +x linux-soundboard-x86_64.AppImage
./linux-soundboard-x86_64.AppImage

The AppImage creates the virtual mic only while its audio engine is running and does not install the engine service or desktop entry by itself. Run install-user.sh install linux-soundboard-x86_64.AppImage for a full install from the AppImage.


Quick Start

  1. Install using the method above. The engine creates Linux_Soundboard_Mic while it is running.
  2. Launch linux-soundboard from your application menu or terminal.
  3. In Discord, OBS, Zoom, or your game — select Linux_Soundboard_Mic as the microphone input when the app has an input selector.
  4. Keep Microphone Routing set to Default (recommended). The soundboard claims the system default mic so apps use it automatically. Switch to Manual only if you manage the default mic yourself via pavucontrol or similar.
  5. Add a sound folder or drag audio files into the window to build your library.
  6. On Wayland: if you see a hotkey warning, click Install in the banner to install swhkd for global hotkeys.

How it works

┌─────────────────────────────────────────────────────┐
│  GTK4 UI process                                    │
│  - Sound library, tabs, search                      │
│  - Transport bar (play / pause / stop / scrub)      │
│  - Settings, hotkey management                      │
│  - Communicates via Unix socket IPC                 │
└──────────────────────────┬──────────────────────────┘
                           │ IPC (Unix socket)
┌──────────────────────────▼──────────────────────────┐
│  Audio engine  (linux-soundboard-engine.service)    │
│  - PipeWire streams: local speakers + virtual mic   │
│  - Mic passthrough mixing                           │
│  - Volume, LUFS normalization, seeking, looping     │
│  - Stays running when the UI window is closed       │
└─────────────────────────────────────────────────────┘

The engine is a separate systemd user service. This design keeps the runtime virtual microphone and mic passthrough active regardless of whether the UI is open, and means opening/closing the UI window has no audio interruption. Closing the UI window sends a StopAll command to the engine first so active sounds stop cleanly.


Feature Highlights

Playback

  • LUFS normalization — per-sound gain so every clip plays at a consistent loudness regardless of how it was recorded
  • Three play modes — Default (play once), Loop (repeat indefinitely), Continue (auto-advance to the next sound)
  • Transport controls — play/pause, stop all, previous/next, scrub bar with seek
  • Multiple output levels — independent sliders for local speakers and virtual microphone

Audio routing

  • Runtime virtual micLinux_Soundboard_Mic is created by the active engine, uses low PipeWire priority, and is unmuted on registration
  • Mic passthrough — blends your real microphone into the virtual mic stream so your voice and sound effects go out on the same input device
  • Default mode — the soundboard claims the system default mic so recording apps use Linux_Soundboard_Mic automatically, with no per-app configuration needed
  • Manual mode — the soundboard never changes the default mic; use this if you manage the default source yourself via pavucontrol or a similar tool
  • EasyEffects coexistence — captures processed mic audio from EasyEffects while using the soundboard mic as the default input

Library

  • Tabs — organize sounds into named tabs; the General tab shows all sounds
  • Folder sync — point at a folder; files added or removed from disk are picked up on startup and manual refresh
  • Drag and drop — drag files or folders from a file manager directly into the window
  • Search — real-time search bar filters the visible list
  • Hotkeys — assign a global key combination to any sound; Wayland uses swhkd, X11 uses a native XInput2 backend

Global hotkeys

Session Backend Notes
Wayland swhkd In-app one-click install via PolicyKit
X11 Native XInput2 No extra software needed
XWayland Native XInput2 Works without swhkd

~ pass-through prefix is applied automatically so hotkey combinations do not get consumed by the system.


Documentation

Document Contents
Installation Guide Full install, repair, and uninstall instructions including install-user.sh reference
Feature Reference Every UI element, right-click menu, control hotkey, and setting
Screenshot Gallery Interface screenshots
Troubleshooting Guide PipeWire, renderer, hotkey, and packaging issues
Bug Reporting Guide How to file a useful bug report
Changelog Version history

Build From Source

# Arch
sudo pacman -S cargo rust pkgconf imagemagick gtk4 libadwaita libpulse alsa-lib opus libx11 libxi pipewire wireplumber

# Debian / Ubuntu
sudo apt install build-essential cargo rustc pkg-config imagemagick \
  libgtk-4-dev libadwaita-1-dev libpulse-dev libasound2-dev libopus-dev libx11-dev libxi-dev pipewire wireplumber

# Fedora
sudo dnf install cargo rust gcc gcc-c++ clang pkg-config ImageMagick \
  gtk4-devel libadwaita-devel pulseaudio-libs-devel alsa-lib-devel opus-devel libX11-devel libXi-devel pipewire-devel pipewire wireplumber
git clone https://github.com/germanua/Linux-SoundBoard.git
cd Linux-SoundBoard/src
cargo build --release
cd ..
./packaging/linux/install-user.sh install ./target/release/linux-soundboard

Full source-build notes are in docs/INSTALL.md.


Support


License

Linux Soundboard is licensed under the PolyForm Noncommercial 1.0.0 license. Commercial use requires a separate license.


Acknowledgments

Linux Soundboard is built on Rust, GTK4, Libadwaita, and the Linux audio ecosystem. Key components include Symphonia for audio decoding, PipeWire and WirePlumber for virtual mic routing, and swhkd for Wayland hotkey capture.

Full third-party license notices are in THIRDPARTY_LICENSES.md.