Fixing Audio on a MacBook Pro (T2) with Linux and PipeWire
Getting audio working on a MacBook Pro with Apple’s T2 chip can be tricky on modern Linux distributions. This post documents the exact steps I used to get full audio working on a MacBook Pro 16,1 (A2141) running Ubuntu Plucky with the T2Linux kernel, including an optional DSP speaker configuration.
The Problem
After following the T2Linux audio guide and installing PipeWire, I still had no sound. Tools that rely on PulseAudio compatibility failed:
pactl info
Connection failure: Connection refused
pa_context_connect() failed: Connection refused
Native PipeWire clients also failed to connect:
pw-cli info 0
Error: "failed to connect: Host is down"
Although pipewire.service appeared to be running, clients could not talk to the PipeWire core.
The Root Cause
PipeWire clients connect through the libpipewire-module-protocol-native module. If that module is not loaded, clients cannot connect, even if the PipeWire process is running. Some third-party scripts (including certain DSP installers) place a full /etc/pipewire/pipewire.conf that overrides the distribution’s default configuration in /usr/share/pipewire/pipewire.conf. Those overrides can omit the native protocol module, resulting in “Host is down”.
The Fix
- Reset PipeWire to defaults (removes overrides and stale user configs): - sudo mv /etc/pipewire /etc/pipewire.disabled.$(date +%s) rm -rf ~/.config/pipewire ~/.local/state/pipewire systemctl --user daemon-reexec systemctl --user restart pipewire- Verify the core is reachable: - ls -l /run/user/1000/pipewire-0 pw-cli info 0- You should see a socket at - /run/user/1000/pipewire-0and JSON info from- pw-cli.
- Restart the audio stack and confirm PulseAudio compatibility is active: - systemctl --user restart wireplumber pipewire-pulse pactl info- pactl infoshould print Server Name: PulseAudio (on PipeWire 1.x).
Optional: T2 DSP Configuration for MacBook Pro 16,1
The 16-inch MacBook Pro (16,1) has a multi-speaker layout. A community DSP configuration improves routing and EQ:
git clone -b speakers_161 https://github.com/lemmyg/t2-apple-audio-dsp.git
cd t2-apple-audio-dsp
bash install.sh
However, this installer may install a complete /etc/pipewire tree that replaces defaults and breaks connectivity again. The safe approach is:
- Disable the installer’s global config but keep its DSP files: - sudo mv /etc/pipewire /etc/pipewire.dsp.disabled.$(date +%s)
- Copy only the DSP drop-in into the distribution’s drop-in directory: - sudo mkdir -p /usr/share/pipewire/pipewire.conf.d sudo cp /etc/pipewire.dsp.disabled.*/pipewire.conf.d/10-t2_161_speakers.conf \ /usr/share/pipewire/pipewire.conf.d/
- Ensure the drop-in extends, rather than replaces, the default modules. Open the copied file and change the first line: - context.modules = [- to: - context.modules += [- This keeps all default modules (including - libpipewire-module-protocol-native) and adds the DSP filter-chain.
- Restart services and verify: - systemctl --user restart pipewire wireplumber pipewire-pulse pactl info pactl list short sinks- You should see the DSP sink (for example, a node created by the filter-chain). For a quick check: - speaker-test -t wav -l 1
Results
After restoring the default PipeWire configuration and loading the DSP graph as a proper drop-in, audio works reliably. Clients connect to the PipeWire core, PulseAudio compatibility is available, and the multi-speaker DSP routing provides correct channel mapping and improved sound.
Tips
- Do not replace /usr/share/pipewire/pipewire.conf. Use/usr/share/pipewire/pipewire.conf.d/for additions.
- If you see “Host is down” or “Connection refused,” check for overrides under /etc/pipewireand remove or rename them.
- When merging custom configs, prefer context.modules += [ ... ]rather than redefiningcontext.modules = [ ... ].

