fireborn

I Want to Love Linux. It Doesn’t Love Me Back: Post 2 – The Audio Stack Is a Crime Scene

You Can’t Hear Anything—and It’s Not Your Fault

You plug in headphones.
Nothing.
You unplug them again.
Still nothing.
The speakers are muted.
The system says they aren’t.
You check volumes. You restart Pulse. You restart PipeWire.
You restart your whole damn session.
And still—no sound.

That’s just a Tuesday on Linux audio.

Sometimes the device shows up and just won’t play anything.
Sometimes it does—but stutters constantly like it's on a failing cassette tape.
Sometimes laptop speakers never work at all unless you run a six-line hda-verb incantation copied from a 9-year-old mailing list post.

Sometimes, the system boots up with everything at 0% volume.
Why?
Because PulseAudio once had a patch to mute sound on boot.
Then someone reverted that patch because it was breaking things.
Then someone re-applied it.
Then someone re-reverted it.
Then someone added a workaround that cancels the revert of the unmute of the mute.

This is real. This is production. This is Linux audio.


A Brief History of This Disaster

It started simple.
ALSA was the kernel-level driver layer: Advanced Linux Sound Architecture.
It’s still here.
It still runs the hardware.
But back in the early 2000s, people realized ALSA wasn’t enough. It couldn’t mix audio from multiple sources. It couldn’t route sound across apps. It was raw, low-level, and unforgiving.

So we got PulseAudio.
It was supposed to be the layer on top of ALSA—handling device routing, per-app volume control, hotplug support, etc.
Except it was buggy. And laggy. And didn’t always work.
But everything depended on it.

Fast forward to now: Pulse is deprecated in favor of PipeWire—and this time, it’s actually good.

PipeWire, together with WirePlumber (not pipewire-media-session), finally gives us a modern, low-latency, graph-based audio and video system. Bluetooth profiles? Handled. Device routing? Solid. Policy control? Configurable. It fixes real problems that PulseAudio never could.

But here's the problem: the software ecosystem hasn't caught up.

Most apps still expect Pulse. They talk to pipewire-pulse, the compatibility layer—not PipeWire itself.
The stack is clean. The interfaces are better. But the expectations are still stuck in 2012.

And for blind users, that matters. Because even with PipeWire working beautifully, we still hit problems like:

  • Device indexes aren’t simple numbers anymore—they’re long UUID-like IDs, which makes scripting harder.
  • Audio is still tied to your user session. That means root can’t speak—just like with Pulse.
  • Tools like espeakup or fenrir still require config hacks to forward audio from root to your user via WirePlumber.

So yes—PipeWire is a massive improvement. But the legacy Pulse model still shapes how software behaves, and the new stack inherits the same fundamental issue: your sound only works if your user session works. And that’s the exact point where blind users often lose access.

And even beyond that:

You still need Pulse for legacy apps.
You still need ALSA for direct hardware access.
You still need JACK for pro audio tools that never moved on.

So the result? A modern core surrounded by the same old mess.


Debugging Hell: Audio Edition

When audio breaks on Linux, it doesn’t crash.
It doesn’t throw a friendly dialog.
It doesn’t log anything useful.

You just… don’t get sound.

You start running commands:

pactl list sinks
pactl list sources
alsamixer
systemctl --user status pipewire
journalctl -xe

Maybe you see a device. Maybe not.
Maybe it shows up as “dummy output.”
Maybe it shows up as working—while emitting nothing.

If you're lucky, pavucontrol shows the wrong profile and you can fix it.
If you're unlucky, there's no fix. Or the fix doesn’t persist. Or the profile isn't even listed.

Sometimes PipeWire crashes and restarts.
Sometimes it doesn't.
Sometimes Pulse is still running and you didn’t notice.
Sometimes two instances of PipeWire are running—because of a race between your display manager and your session manager.

Sometimes Bluetooth just doesn’t work unless you restart the service in exactly the right order with a magic D-Bus incantation.
Sometimes your speakers disappear when you unplug headphones.
Sometimes they come back muted.
Sometimes you unmute them and they still don’t play—because Pulse remembered a per-port volume of zero from 3 years ago.

And this is just normal desktop audio.


Firmware, UCM, and the Dark Corners

Now let’s talk about laptops.
Not desktops.
Not audio interfaces.
Laptops.

Because here, you get firmware bugs and undocumented quirks.

Your speakers might not work unless you boot with snd-hda-intel.model=laptop.
Or dell-headset-multi.
Or maybe auto.
Or maybe that breaks your microphone.

You’ll find a forum post that says:
“Add a ~/.asoundrc file with these three lines.”
And maybe that works.
Or maybe it breaks every other audio device.

Then there’s UCM—Use Case Manager.
Not documented. Not stable. Not complete.
It’s how Pulse and PipeWire talk to ALSA, and how ALSA talks to your actual hardware pins.

If the UCM file is wrong?
Your device might show up with no outputs.
Your headphones might get routed to the mic jack.
Your speaker might be marked “available” but play nothing.

Fixing this means digging through /usr/share/alsa/ucm2/, reading files written in a half-broken config language no one maintains.
And if your laptop isn’t listed?
Good luck.


Why This Is Even Worse When You’re Blind

For sighted users, audio issues are annoying.
For blind users, they’re catastrophic.

If Orca doesn’t start, and you don’t get sound?
You don’t know why.
There’s no visual feedback.
There’s no error message you can click.
There’s no fallback.

You’re just locked out.
You can’t tell if your machine booted.
You can’t tell if you’re at a login prompt.
You can’t even tell if your system is still on.

You might be in a broken session.
You might be in a panic state.
You might just have no output.
And you have no way of knowing.

This isn’t inconvenience.
It’s exclusion.

And the worst part?
Sometimes the sound comes back.
And you never find out why it broke in the first place.

Because nothing logs it.
Nothing warns you.
Nothing explains it.
It just starts working again… until it doesn’t.

This is the state of audio on Linux in 2025.

And somehow we’re told this is fine.


When the UI Doesn’t Talk, and the CLI Barely Listens

Let’s say you want to adjust volume.
You do what any normal person would do: you open a graphical mixer.

Except most graphical mixers on Linux:

  • Don’t label their sliders correctly for screen readers
  • Don’t expose device names properly
  • Are built on toolkits with broken AT-SPI support
  • Don’t announce focus or selection at all

If you’re blind? You’re just guessing which slider is which.
Orca might say “slider” or “application” or nothing at all.

So you fall back to the terminal.

Except now your desktop is broken. Audio’s gone.
So you SSH in. Or you plug in a serial console.
Or you switch to another TTY—if your distro even configures that properly.

Now what?

You try:

pactl list sinks
pactl set-sink-volume @DEFAULT_SINK@ 75%

Or worse:

pacmd
>>> list-sinks
>>> set-default-sink 1
>>> set-sink-volume 1 0x10000

Except pacmd is undocumented, unforgiving, and interactive.
You can’t use it easily over serial.
You can’t script it.
You have to memorize hex values for volume and sink indexes that change every boot.

And pactl?
It’s only slightly better.

Want to move all audio streams to a new device?

for i in $(pactl list short sink-inputs | awk '{print $1}'); do pactl move-sink-input $i 1; done

You have to parse pactl list, grep for card names, match up device IDs, and hope the syntax hasn’t changed.
All without sound.
All without feedback.
All without any guarantee that it’ll work.

And all this because the nice graphical mixer either didn’t expose the volume control to Orca or crashed on startup.

This isn’t a fallback.
It’s a punishment.


Bluetooth: Still Just Voodoo

Then there’s Bluetooth.

You pair your headphones.
Maybe they connect.
Maybe they don’t.
Maybe they show up in Pulse but not PipeWire.
Maybe they play audio—but only in HSP mode, which sounds like a tin can in a tunnel.

Maybe they work… until you reboot.
Then you have to delete and re-pair the device.
Or restart bluetoothd.
Or kill and restart wireplumber.
Or re-enable the bluetooth-audio module manually with a script you copied from Stack Overflow.

Even when it works, the latency is inconsistent.
Volume levels reset.
The connection drops mid-sentence.
Or it switches to HSP randomly and destroys your microphone.

And this is with BlueZ—the Linux Bluetooth stack that’s been around for years, is included in every distro, and still doesn’t Just Work.

There are wrappers.
There are helpers.
There are DBus APIs and agent scripts.
None of them are consistent.
some of them are accessible.
And none of them are reliable.

It feels like Bluetooth support on Linux is one flaky daemon away from collapse at all times.
And it’s been that way for over a decade.


You Call This a Stack?

People call it a stack.
But it’s not.
A stack implies layers. Order. A single interface at each point.

This is not a stack.
This is a tangled mess of everything ever built for Linux audio still being required right now because no one can kill anything off without breaking something else.

You want to play sound? You need:

  • ALSA, because it’s the actual driver
  • PipeWire, because it’s the new standard
  • Pulse emulation, because most apps still use Pulse
  • ALSA plugins, because some things bypass PipeWire
  • JACK shims, because a few pro audio tools never moved on
  • And config files for all of it—if they even exist

This isn’t backwards compatibility.
This is a graveyard, and we’re all just camping in it.


The Real Cost of Sound That Doesn’t Work

Linux audio doesn’t just fail.
It wastes your time.
It gaslights you.
It makes you doubt your hardware, your config, your kernel, yourself.

Because you know it should work.
It works on other machines.
It worked yesterday.
It works after three reboots.
It works if you reset Pulse.
It works until it doesn’t.

And when it breaks?

  • It doesn’t explain why
  • It doesn’t log useful errors
  • It doesn’t surface diagnostics
  • It doesn’t give you tools
  • It just stops talking

And for a blind user, that means the computer is gone.
There’s no GUI fallback.
There’s no error window.
There’s no log viewer.
There’s just silence.

And we’re expected to fix this blind.


You Shouldn’t Need a Specialist to Hear Your System

It shouldn’t be this way.
You shouldn’t need to install three compatibility layers, patch a udev rule, reboot twice, pray, and then maybe get working sound.

You shouldn’t need to be an audio systems engineer just to watch a video or hear a login prompt.
You shouldn’t have to file a bug just to use your speakers.
You shouldn’t have to script volume restoration, restart services by hand, and know the difference between alsa, aplay, pw-play, and paplay.

But here we are.
And until someone tears this down and rebuilds it for real accessibility, it’s only going to get worse.


Coming next:

Post 3 – Speakup, BRLTTY, and the Forgotten Infrastructure of Console Access

Because when your GUI fails and your audio fails and your display server eats itself,
the console was supposed to save you.

But even that isn’t safe anymore.

Thoughts? Leave a comment

Comments
  1. patricus — May 12, 2025:

    because linux sucks and it won't change.

  2. Eiry Elio — May 12, 2025:

    Linux must change to enpower people with disabilities just like it empowered others! There's a lot of work to do. Society must push linux dev to move forward to build a more inclusive OS.

  3. Wef — May 12, 2025:

    Meh! For me it just works. Both audio and BT. Admittedly both 'stacks' are ancient, baroque and arcane but it all works. Compared to my wife's W11 which sometimes works and sometimes not, linux is a breeze.

  4. Anonymous — May 13, 2025:

    works on my machine

  5. semi-retired — May 13, 2025:

    I used to work for a satellite TV provider. We used Linux with proprietary drivers for most things. The whole ecosystem was built together, years ago. If I logged the errors I could diagnose problems, but I felt it was much less usable than it should be. I have also used Windows for a game project, which was “hard,” but if I logged errors thoroughly myself, I could get somewhere with my simple needs.

  6. semi-retired — May 13, 2025:

    I used to work for a satellite TV provider. We used Linux with proprietary drivers for most things. The whole ecosystem was built together, years ago. If I logged the errors I could diagnose problems, but I felt it was much less usable than it should be. I have also used Windows for a game project, which was “hard,” but if I logged errors thoroughly myself, I could get somewhere with my simple needs. Linux audio evidently, using the mainstream APIs, is a lost cause, but it doesn’t have to be.

  7. volk — May 13, 2025:

    patricus, all software sucks.

    “And folks, let’s be honest. Sturgeon was an optimist. Way more than 90% of code is crap.” – Al viro

  8. David — May 13, 2025:

    I hope your articles find the proper audience in order to raise the awareness that is necessary among developers.

    Is Bluetooth support on Linux even worse than on Windows? Because even on other operating systems Bluetooth was often a source of frustration to me (as a visual user) and I do not really trust it.

  9. Artefact — May 13, 2025:

    Linux is amazing and a tool for liberation of societies and owning your computer, sadly this article is 100% truth.

  10. mid — May 13, 2025:

    [ALSA] couldn’t mix audio from multiple sources.

    It can, with dmix, which I read is set up by default for years now.

    Not that it's an excuse for this sorry state of an audio landscape, but I'm wondering if you personally wouldn't be better off using only ALSA? I can't remember my ALSA setup ever having broken. (No finicky daemons!) Root can play sound too. apulse emulates the PulseAudio interface for apps that don't speak ALSA any more. Routing sound to different audio interfaces may be more complicated if the application itself doesn't support that, but I find that I only ever want that for mpv and audio applications anyway. Bluetooth may be possible with bluez-alsa (haven't tried, I don't buy Bluetooth audio devices).

    You wouldn't get "modern" features, but perhaps you'd also get a stable audio setup.

  11. mid — May 13, 2025:

    [ALSA] couldn’t mix audio from multiple sources.

    It can, with dmix, which I read is set up by default for years now.

    Not that it's an excuse for this sorry state of an audio landscape, but I'm wondering if you personally wouldn't be better off using only ALSA? I can't remember my ALSA setup ever having broken. (No finicky daemons!) Root can play sound too. apulse emulates the PulseAudio interface for apps that don't speak ALSA any more. Routing sound to different audio interfaces may be more complicated if the application itself doesn't support that, but I find that I only ever want that for mpv and audio applications anyway. Bluetooth may be possible with bluez-alsa (haven't tried, I don't buy Bluetooth audio devices).

    You wouldn't get "modern" features, but perhaps you'd also get a stable audio setup.

  12. Max Borowsky — May 13, 2025:

    Are there other options to ensure availability other than Linux? Don't MacOS or Windows provide availability? I ask because I don't know. If Linux is the only option for you, I sympathize with you, because what you described is real hell.

    And please do not humiliate yourself in front of the GNOME management, do not write a "refutation" after you are rightly indignant - if the code to run Orca "shipped but did not work reliably," it is still as if it did not exist. When you've purchased a car but it's not driving, it's the equivalent of not owning a car. The guys from GNOME love to talk about how their craft is convenient for everyone, and those who disagree with them are just haters - but they are lying.

    I wish you the best of luck and hope you are heard.

  13. Chris Hill — May 13, 2025:

    I've had good luck with Accessible Coconut in the audio department, except for one thing. I'm using this particular computer to connect to tv, and for the life of me, I can't make 5.1 audio work. I get 2.1, and there doesn't seem to be a workable option to fix it.

    There are so many things that we as modern computer users expect to just work that don't on many Linux distributions. I really hope for better, but until we get someone excited about doing things like fixing the audio and others excited about incorporating the fixes into their operating systems, we're just going to be dealing with these issues. I suspect the reason that Windows and Mac are as accessible as they are is that governments require it as a condition of purchase. It is going to take extreme charity among Linux developers to ever get to the same point.

  14. ctk — May 13, 2025:

    All of the problems mentioned in this article, excluding bluetooth, appeared for the first time when pulseaudio was pulled as a dependency of something I installed or updated on my system. I removed it and banned my package manager from ever installing it again, and it's been good. I do audio mixing and routing, and hotplug USB audio devices, reliably so far. Say no to pulseaudio! apulse fixes some of the apps; if not you can have pulseaudio running, as an unobtrusive dumb pipe to ALSA's mixer dmix. I do the same with every other sound server that some app might require, but most software just talks to ALSA's dmix.

  15. The Geek on Skates — May 14, 2025:

    Ohhhh I've been there. "Dummy output"? What the puck? I have real speakers. Okay, how do I tell this brain-farting dummy what a speaker is? I am in awe of you knowledge of config-riggery. I've guessworked my way around a gajillion config files for different things (and not just audio) and all that has taught me how little I know. They really should have organized things into like a "/config/appNameHere" with a folder for each app, and a standard format (I don't care if it's INI files, or XML, or JSON, or whatever). But that would require forethought. Organization. Your "not a stack" statement is so true.

  16. Jan — May 14, 2025:

    There is an .. amibitous .. project that is "burning it all down to build it up", from replacing the terminal to the UI with strong opinions on accessibility "it's all of us or none of us".

    It is a lot to unpack. I have followed it for years and feels like I only understand half of it (not an engineer) but I try it out every month or so and can almost get by now. I have low vision and damaged hearing so I use both a screen reader and visual aids.

    Some points that stands out to me as far as accessibility goes:

    • Display Server does audio as well.

    • Window Manager is in control over everything, from audio routing to input routing to colors. Screen reading is a part of its job, if you need it.

    • Window Manager parts are completely written as bundles of Lua scripts.

    • Same goes for the command-line shell.

    • Window Manager has access to raw window content, OCR, speech synthesis and for text-only windows like the CLI, the actual text.

    • Window Manager can ask native clients if they can provide an extra window with accessibility annotations and controls. If they don't it can fallback to OCR.

    My problems so far has been that it is tough to install. It turns out that much of the stack fight back when you try to burn it down. There are few native clients and using ones through protocol bridges (Wayland and X11) doesn't support accessibility requests.

    I reached out to the developer and talked to them about my problems after this article:

    https://arcan-fe.com/2024/10/18/accessible-arcan-out-of-sight/

    The response I got is that an install image builder that enforce accessibility presets from the start is coming, as is native Qt client support that do expose accessibility controls.

  17. Anonymous — May 15, 2025:

    linux users will see stuff like this, want to fight you online, and then wonder why people keep going back to microsoft and apple

  18. Chime Hart — May 16, 2025:

    I certainly agree with everything in this 2nd post. On a laptop, after first installing Debian SID, I had a backspace beep, however, once enabling Speakup with Voxin, I have never had that beep again. In general rebooting alters an order of sound-cards, which is inconvenient. My large wishlist item would be an easier menu-driven sound editor. Sure, there have been attempts such as trplayer which recorded useing reelplayer 8. Ultimately as a news-junky, I rip alot of streams. I want to edit out commercials-and-other content. I wrote to the folks at mpv asking thm to add a record option. An mpv type interface where you arrow left2right, along with block commands like you might find in a NANO editor would be wonderful. This would be lots simpler than Audacity

  19. Artem — May 17, 2025:

    A soul crushing read. Those sudden breakages of "you-name-it-what" that for us, sighted, are mere nuisances, for blind users are full blown catastrophes.

    This whole pulseaudio saga has led me to suspicion that the same story will repeat with Wayland: imagine that all GUI frameworks, WMs, desktops and even non-Linux OSes finally catch up, so it is time to squash remaining bugs and slowly extend the functionality, right? Wrong: just before the last bit of software that users rely on converts, some engineer at Red Hate concludes that Wayland's design is utterly broken and it is time to roll out the New Solution that will solve all our problems, and their employer happily obliges... and the cycle repeats.

    There's a great piece titled "Modern software development is cancer" at Dedoimedo (https://www.dedoimedo.com/computers/software-development-cancer.html) with the idea that "software developers must not touch product", because "for developers, this is a lovely and colorful playground, but for end users it's a nightmare".

    It is also worth remembering that until recently the blog of a man who created a barely functioning piece of crap sound system for Linux proudly boasted "I break your audio". Since then he removed this subtitle for some reason; I wonder, what could have happened?

  20. fi — May 21, 2025:

    Sounds like you might have both PulseAudio and Pipewire installed. You only need one. Make sure the package pulseaudio is not installed and that pipewire-pulse is installed.

  21. Evan — May 21, 2025:

    Hi! I have no experience here but, open source is open source for a reason. Is there an app you can think of that needs patching? I'd like to go see if I can contribute even just some button labels, but linux audio has always been magical to me and I have no idea where to start.

  22. Grzesiek11 — May 23, 2025:

    While I can't comment on the accessibility related topics (you are probably completely in the right here, as it's a very neglected part of this ecosystem), audio itself works just fine for me with PipeWire and Debian defaults on my desktops and older laptops that don't have complex drivers. I really never have issues nowadays, with PulseAudio yeah, I did have problems sometimes that definitely could be impossible to resolve without relying on sight. I guess this might be due to your complex setup that you require to, well, use your computer - as a sighted user I can rely on the defaults most of the time, and defaults is what is the most well tested. Can't really comment on Bluetooth either as I seldom use it, with PulseAudio I always had issues, with PipeWire it seems to work when I need it.

  23. Linux Admin — May 29, 2025:

    The Linux desktop is what you get when there is no sane coherent mind organized to achieve a particular goal. It's schizophrenic. After over 25 years of me using Linux desktop, it's still a goddamn mess. The next developer comes in with the solution, but until 2000 other codebases get updated, all it did was add another tangled mess of complexity. Everything is constantly breaking, getting fixed, then breaking again as you ride the wave of updates, hoping to get something stable. But stability with functionality never arrives. As an experienced Linux desktop user and systems engineer, I do not recommend Linux desktop to general users, and I doubt I will within the foreseeable future. It's sad and infuriating that it's such a mess still.

  24. Anonymous — May 30, 2025:

    what are JACK using apps supposed to move on to ? JACK is and remains the appropriate subsystem for pro audio on linux - pipewire is not a replacement but an interface to it (and if you really care about pro audio you will likely use straight JACK to mimimise latency since every ms counts). this article seems to lack fundamental understanding of the topics it is written about.

  25. lhx6205 — May 30, 2025:

    Yes, this is correct. And it will stay this way.

  26. Anonymous — May 30, 2025:

    Isn't the point of pipewire-pulse so you don't need to have pulseaudio installed? It feels like the majority of stuff breaking is due to both running at the same time... There's compatibility layers for ALSA and Jack to connect to Pipewire as well (e.g. pipewire-jack or pipewire-alsa), so... We aren't sure if it'd work better if you were to exclusively use the compatibility layers rather than having multiple sound systems installed, which sounds like it'd just break everything instead.

  27. Anonymous — May 30, 2025:

    Works for me perfectly fine with multiple Bluetooth devices, switching between them, switching between codecs and fallback to my normal speakers on disconnect. It also remembers volume levels. Helvum is working great and EasyEffects is working fine to for me.

  28. Alex — Jun 2, 2025:

    This is so sad that things haven't changed since 2000's, where vision-impairment prevents you from using your own computer. I had a bunch of problems with PulseAudio and Bluetooth, so I feel you.