| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| latest-release-20260607 | < 4 hours ago | ||
| README.md | < 4 hours ago | 17.9 kB | |
| Totals: 2 Items | 17.9 kB | 0 |
Installer now supports Devuan 6 Excalibur
KNOWN ISSUES. MIDI DEVICES (DRUMS, KEYBOARDS etc) SHOULD BE POWERED ON AFTER BOOT. If your midi devices are powered they will override jack-bridge.
This program is distributed WITHOUT ANY WARRANTY use at your own risk. Read the licence. Jack-bridge code generated by chat bots.
jack-bridge - System wide ALSA + JACK Audio & Bluetooth with GUI No systemd, pulseaudio or pipewire

jack-bridge provides a complete, lightweight audio stack for Debian-based Linux systems using JACK and ALSA — without systemd, PulseAudio, or PipeWire. Perfect for users who want minimal dependencies and maximum control.
Features
Alsa Sound Connect GUI - Original mixer and eq GUI by mrgreenjeans AlsaTune GUI (SourceForge)
JACK Audio Connection Kit - Professional audio server (JACK Audio Connection Kit)
BlueALSA - Bluetooth audio ALSA backend by Arkadiusz Bokowy (BlueALSA)
BlueZ - Official Linux Bluetooth stack (BlueZ)
ALSA - Advanced Linux Sound Architecture (ALSA)
jack-graph - Custom built JACK and ALSA port connection manager with visual graph and Jack settings interface
Huge thanks to all these great devs.
UNTESTED VERSIONS in branches for Void runit if anyone feels adventurous
Steam Gaming Mode — play Steam games through JACK with no PulseAudio or Pipewire required
pulse-jack-bridge is a minimal PulseAudio protocol server built into jack-bridge. It creates a PulseAudio-compatible UNIX socket that Steam's pressure-vessel container finds automatically, routing game audio straight into JACK without installing PulseAudio or PipeWire.
- Enable from Alsa Sound Connect → Steam Gaming Mode → Enable Steam Mode
- Or run
pulse-jack-bridgein a terminal before launching Steam - Tested with Steam Runtime 3.0 & 4.0 (pressure-vessel) — survives Steam updates
- No wrapper scripts or custom Steam launch options required
Professional audio control interface Alsa Sound Connect (mxeq) with:
- Dynamic mixer controls - Automatically shows hardware controls for active device (Internal/USB)
- Built-in recorder - Record in mono/stereo at 44.1kHz or 48kHz, saves to ~/Music
- Bluetooth panel - Scan, pair, trust, connect devices with visual feedback
- Device switching - Change output between Internal/USB/HDMI/Bluetooth without restarting JACK
Audio Routing
- ALSA → JACK pipeline - All ALSA apps route through JACK, without systemd, PulseAudio, or PipeWire
- Multi-device support - Seamlessly switch between internal, USB, HDMI, and Bluetooth outputs
- Persistent bridge ports - USB/HDMI/Bluetooth ports spawned on-demand
- Capture-aware - Records from JACK's
system:capturesystem:midi_captureports and customusb_in:capturefor external audio interface. - jack-graph - Change Jack settings and visually route audio to and from multiple apps and sources using our custom built drag-to-connect graph interface.
Bluetooth Audio Integration
- BlueZ + BlueALSA - Full A2DP/HFP/HSP support without PulseAudio/PipeWire
- GUI controls - Scan, pair, trust, connect, and remove devices
- On-demand spawning - Bluetooth ports created only when needed (prevents boot errors)
- Device state tracking - Buttons auto-enable based on connection status
System Integration
- SysV init scripts - Clean startup/shutdown (no systemd required)
- Graceful shutdown - Daemons stop cleanly on reboot/shutdown
- Auto-detection - Finds audio devices, detects users automatically
- Non-root operation - GUI runs as regular user with polkit for Bluetooth
Requirements
Debian-based distributions Without systemd. Using sysVinit. Testing done on Devuan 5 and 6 XFCE, Mate, JWM & Openbox using sysVinit.
Recommended: Remove PulseAudio and PipeWire before installation to avoid conflicts. The installer disables PulseAudio autospawn system-wide. Steam games work via the built-in pulse-jack-bridge — see Steam Gaming below. Wine gaming works without any extra steps.
Installation
Quick Install - During installation when prompted, select YES to Enable realtime priorities
Download jack-bridge-20260607.tar.gz from releases on GitHub. Then:
tar -xf jack-bridge-20260607
cd jack-bridge-20260607
sudo sh contrib/install.sh
sudo reboot
Or clone the repository:
git clone https://github.com/rations/jack-bridge.git
cd jack-bridge
sudo sh contrib/install.sh
sudo reboot
What Gets Installed
The installer will:
- Install required packages (jackd, alsa-utils, bluez, etc.)
- Configure ALSA → JACK routing
- Install SysV init scripts for jackd-rt, bluealsad, bluetoothd, jack-bridge-ports
- Install Alsa Sound Connect GUI to
/usr/local/bin/mxeq - Install Steam audio bridge to
/usr/local/bin/pulse-jack-bridge - Create desktop launcher (Applications → Sound & Video → Alsa Sound Connect)
- Set up Bluetooth D-Bus policies and polkit rules
- Configure audio group permissions
After reboot, launch Alsa Sound Connect from your applications menu.
Usage
First Launch
- Open Alsa Sound Connect from Applications menu
- Mixer controls for internal audio card will be visible (expandable/collapsible) check under master volume slider that mute is note enabled.
- All sections (Recording, Bluetooth, Devices) are collapsed by default - expand as needed
Mixer Controls
- Volume sliders - Adjust playback/capture levels
- Mute/Enable checkboxes - Mute playback or enable capture
- Dynamic switching - Controls update when you change devices
- Collapsible - Click the "Mixer Controls" header to hide/show the mixer panel
Recording
- Expand "Recording" section
- Enter filename (auto-saves to ~/Music/)
- Choose Mono/Stereo and sample rate
- Click Record → Stop when finished
Device Switching
- Expand "Devices" section
- Select Internal, USB, HDMI, or Bluetooth. DO NOT CHANGE INTERFACE IN JACK SETTINGS USING JACK-GRAPH
- Mixer automatically updates to show that device's controls (Internal & USB only, HDMI & Bluetooth are controlled by the device
- Audio routes to selected output immediately
Bluetooth Setup
- Expand "BLUETOOTH" section
- Click Scan to discover devices
- Select device → Pair → Trust → Connect
- Click Set as Output to route audio through Bluetooth
- OR use Devices panel → Bluetooth radio button
- After connecting your device if you close Alsa Sound Connect upon opening Alsa Sound Connect again you might need to remove the device from the list and connect again.
Button Logic:
- Pair: Enabled if device not paired
- Trust: Enabled after pairing
- Connect: Enabled for paired devices
- Remove: Removes device from system
Steam Gaming
- JACK must be running (starts automatically at boot; Start/Stop button in jack-graph)
- Open Alsa Sound Connect → expand Steam Gaming Mode
- Click Enable Steam Mode — status shows "Bridge: active (JACK connected)"
- Launch Steam normally — game audio routes through your selected JACK output
- Click Disable Steam Mode (or close the terminal) to stop the bridge
From the terminal:
pulse-jack-bridge & # starts bridge in background
steam & # launch Steam
Why no wrapper script or launch options are needed: Steam's pressure-vessel container scans for a PulseAudio socket at startup. When pulse-jack-bridge is running it creates that socket, and pressure-vessel sets PULSE_SERVER inside the container automatically — the same mechanism used by real PulseAudio installs. Because this socket-discovery step is structural to pressure-vessel, the bridge survives Steam Runtime upgrades without any maintenance.
Output routing: pulse-jack-bridge appears as a JACK client called steam-pulse-bridge. jack-connection-manager auto-connects it to whichever output device is selected in the Devices panel (Internal, USB, HDMI, or Bluetooth) — no extra routing steps needed.
Bluetooth Details
Architecture
jack-bridge integrates BlueZ (Bluetooth stack) and BlueALSA (audio bridge) into the ALSA+JACK pipeline:
Bluetooth Device ←→ bluetoothd ←→ bluealsad ←→ ALSA bluealsa plugin ←→ alsa_out ←→ JACK. Connections visible using jack-graph.
Requirements
- User must be in
audiogroup (installer handles this) - User should be in
bluetoothgroup if it exists (optional, for better compatibility) - D-Bus and polkit must be running
On-Demand Port Spawning
USB/HDMI/Bluetooth ports are spawned on-demand because:
- BlueALSA PCM requires an active connection
- Spawning BlueAlsa at boot would fail if no device connected
- On-demand prevents error messages and saves resources
When you select Bluetooth output:
- Helper checks for connected device
- Spawns
alsa_out -j bluealsaclient - Creates
bluealsa:playback_1/2JACK ports - Routes audio through Bluetooth
Troubleshooting
Bluetooth not working If your system has bluetooth already it may conflict with the custom bluealsa setup. You need to remove/delete 20-bluealsa.conf in /usr/share/alsa/alsa.conf.d or /etc/alsa/conf.d Also remove bluez package and run sudo sh contrib/install.sh again to resolve the conflicts.
Cannot pair/connect:
- Verify user groups:
id -nG(should showaudio, optionallybluetooth) - Check polkit rule exists:
ls /etc/polkit-1/rules.d/90-jack-bridge-bluetooth.rules - Check D-Bus policy:
ls /usr/share/dbus-1/system.d/org.bluealsa.conf
No audio on Bluetooth: bash jack_lsp | grep bluealsa # Verify ports exist service bluealsad status # Ensure daemon running
Remove device from list and scan again. Pair, Trust, Connect and Set as Output
Building from Source
Quick Build (Uses Prebuilt Binaries)
The installer uses prebuilt BlueALSA binaries in contrib/bin/. To rebuild everything from source:
Building BlueALSA Components
See detailed guides:
- BUILD_PLUGINS_GUIDE.md - Build matching ALSA plugins
- bluealsa-INSTALL.md - BlueALSA build dependencies and options
- blue-alsaREADME.md - BlueALSA project documentation
Quick Steps
-
Install build dependencies: bash sudo apt install -y build-essential autoconf automake libtool pkg-config \ git libasound2-dev libbluetooth-dev libdbus-1-dev libglib2.0-dev libsbc-dev
-
Clone and build BlueALSA: bash cd /tmp git clone https://github.com/Arkq/bluez-alsa.git cd bluez-alsa autoreconf --install --force ./configure --enable-aplay --enable-rfcomm --enable-cli make -j$(nproc)
-
Copy binaries to jack-bridge: bash cp utils/.libs/bluealsad ~/jack-bridge/contrib/bin/ cp utils/.libs/bluealsactl ~/jack-bridge/contrib/bin/ cp utils/.libs/bluealsa-aplay ~/jack-bridge/contrib/bin/ cp utils/.libs/bluealsa-rfcomm ~/jack-bridge/contrib/bin/ cp src/.libs/libasound_module_pcm_bluealsa.so ~/jack-bridge/contrib/bin/ cp src/.libs/libasound_module_ctl_bluealsa.so ~/jack-bridge/contrib/bin/
Recommended options for sysvinit (non-systemd) systems:
- Do NOT enable systemd unit files: do not pass --enable-systemd
- To include the RFCOMM tool: pass --enable-rfcomm
- To set a non-root runtime user (useful when running without systemd): ../configure --prefix=/usr/local --with-bluealsaduser=bluealsa --enable-rfcomm
Example autoreconf --install mkdir build && cd build ../configure --prefix=/usr/local --with-bluealsaduser=bluealsa --enable-rfcomm make
Install (optional)
- Install to the system: sudo make install
- Or stage into a directory for packaging: sudo make DESTDIR=$(pwd)/BLUEALSA install
Per-binary minimal compile commands (useful for producing a single utility if you have the relevant source file)
-
These are minimal gcc commands (assume src/ contains the single utility source and pkg-config is available):
-
bluealsactl (requires GLib/GIO and D-Bus): gcc -Wall -Wextra -o contrib/bin/bluealsactl src/bluealsactl.c $(pkg-config --cflags --libs glib-2.0 gio-2.0 dbus-1)
-
bluealsa-aplay (requires GLib/GIO, D-Bus, and ALSA): gcc -Wall -Wextra -o contrib/bin/bluealsa-aplay src/bluealsa-aplay.c $(pkg-config --cflags --libs glib-2.0 gio-2.0 dbus-1 alsa)
-
bluealsa-rfcomm (requires GLib/GIO, D-Bus, and readline): gcc -Wall -Wextra -o contrib/bin/bluealsa-rfcomm src/bluealsa-rfcomm.c $(pkg-config --cflags --libs glib-2.0 gio-2.0 dbus-1) -lreadline
-
bluealsad (daemon)
- The daemon links multiple internal sources and should be built with the Autotools workflow (no supported single-file gcc command). Use the example configure+make sequence above.
Building GUI and bridge
cd ~/jack-bridge
make clean && make # builds mxeq + jack-connection-manager
make bridge # builds pulse-jack-bridge (Steam audio bridge)
The Makefile builds mxeq (GUI), jack-connection-manager (event-driven daemon), and pulse-jack-bridge (Steam audio bridge). Build dependency for the bridge: libjack-jackd2-dev (already required by jack-bridge).
Building jack-graph
cd jack-graph
make
Copy the resulting binary to contrib/bin/jack-graph before running the installer.
Uninstall
To completely remove jack-bridge:
bash cd ~/jack-bridge sudo sh contrib/uninstall.sh
The uninstaller removes:
- All init scripts and service registrations
- Installed binaries (mxeq, BlueALSA tools)
- Configuration files (/etc/asound.conf, /etc/jack-bridge/)
- Desktop launcher
- Polkit rules and D-Bus policies
- Helper scripts
Note: The uninstaller does NOT remove:
- Installed packages (jackd, alsa-utils, bluez, etc.)
- User-created recordings in ~/Music/
- User-specific configs in ~/.config/jack-bridge/
To also remove packages: bash sudo apt remove jackd2 bluez bluez-tools libasound2-plugins \ alsa-utils apulse swh-plugins sudo apt autoremove
Architecture
Service Stack (SysV Init)
Boot Sequence: ├─ dbus (system) ├─ bluetoothd (BlueZ Bluetooth daemon) ├─ bluealsad (BlueALSA audio bridge) ├─ jackd-rt (JACK audio server) └─ jack-bridge-ports (persistent USB/HDMI bridge ports)
Shutdown Sequence (reverse order with graceful termination)
Audio Pipeline
ALSA Application Steam Game (pressure-vessel)
↓ ↓
/etc/asound.conf PA socket (pulse-jack-bridge)
↓ ↓
ALSA JACK Plugin ───────────────►┘
↓
JACK Audio Server (jackd)
├─ system:playback_1/2 (internal)
├─ usb_out:playback_1/2 (USB)
├─ hdmi_out:playback_1/2 (HDMI)
└─ bluealsa:playback_1/2 (Bluetooth, on-demand)
↓
ALSA Device (hw:X)
↓
Audio Output
File Locations
Binaries:
/usr/local/bin/mxeq- Alsa Sound Connect GUI/usr/local/bin/pulse-jack-bridge- Steam audio bridge (PA protocol → JACK)/usr/local/bin/bluealsad- BlueALSA daemon/usr/local/bin/bluealsactl- BlueALSA control utility/usr/local/bin/bluealsa-aplay- BlueALSA player/usr/local/bin/bluealsa-rfcomm- Bluetooth RFCOMM terminal
Init Scripts:
/etc/init.d/jackd-rt- JACK audio server/etc/init.d/bluealsad- BlueALSA daemon/etc/init.d/bluetoothd- BlueZ Bluetooth daemon/etc/init.d/jack-bridge-ports- Bridge ports
Configuration:
/etc/asound.conf- ALSA routing and EQ configuration/etc/jack-bridge/devices.conf- Device preferences (Internal/USB/HDMI/Bluetooth)/usr/share/dbus-1/system.d/org.bluealsa.conf- BlueALSA D-Bus policy/etc/polkit-1/rules.d/90-jack-bridge-bluetooth.rules- Bluetooth permissions
Helpers:
/usr/local/lib/jack-bridge/jack-route-select- Device routing helper/usr/local/lib/jack-bridge/detect-alsa-device.sh- Device detection/usr/local/lib/jack-bridge/jack-autoconnect- Auto-connection helper
User Data:
~/Music/- Recorded audio files~/.config/jack-bridge/devices.conf- Per-user device preferences
Credits
jack-bridge by @rations
Built with:
- JACK Audio Connection Kit - Professional audio server
- ALSA - Linux sound architecture
- BlueZ - Official Linux Bluetooth stack
- BlueALSA - Bluetooth audio ALSA backend by Arkadiusz Bokowy
- AlsaTune GUI - Original mixer GUI by mrgreenjeans (SourceForge)
- jack-graph - JACK and ALSA port connection manager (GPL-2.0)
License
This project is open source. Individual components retain their original licenses:
- jack-bridge scripts and integration: See LICENSE
- BlueALSA: MIT License
- JACK: LGPL/GPL
- ALSA: LGPL
- jack-graph: GPL-2.0
Support
Issues: GitHub Issues
Documentation:
- BUILD_PLUGINS_GUIDE.md - Building ALSA plugins
- bluealsa-INSTALL.md - BlueALSA installation details
- blue-alsaREADME.md - BlueALSA project documentation
Note: This project intentionally avoids systemd, PulseAudio, and PipeWire. It's designed for systems where a lightweight, JACK-first audio stack is desired.