You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
On builds withoutlibpipewire-0.3 dev headers (HAVE_PIPEWIRE_NATIVE off), DAX audio
nodes are created via the legacy pactl module-pipe-source / module-pipe-sink path. Every
DAX RX node and the TX node ends up with node.description = "AetherSDR" — generic and
identical for all of them — so qpwgraph, JACK-via-PipeWire patchbays, WSJT-X and FLDIGI show
no way to tell DAX 1 from DAX 4 from TX. Operators have to pick the generic pipewire device
and hand-route by guesswork.
The TX sink is created via this legacy path even on native builds, so the TX half is
affected on every build.
Environment
Linux, pipewire-pulse (PipeWire's PulseAudio server — the modern default on
Fedora/Nobara/Ubuntu/Arch). Observed on Nobara 43, PipeWire 1.x.
Build with native PipeWire off (PIPEWIRE_NATIVE_INCLUDEDIR empty in CMakeCache.txt).
But pipewire-pulse's pulse-module argument parser splits the property value on unescaped whitespace and does not honor the embedded double-quotes for grouping. So the
value is taken only up to the first space → device.description="AetherSDR", and everything
after the space (DAX 1" node.latency=256/48000) is dropped. node.description is derived
from device.description, so it inherits the truncated "AetherSDR".
A reproducible A/B with pactl (the exact argv the code emits), reading back via pw-cli:
The native RX path (PipeWireNativeRxSource.cpp) sets PW_KEY_NODE_DESCRIPTION directly
via the raw API and is unaffected — so on native builds the RX nodes are already named
correctly; this is purely a legacy-fallback (and TX) problem.
Fix direction
Quote the source_properties / sink_properties value so the spaced device.description
(and the trailing node.latency) survive the module-arg split. PR to follow.
Note
DaxIqModel.cpp builds its pactl command the same way (with backslash-escaped spaces, run
via bash -c), so DAX-IQ node descriptions are very likely truncated the same way — separate
follow-up.
Summary
On builds without
libpipewire-0.3dev headers (HAVE_PIPEWIRE_NATIVEoff), DAX audionodes are created via the legacy
pactl module-pipe-source/module-pipe-sinkpath. EveryDAX RX node and the TX node ends up with
node.description = "AetherSDR"— generic andidentical for all of them — so qpwgraph, JACK-via-PipeWire patchbays, WSJT-X and FLDIGI show
no way to tell DAX 1 from DAX 4 from TX. Operators have to pick the generic
pipewiredeviceand hand-route by guesswork.
The TX sink is created via this legacy path even on native builds, so the TX half is
affected on every build.
Environment
Fedora/Nobara/Ubuntu/Arch). Observed on Nobara 43, PipeWire 1.x.
PIPEWIRE_NATIVE_INCLUDEDIRempty inCMakeCache.txt).Evidence (
pw-cli ls Node)Expected:
AetherSDR DAX 1…AetherSDR DAX 4,AetherSDR TX.Root cause
loadPipeSource()passes:But pipewire-pulse's pulse-module argument parser splits the property value on
unescaped whitespace and does not honor the embedded double-quotes for grouping. So the
value is taken only up to the first space →
device.description="AetherSDR", and everythingafter the space (
DAX 1" node.latency=256/48000) is dropped.node.descriptionis derivedfrom
device.description, so it inherits the truncated"AetherSDR".A reproducible A/B with
pactl(the exact argv the code emits), reading back viapw-cli:source_propertiesvalue (as emitted)node.descriptionnode.latencydevice.description="AetherSDR DAX 1" node.latency=256/48000(current)AetherSDRdevice.description=AetherSDR\ DAX\ 1(backslash-escaped)AetherSDR'device.description="AetherSDR DAX 1" node.latency=256/48000'(quoted)AetherSDR DAX 1256/48000Two consequences of the same truncation:
"AetherSDR".node.latency=256/48000hint (the quantum hint from Current DAX Implementation higher latency than SSDR DAX Latency #1008) is orphanedand never applied on these nodes.
The native RX path (
PipeWireNativeRxSource.cpp) setsPW_KEY_NODE_DESCRIPTIONdirectlyvia the raw API and is unaffected — so on native builds the RX nodes are already named
correctly; this is purely a legacy-fallback (and TX) problem.
Fix direction
Quote the
source_properties/sink_propertiesvalue so the spaceddevice.description(and the trailing
node.latency) survive the module-arg split. PR to follow.Note
DaxIqModel.cppbuilds itspactlcommand the same way (with backslash-escaped spaces, runvia
bash -c), so DAX-IQ node descriptions are very likely truncated the same way — separatefollow-up.