My Linux Guitar Practice Stack: Guitarix and Audacious
Since the end of the Windows 10 lifecycle is approaching, I have migrated most of my PCs to Ubuntu 24.04. This way, I can save them from the bin, as they are too old to run Windows 11.
One of the PCs I migrated is an Acer Aspire 3 laptop, which I have used for practicing guitar on the road with a Focusrite Scarlett Solo audio interface. My first idea for continuing to use it for that purpose was to install Wine and run my trusty Native Instruments Guitar Rig plugin along with Presonus Studio One 5. However, I soon discarded this idea because a quick Google search revealed that the setup was not straightforward. I was also concerned about latency—since Wine is an emulation layer, it could consume additional CPU resources and introduce latency.
To get the best latency possible, I looked around for native Linux options and found Guitarix and Audacious. Guitarix is an amp simulation software. It requires a bit more manual tweaking than Native Instruments products, but it is free and open source. Audacious is a simple media player that I use for backing tracks. Both can run through the JACK sound server, which provides low-latency audio.
In general, usage is not as comfortable as on Windows. Audacious, for example, does not have a playback speed setting, and Guitarix has very few presets. Setup also took about an hour because the JACK audio server works quite differently from the ASIO system I am used to on Windows. But after a while, I achieved quite satisfactory results. Playback speed can be adjusted with the Audacity WAV editor, which is also common on Windows, and the Guitarix presets sound pretty decent.
Fortunately, I was able to generate a start script with ChatGPT that makes setup a lot easier. In case you find it useful, feel free to copy it.
start-jam-session.sh
(auto-detect version)
#!/bin/bash
set -e
# ========== CONFIGURATION ==========
# Set the names for ports/devices
SCARLETT_PLAYBACK_L="system:playback_1"
SCARLETT_PLAYBACK_R="system:playback_2"
GX_OUTPUT_L="guitarix:out_0"
GX_OUTPUT_R="guitarix:out_1"
AUDACIOUS_OUTPUT_L="PulseAudio JACK Sink:front-left"
AUDACIOUS_OUTPUT_R="PulseAudio JACK Sink:front-right"
# ========== FUNCTIONS ==========
check_pipewire_jack() {
echo "Checking if PipeWire JACK is running..."
if ! pw-jack jack_lsp >/dev/null 2>&1; then
echo "PipeWire-JACK is not responding. Trying to start it..."
systemctl --user start pipewire
systemctl --user start pipewire-pulse
systemctl --user start pipewire-jack
sleep 2
if ! pw-jack jack_lsp >/dev/null 2>&1; then
echo "❌ Failed to start PipeWire JACK backend. Exiting."
exit 1
fi
fi
echo "✅ PipeWire JACK is running."
}
wait_for_port() {
local port="$1"
echo -n "Waiting for JACK port '$port'"
for i in {1..10}; do
if jack_lsp | grep -q "$port"; then
echo " – found."
return
fi
echo -n "."
sleep 1
done
echo " ❌ Port '$port' not found."
exit 1
}
connect_ports() {
echo "Connecting Guitarix output to Scarlett..."
jack_connect "$GX_OUTPUT_L" "$SCARLETT_PLAYBACK_L" || true
jack_connect "$GX_OUTPUT_R" "$SCARLETT_PLAYBACK_R" || true
echo "Connecting Audacious (PulseAudio JACK Sink) to Scarlett..."
jack_connect "$AUDACIOUS_OUTPUT_L" "$SCARLETT_PLAYBACK_L" || true
jack_connect "$AUDACIOUS_OUTPUT_R" "$SCARLETT_PLAYBACK_R" || true
}
# ========== MAIN SCRIPT ==========
check_pipewire_jack
echo "Launching Guitarix..."
guitarix &
echo "Launching Audacious..."
audacious &
echo "Waiting for apps to register with JACK..."
wait_for_port "$GX_OUTPUT_L"
wait_for_port "$AUDACIOUS_OUTPUT_L"
connect_ports
echo "🎶 Ready to jam! Your guitar goes through Guitarix, and Audacious plays clean through Scarlett."
How to use
-
Save the script:
nano start-jam-session.sh
-
Paste the code above.
-
Make it executable:
chmod +x start-jam-session.sh
-
Run it:
./start-jam-session.sh
-
Run qjackctl
pw-jack qjackctl
-
Configure Inputs and Outputs on Guitarix
[AI used only for spellchecking when writing this article]