Fixing Internal Speaker Sound on Apple T2 Macs Running Gnoppix

Yes, my testing laptop is a donated, older Apple MacBook Pro with an Intel chip and a T2 security chip. After upgrading to Kernel 7.x, my audio stopped working. Since my time is very limited, i had no time to fix this until this morning.

**TLDR:** If your internal speakers stopped working on an Apple T2 Mac running Linux, `fluidsynth` is likely holding the audio device hostage. Kill it, restart PipeWire, and the sound comes back. Full diagnosis and fix below.

The Problem

I run Gnoppix 26 with KDE Plasma on an Apple T2-based Mac :slight_smile: One day, the internal speakers stopped producing any sound. KDE System Settings showed no usable audio output devices only HDMI outputs from the Intel PCH card.

At first glance, everything seemed fine:

  • `aplay -l` detected the Apple T2 audio card
  • PipeWire and PipeWire-Pulse services were active and running
  • KDE Plasma was connected to PipeWire

Yet: **no sound, no visible T2 device in KDE.**


Diagnosis: Step by Step

1. Verify the hardware is detected by ALSA

```bash
$ aplay -l
**** Liste der Hardware-Geräte (PLAYBACK) ****
Karte 0: Audio [Apple T2 Audio], Gerät 0: Speaker [Speaker]
Karte 0: Audio [Apple T2 Audio], Gerät 2: Codec Output [Codec Output]
Karte 0: Audio [Apple T2 Audio], Gerät 4: Bridge Loopback [Bridge Loopback]
Karte 2: PCH [HDA Intel PCH], Gerät 3: HDMI 0 [DELL P2415Q]
```

The T2 card (`Karte 0`) is present with Speaker, Codec Output, and Bridge Loopback devices. The kernel driver is loaded. Hardware is fine.

2. Check what PipeWire sees

```bash
$ pactl list cards short
60 alsa_card.pci-0000_00_1f.3 alsa
```

Only the Intel HDMI card appears. **The T2 card is completely absent from PipeWire.**

3. Try to manually load the card profile

```bash
$ pactl set-card-profile alsa_card.pci-0000_e6_00.3 Default
Failure: No such entity
```

PipeWire has no record of the card. The problem is not the wrong profile the device was never registered.

4. Check if something is blocking the device

```bash
$ cat /proc/asound/card0/pcm0p/info
card: 0
device: 0
subdevices_count: 1
subdevices_avail: 0 ← all sub-devices are in use
```

`subdevices_avail: 0` means something has the device open exclusively.

```bash
$ fuser -v /dev/snd/controlC0
USER PID ACCESS
/dev/snd/controlC0: amu 1070 F…
```

A process with PID 1070 has the T2 control device open with exclusive access.

```bash
$ ps -p 1070 -o pid,ppid,user,cmd
PID PPID USER CMD
1070 965 amu /usr/bin/fluidsynth -is -r 48000 -z 512 /usr/share/sounds/sf3/default-GM.sf3
```

**Found it: `fluidsynth`.**

5. What is fluidsynth doing?

`fluidsynth` is a software MIDI synthesizer (SoundFont renderer). For whatever reason, it had opened the T2 audio device and was holding it in exclusive mode. Because of how the `snd_soc_avs` (Apple T2 audio) kernel driver works, this prevented **every other process** including PipeWire from opening the device.

This explains everything:

  • ALSA sees the card (kernel level: OK)
  • PipeWire never creates a device node (because it can’t open the ALSA device)
  • KDE shows no audio output (because PipeWire has nothing to show)

The Fix

Kill `fluidsynth`, stop its service from respawning, restart PipeWire:

```bash

Kill the blocking process

kill 1070
killall fluidsynth 2>/dev/null || true

Stop and disable its user service

systemctl --user stop fluidsynth
systemctl --user disable fluidsynth

Wait for the device to be released

sleep 2

Restart PipeWire

systemctl --user restart pipewire pipewire-pulse
sleep 2
```

Verify the device is free:

```bash
$ fuser -v /dev/sound/controlC0

(no output = device is free)

```

Check that PipeWire now sees the T2 card:

```bash
$ pactl list cards short
60 alsa_card.pci-0000_00_1f.3 alsa
152 alsa_card.pci-0000_e6_00.3 alsa ← T2 card appeared!
```

New sinks are available:

```bash
$ pactl list sinks short

153 alsa_output.pci-0000_e6_00.3.Speakers PipeWire s24-32le 4ch 48000Hz SUSPENDED
154 alsa_output.pci-0000_e6_00.3.Headphones PipeWire s24-32le 2ch 48000Hz SUSPENDED
```

Switch to the Speakers sink:

```bash
$ pactl set-card-profile alsa_card.pci-0000_e6_00.3 Default
$ pactl set-default-sink alsa_output.pci-0000_e6_00.3.Speakers
$ pactl set-sink-mute alsa_output.pci-0000_e6_00.3.Speakers 0
$ pactl set-sink-volume alsa_output.pci-0000_e6_00.3.Speakers 65%
```

Test:

```bash
$ speaker-test -D pipewire -c 2 -l 1
0 - Front Left
1 - Front Right
```

**Sound!** White noise from the internal speakers. Problem solved.


Preventing Recurrence

To make sure `fluidsynth` never blocks the T2 audio device again:

```bash
systemctl --user disable --now fluidsynth
```

If you ever need MIDI sound synthesis in the future, you can re-enable it but be aware that it may steal the internal speakers again.

The Fix Script

I saved the full fix as `fix-t2-speakers.sh`. Run it any time the internal speakers stop working:

```bash
chmod +x ~./scripts/fix-t2-speakers.sh
```

The script automatically: kills any process blocking the T2 device, stops fluidsynth, restarts PipeWire, switches to the Default profile, selects the Speakers sink, unmutes, sets volume to 65%, and plays a test tone.


Lessons Learned

  1. **When PipeWire doesn’t see a card that ALSA does**, check for processes holding the device open with `fuser -v /dev/snd/*` and `cat /proc/asound/card*/pcm*/info`.

  2. **`fluidsynth` can be a silent killer** on Apple T2 Macs. It grabs the audio device exclusively, making it invisible to PipeWire. If you don’t need MIDI synthesis, disable it permanently.

  3. **`snd_soc_avs` (Apple T2 audio driver)** doesn’t support multiple concurrent clients well. When one process opens the device exclusively, everything else is locked out.

  4. **Running PipeWire/PulseAudio commands as root** won’t work — these are user-level services. Always run `pactl`, `wpctl`, and `systemctl --user` as your regular desktop user.


*Posted: by amu June 2026 · Tags: linux, audio, pipewire, apple-t2, debian, kde, troubleshooting*

Link: https://media.gnoppix.org/fix-t2-speakers.sh