I recently switched from Windows to Fedora 44 and my Elgato Wave:3 microphone is not working in any application (Discord, ZapZap, GNOME Settings). After extensive troubleshooting I found the following:
Root cause identified (partially): The Wave:3 only accepts S24_3LE format on Linux, not the standard S16_LE. Recording with the correct format works:
arecord -D plughw:2,0 -f S24_3LE -r 48000 -c 1 -d 5 /tmp/test.wav
However, applications still fail because PipeWire repeatedly suspends the device. Discord logs confirm the cycle:
[AVError] no-audio-input-detected — audioInputDeviceName: "Elgato Wave 3 Mono"
[AVErrorManager] Error resolved
[InputWatcher] Silence: false
[InputWatcher] Silence: true
Symptoms:
- Discord (Flatpak) reports
no-audio-input-detectedcyclically - ZapZap (Flatpak) does not detect audio input
- GNOME Settings shows no microphone activity
- PipeWire detects the device correctly
- Node:
alsa_input.usb-Elgato_Systems_Elgato_Wave_3_BS49J1A14632-00.mono-fallback arecord -landwpctl statusandpactl list sourcesall show the device
Versions:
- Fedora 44, kernel 7.0.10-201.fc44.x86_64
- PipeWire 1.6.6
- WirePlumber active
- xdg-desktop-portal 1.21.2
- Discord Flatpak 1.0.140
Relevant findings:
arecord with wrong format fails:
arecord: set_params:1393: Sample format non available
Available formats:
- S24_3LE
journalctl shows USB reset events on resume:
xhci_hcd 0000:01:00.0: xHC error in resume, USBSTS 0x401, Reinit
usb usb1: root hub lost power or was reset
pactl list sources shows the device correctly as s24le 1ch 48000Hz.
What I have tried:
- WirePlumber rule with
session.suspend-timeout-seconds = 0— device still suspends - PipeWire config with custom node using
S24_3LEformat wave3-pulse.confwithstream.propertiesfor F32LE conversion- USB reset via
/sys/bus/usb/devices/3-2/authorized - Older kernel from GRUB — same issue
Question: How do I permanently prevent PipeWire from suspending the Wave:3, or force it to use S24_3LE correctly so applications can access it stably?
Additional finding — device needs a “wake-up” recording:
Running two consecutive arecord commands works — the first one wakes the device, the second captures audio correctly:
bash
arecord -D plughw:2,0 -f S24_3LE -r 48000 -c 1 -d 1 /dev/null && \
arecord -D plughw:2,0 -f S24_3LE -r 48000 -c 1 -d 5 /tmp/test.wav
This confirms the issue is PipeWire suspending the Wave:3 between uses, and the device requires an explicit wake-up before it can capture audio. The WirePlumber rule with session.suspend-timeout-seconds = 0 does not seem to prevent this behavior.
Thanks