Working around the Framework 13 microphone problem

August 24, 2026

On the Framework 13 with the AMD Ryzen AI 300 series CPU, the UEFI exposes an audio device that is meant for the Windows platform on Linux. This wouldn’t be such a big deal if it wasn’t for the fact that said device causes the internal microphone to not work.

There’s a lengthy GitHub thread about this, and with GitHub issues lately there have been a string of people throwing LLMs at the problem. Sadly, the posted fixes range from disabling Linux’s UCM, to using pactl to select the profile for the device (which can also be done with the KDE sound picker, so I’m not sure what that accomplishes).

Those “fixes” do nothing when you plug in a headset to the 3.5 mm jack. The profile doesn’t get auto-switched, and thus you end up with no mic input. The actual solution is to listen for changes and automatically switch the active profile based on how many there are, because the internal speaker has 3 and connecting a headset bumps it up to 5. EDIT: And then I realized that pactl list cards shows headphones availability anyway after diffing the two output states, so the approach is even more stable than simply hoping the profile count stays constant.

So here’s the Gist for it:

The timing ignore for 3 seconds is because when we switch profiles, that by itself creates more events that causes the switcher to re-run. I hope you’re not unplugging and re-plugging your headsets within 3 seconds.

Save it somewhere, make it executable, and make sure you have jq installed. (And also pactl but I think it’s rarer that you’ll find a distro nowadays that do not have it.)

The Gist should also have the systemd service file to make it persistent.

Now if Framework would actually fix this properly. (Or, at the very least, make a UEFI toggle that hides the device??? They do it for some components like the speakers on the Framework 16…)