[pulseaudio-discuss] Networking and volume control

Matt Garman matthew.garman at gmail.com
Fri Nov 6 16:45:37 UTC 2020

I posted about this earlier, but now am facing a different problem.
Recap from original post:

I have PulseAudio set up on a Raspberry Pi as a sound server.  The RPi
is connected to a USB DAC, which has hardware volume control
capabilities.  This is what I have in my /etc/pulse/default.pa:

load-module module-alsa-sink control='D70 '

Note: I am deliberately NOT loading module-udev-detect, otherwise
PulseAudio reverts to software volume control.  (The device is a
Topping D70, and the space between the zero and the quote above is

Now, on the client, if I do this:

# PULSE_SERVER=rpi_server_hostname pavucontrol

Everything works as expected.  That is, I have an output device
("D70") whose hardware volume I can control with pavucontrol.  So I
went ahead and put "default-server = rpi_server_hostname" in my
~/.pulse/client.conf.  Then all my apps route sound to the RPi.

But then I realized that config makes the RPi the *only* sound device
I can use on my PC.  Sometimes I plug in other devices (e.g. webcam,
headphones) directly to the PC, and those get ignored with the
"default-server" config in place.

So it looks like one solution is to remove the "default-server" config
on the client, and use zeroconf/avahi so that the client can
automatically discover the RPi server as another output device, and
co-exist with local devices.

I set this up, basically by loading the "module-zeroconf-discover" on
the client PC, loading "module-zeroconf-publish" on the RPi server,
and running the avahi daemon on the server.  With this in place, I do
see the RPi server showing up as an output device on my PC.  However,
it doesn't work: I can't get any sound to come from it.  Furthermore,
the volume control doesn't have any effect either.  (I can play sounds
via MPD running locally on the RPI server.  I can adjust the volume in
an MPD client.  I can adjust volume from my PC using pavucontrol only
when using PULSE_SERVER or default-server, but not with the zeroconf
config I'm trying to get working.)

My suspicion is the zeroconf is only working enough to advertise the
device as available, but not advertising enough info to actually make
the device usable.

My other thought is that, given how I had to explicitly configure the
control on the server side, maybe I need to do a similar explicit
config on the client side?

I don't know if this helps, but maybe it offers a clue: on the client
PC, running "pactl list sinks" with and without being prefixed by

$ PULSE_SERVER=dietpi-music pactl list sinks
Sink #0
        State: RUNNING
        Name: alsa_output.default
        Description: D70
        Driver: module-alsa-sink.c
        Sample Specification: s32le 2ch 44100Hz
        Channel Map: front-left,front-right
        Owner Module: 5
        Mute: no
        Volume: front-left: 5727 /   9% / -63.51 dB,   front-right:
5727 /   9% / -63.51 dB
                balance 0.00
        Base Volume: 65536 / 100% / 0.00 dB
        Monitor Source: alsa_output.default.monitor
        Latency: 22567 usec, configured 24988 usec
                alsa.resolution_bits = "32"
                device.api = "alsa"
                device.class = "sound"
                alsa.class = "generic"
                alsa.subclass = "generic-mix"
                alsa.name = "USB Audio"
                alsa.id = "USB Audio"
                alsa.subdevice = "0"
                alsa.subdevice_name = "subdevice #0"
                alsa.device = "0"
                alsa.card = "1"
                alsa.card_name = "D70"
                alsa.long_card_name = "Topping D70 at
usb-0000:01:00.0-1.2, high speed"
                alsa.driver_name = "snd_usb_audio"
                device.bus_path =
                sysfs.path =
                udev.id = "usb-Topping_D70-00"
                device.bus = "usb"
                device.vendor.id = "152a"
                device.vendor.name = "Thesycon Systemsoftware & Consulting GmbH"
                device.product.id = "8750"
                device.product.name = "D70"
                device.serial = "Topping_D70"
                device.string = "default"
                device.buffering.buffer_size = "705600"
                device.buffering.fragment_size = "352800"
                device.access_mode = "mmap+timer"
                device.description = "D70"
                alsa.mixer_name = "USB Mixer"
                alsa.components = "USB152a:8750"
                device.icon_name = "audio-card-usb"

Versus running without the PULSE_SERVER environment:

$ pactl list sinks
Sink #0
        (snipped for brevity - my HDMI monitor, which has sound output

Sink #1
        State: SUSPENDED
        Name: tunnel.dietpi-music.local.alsa_output.default
        Description: D70 on root at dietpi-music
        Driver: module-tunnel.c
        Sample Specification: s32le 2ch 44100Hz
        Channel Map: front-left,front-right
        Owner Module: 26
        Mute: no
        Volume: front-left: 7575 /  12%,   front-right: 7575 /  12%
                balance 0.00
        Base Volume: 65536 / 100%
        Monitor Source: tunnel.dietpi-music.local.alsa_output.default.monitor
        Latency: 0 usec, configured 0 usec
                device.description = "D70 on root at dietpi-music"
                tunnel.remote.server = "[]:4713"
                tunnel.remote.sink = "alsa_output.default"
                device.icon_name = "computer"
                tunnel.remote_version = "32"
                tunnel.remote.user = "root"
                tunnel.remote.fqdn = "dietpi-music"
                tunnel.remote.description = "D70"

Thank you for any help or hints!

More information about the pulseaudio-discuss mailing list