Skip to content

DAX virtual audio: only slice 0 gets audio client on Linux PipeWire headless (RPi 5, Ubuntu 24.04, FLEX-8600) #2895

Description

@laurivee

Report preparation

  • I used the AI-assisted bug report tool (Help → Support → File an Issue)
  • I have attached a support bundle or log file

What happened?

Environment

  • AetherSDR: v26.5.2.1 (also reproduced on v0.9.8)
  • Radio: FlexRadio FLEX-8600, firmware v4.2.18
  • OS: Ubuntu Server 24.04.4 LTS arm64 (Raspberry Pi 5, 8GB)
  • PipeWire: 1.0.5 (libpipewire 1.0.5)
  • Running headless with Xvfb virtual display (:99, 1920x1080)
  • 4 PipeWire null sinks created at 24000Hz: dax1–dax4

What happens

With 4 slices each assigned to DAX channels 1–4 in the AetherSDR UI,
only channel 1 (slice 0 / index A) ever produces audio. Channels 2–4
remain IDLE in PipeWire despite being assigned.

pactl list sinks short after assigning all 4 DAX channels:

36 dax1 PipeWire float32le 2ch 24000Hz RUNNING ← only this one
39 dax2 PipeWire float32le 2ch 24000Hz IDLE
44 dax3 PipeWire float32le 2ch 24000Hz IDLE
49 dax4 PipeWire float32le 2ch 24000Hz IDLE

Root cause (observed in AetherSDR debug log)

The FLEX API correctly receives and acknowledges DAX assignments for all
4 slices — confirmed in the AetherSDR log:
[22:49:11] slice 0 dax=1 dax_clients=0 ← startup, slice A
[23:05:03] slice 1 dax=2 dax_clients=0 ← after UI assignment, slice B
[23:05:34] slice 2 dax=3 dax_clients=0 ← after UI assignment, slice C
[23:05:47] slice 3 dax=4 dax_clients=0 ← after UI assignment, slice D

dax_clients remains 0 for slices 1–3 permanently. For slice 0,
AetherSDR connects its internal audio client, and dax1 goes RUNNING.
For slices 1–3, AetherSDR never connects a client — the FLEX never
receives a client registration for those channels.

The bug is in AetherSDR's DAX client management: it handles slice 0
correctly, but does not connect audio clients for slices 1–3.

What did you expect?

What I expect

All 4 DAX sinks to show RUNNING with dax_clients=1 for each slice
after DAX channel assignment in the UI.

Steps to reproduce

Steps to reproduce

  1. Create 4 PipeWire null sinks at 24000Hz named dax1–dax4
  2. Start AetherSDR headless: DISPLAY=:99 ./AetherSDR.AppImage
  3. Connect to FLEX-8600 (3 slices active is sufficient to reproduce)
  4. Assign DAX Ch 1 to Slice A at startup — this one works
  5. Assign DAX Ch 2, 3, 4 to Slices B, C, D via UI
  6. Run pactl list sinks short — dax2–4 remain IDLE
  7. Check AetherSDR log — dax_clients stays 0 for slices 1–3

Additional notes

  • Confirmed on both v0.9.8 and v26.5.2.1
  • Confirmed on FLEX-8600 firmware v4.1.5 and v4.2.18
  • On macOS with SmartSDR for Mac, all 4 DAX channels work correctly
  • Slice 0 / DAX channel 1 works reliably every time
  • The use case is 4× WSJT-X instances each decoding a separate slice
    simultaneously on a headless Linux edge node

AetherSDR version

v26.5.2.1

Radio model & firmware

FLEX-8600 4.2.18

Operating system

Linux

OS version and hardware

Ubuntu Server 24.04.4 LTS arm64 (Raspberry Pi 5, 8GB)

Metadata

Metadata

Assignees

No one assigned

    Labels

    audioAudio engine and streamingbugSomething isn't workinglinuxmaintainer-reviewRequires maintainer review before any action is takenpriority: mediumMedium priorityprotocolSmartSDR protocol

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions