
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.
mxeq) with:system:capture system:midi_capture ports and custom usb_in:capture for external audio interface.Debian-based distributions Without systemd. Using sysVinit. Testing done on Devuan 5 XFCE and Mate Desktop Environments.
Recommended: Remove PulseAudio and PipeWire before installation to avoid conflicts. Removing PulseAudio is not required as the installer Disables PulseAudio autospawn system-wide and if you need pulseaudio for steam games you can start and stop pulseaudio as needed in a terminal with pulseaudio --start and pulseaudio --kill. As it is now steams version of proton does not support jack and steams runtime would have to be rebuilt as a custom binary and everytime there is an upgrade it would stop working. Until I can figure something out unfortunatly jack-bridge does not work with steam. If you use wine for gaming jack-bridge works fine.
Download jack-bridge-20260120.tar.gz from releases on GitHub. Then:
tar -xf jack-bridge-20260120.tar.gz
cd jack-bridge-20260120
sudo sh contrib/install.sh
sudo reboot
Or clone the repository:
# Clone repository
git clone https://github.com/rations/jack-bridge.git
cd jack-bridge
sudo apt update
sudo sh contrib/install.sh
sudo reboot
The installer will:
1. Install required packages (jackd, alsa-utils, bluez, etc.)
2. Configure ALSA → JACK routing
3. Install SysV init scripts for jackd-rt, bluealsad, bluetoothd, jack-bridge-ports
4. Install Alsa Sound Connect GUI to /usr/local/bin/mxeq
5. Create desktop launcher (Applications → Sound & Video → Alsa Sound Connect)
6. Set up Bluetooth D-Bus policies and polkit rules
7. Configure audio group permissions
After reboot, launch Alsa Sound Connect from your applications menu.
Button Logic:
- Pair: Enabled if device not paired
- Trust: Enabled after pairing
- Connect: Enabled for paired devices
- Remove: Removes device from system
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 graph in qjackctl.
audio group (installer handles this)bluetooth group if it exists (optional, for better compatibility)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:
1. Helper checks for connected device
2. Spawns alsa_out -j bluealsa client
3. Creates bluealsa:playback_1/2 JACK ports
4. Routes audio through Bluetooth
Bluetooth not working
If your system has bluetooth already it will 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.
Discovery finds nothing:
bash
rfkill list # Check if Bluetooth blocked
sudo rfkill unblock bluetooth # Unblock if needed
service bluetoothd status # Ensure daemon running
Cannot pair/connect:
- Verify user groups: id -nG (should show audio, optionally bluetooth)
- 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
Re-select Bluetooth in Devices panel or run:
bash
/usr/local/lib/jack-bridge/jack-route-select bluetooth
The installer uses prebuilt BlueALSA binaries in contrib/bin/. To rebuild everything from source:
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
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)
bash
cd ~/jack-bridge
make clean && make
The Makefile builds mxeq (GUI) and bt_agent (Bluetooth agent helper) jack-bridge-dbus (Works with customq jackctl)
You will need to change the name of qjackctl-1.0.4-jack-bridge-mod back to qjackctl-1.0.4 to match build-qjackctl.sh
chmod -x build-qjackctl.sh
./build-qjackctl.sh
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 qjackctl bluez bluez-tools libasound2-plugins \
alsa-utils apulse swh-plugins
sudo apt autoremove
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)
Application (ALSA API)
↓
/etc/asound.conf (routing config)
↓
ALSA JACK Plugin (bridge to JACK)
↓
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
Binaries:
- /usr/local/bin/mxeq - Alsa Sound Connect GUI
- /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
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)
- QjackCtl - JACK Audio Connection Kit GUI by Rui Nuno Capela (QjackCtl)
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
- QjackCtl: GPL
- ALSA: LGPL
Issues: GitHub Issues
Documentation:
- BUILD_PLUGINS_GUIDE.md - Building ALSA plugins
- bluealsa-INSTALL.md - BlueALSA installation details
- blue-alsaREADME.md - BlueALSA project documentation
- qjackctl-custom-build.md - Build custom qjackctl
Note: This project intentionally avoids systemd, PulseAudio, and PipeWire. It's designed for systems where a lightweight, JACK-first audio stack is desired.