DEV Community

Cover image for Cava segfaulting inside WezTerm (Flatpak)? Diagnosis and fix in one command
Igor Giamoniano
Igor Giamoniano

Posted on

Cava segfaulting inside WezTerm (Flatpak)? Diagnosis and fix in one command

cava runs fine in any terminal — but inside WezTerm installed via Flatpak it crashes with:

Segmentation fault (core dumped)
Enter fullscreen mode Exit fullscreen mode

If that's what brought you here, the quick fix is right below. The full diagnosis comes after, for those who want to understand why.


⚡ TL;DR — Fix in two commands

flatpak update org.wezfurlong.wezterm
flatpak override --user org.wezfurlong.wezterm --device=all
Enter fullscreen mode Exit fullscreen mode

Close all WezTerm windows and reopen it. cava should work normally now.

⚠️ Security tradeoff: --device=all grants WezTerm access to all system devices — including camera and microphone, not just audio. If that's a concern in your environment, the safer alternative is to use the native WezTerm build, which doesn't have this restriction by design.

WezTerm with Cava Working


🔍 What's happening under the hood

Why does WezTerm Flatpak cause the crash?

Flatpak runs WezTerm inside a sandbox that isolates the process from the host system. cava tries to enumerate available audio devices (ALSA/PipeWire) right at startup — without access to those device nodes, it receives an invalid pointer and segfaults.

That's why other terminals (GNOME Terminal, Kitty, etc.) don't have this problem: they have unrestricted access to the system. --device=all fixes exactly that: it grants access to the audio device nodes cava needs to initialize.

As a secondary hypothesis (not directly confirmed), the sandbox may also modify environment variables that cava uses to detect the audio backend.

Confirming with GDB

Want to see the full backtrace? Expand here.

Inside WezTerm, run:

gdb cava
Enter fullscreen mode Exit fullscreen mode

When prompted, accept debuginfod with y. Then:

(gdb) run
Enter fullscreen mode Exit fullscreen mode

When the crash occurs:

(gdb) bt
Enter fullscreen mode Exit fullscreen mode

The output should look something like this:

Program received signal SIGSEGV, Segmentation fault.
__strncmp_avx2 () at ../sysdeps/x86_64/multiarch/strcmp-avx2.S:283
283             VMOVU   (%rdi), %ymm0
(gdb) bt
#0  __strncmp_avx2 () at ../sysdeps/x86_64/multiarch/strcmp-avx2.S:283
#1  0x0000555555559cfe in main (argc=, argv=)
    at /usr/src/debug/cava-0.10.2-7.fc44.x86_64/cava.c:297
Enter fullscreen mode Exit fullscreen mode

The crash happens inside __strncmp_avx2 — a glibc string comparison function — called by cava at line 297. The pointer passed in is null or points to invalid memory, which indicates that cava failed to retrieve valid information about the audio devices and segfaulted when trying to use it.

gdb output


✅ Step-by-step fix

1. Update your packages

sudo dnf upgrade cava          # Fedora
flatpak update org.wezfurlong.wezterm
Enter fullscreen mode Exit fullscreen mode

2. Grant device access

flatpak override --user org.wezfurlong.wezterm --device=all
Enter fullscreen mode Exit fullscreen mode

3. Fully restart WezTerm

Close all windows and reopen. Ctrl+Shift+R is not enough — Flatpak permission changes only take effect after a full restart.

4. Test it

cava
Enter fullscreen mode Exit fullscreen mode

🎉 Working? You're done. If not, see the alternatives below.


🖱️ Alternative: Flatseal

Prefer a GUI for managing Flatpak permissions?

flatpak install flathub com.github.tchx84.Flatseal
Enter fullscreen mode Exit fullscreen mode

Open Flatseal → select WezTerm → go to the Device section → enable All devices → restart WezTerm. The result is identical to the command above.


⚠️ If it still doesn't work

Audio service not running: check if PipeWire is active:

systemctl --user status pipewire
# If inactive:
systemctl --user start pipewire
Enter fullscreen mode Exit fullscreen mode

Rendering issue: add this to your ~/.wezterm.lua:

config.front_end = "Software"
Enter fullscreen mode Exit fullscreen mode

⚠️ This option may cause slowness or even prevent WezTerm from opening on some systems. Use with caution.


🔄 Last resort: native WezTerm

If nothing works — or if the --device=all tradeoff isn't acceptable — the native build solves it definitively: no sandbox, no device restrictions.

The official documentation covers all options: AppImage, .deb/.rpm packages, and building from source.


📌 Summary

Solution Complexity Keeps Flatpak?
flatpak override --device=all ⭐ Low
Flatseal (GUI) ⭐ Low
Check PipeWire ⭐⭐ Medium
front_end = "Software" ⭐⭐ Medium
Install native build ⭐⭐ Medium

The root cause is the Flatpak sandbox blocking cava's access to audio device nodes at startup. Releasing that access with --device=all resolves it in almost every case — and you keep all the benefits of Flatpak.


📝 Based on real experience on Fedora 44+ with WezTerm (Flatpak) and cava 0.10.2.

Top comments (0)