Pulseaudio ignores any files under /etc/pulse/default.pa.d/ even though according to /etc/pulse/default.pa this shouldn't be the case:
--8<---------------cut here---------------start------------->8--- $ cat /etc/pulse/default.pa #!/gnu/store/5nfmdrmm6zp4c3a5g5w5gwp7z39dr09n-pulseaudio-15.0/bin/pulseaudio -nF # # This file is part of PulseAudio. # # PulseAudio is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # PulseAudio is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with PulseAudio; if not, see <http://www.gnu.org/licenses/>. # This startup script is used only if PulseAudio is started per-user # (i.e. not in system mode) .fail ### Automatically restore the volume of streams and devices load-module module-device-restore load-module module-stream-restore load-module module-card-restore ### Automatically augment property information from .desktop files ### stored in /usr/share/application load-module module-augment-properties ### Should be after module-*-restore but before module-*-detect load-module module-switch-on-port-available ### Load audio drivers statically ### (it's probably better to not load these drivers manually, but instead ### use module-udev-detect -- see below -- for doing this automatically) #load-module module-alsa-sink #load-module module-alsa-source device=hw:1,0 #load-module module-null-sink #load-module module-pipe-sink ### Automatically load driver modules depending on the hardware available .ifexists module-udev-detect.so load-module module-udev-detect .else ### Use the static hardware detection module (for systems that lack udev support) load-module module-detect .endif ### Automatically connect sink and source if JACK server is present .ifexists module-jackdbus-detect.so .nofail load-module module-jackdbus-detect channels=2 .fail .endif ### Automatically load driver modules for Bluetooth hardware .ifexists module-bluetooth-policy.so load-module module-bluetooth-policy .endif .ifexists module-bluetooth-discover.so load-module module-bluetooth-discover .endif ### Load several protocols .ifexists module-esound-protocol-unix.so load-module module-esound-protocol-unix .endif load-module module-native-protocol-unix ### Network access (may be configured with paprefs, so leave this commented ### here if you plan to use paprefs) #load-module module-esound-protocol-tcp #load-module module-native-protocol-tcp #load-module module-zeroconf-publish ### Load the RTP receiver module (also configured via paprefs, see above) #load-module module-rtp-recv ### Load the RTP sender module (also configured via paprefs, see above) #load-module module-null-sink sink_name=rtp format=s16be channels=2 rate=44100 sink_properties="device.description='RTP Multicast Sink'" #load-module module-rtp-send source=rtp.monitor ### Automatically restore the default sink/source when changed by the user ### during runtime ### NOTE: This should be loaded as early as possible so that subsequent modules ### that look up the default sink/source get the right value load-module module-default-device-restore ### Make sure we always have a sink around, even if it is a null sink. load-module module-always-sink ### Honour intended role device property load-module module-intended-roles ### Automatically suspend sinks/sources that become idle for too long load-module module-suspend-on-idle ### If autoexit on idle is enabled we want to make sure we only quit ### when no local session needs us anymore. .ifexists module-console-kit.so #load-module module-console-kit .endif .ifexists module-systemd-login.so load-module module-systemd-login .endif ### Enable positioned event sounds load-module module-position-event-sounds ### Cork music/video streams when a phone stream is active load-module module-role-cork ### Modules to allow autoloading of filters (such as echo cancellation) ### on demand. module-filter-heuristics tries to determine what filters ### make sense, and module-filter-apply does the heavy-lifting of ### loading modules and rerouting streams. load-module module-filter-heuristics load-module module-filter-apply ### Make some devices default #set-default-sink output #set-default-source input ### Allow including a default.pa.d directory, which if present, can be used ### for additional configuration snippets. .nofail .include /gnu/store/5nfmdrmm6zp4c3a5g5w5gwp7z39dr09n-pulseaudio-15.0/etc/pulse/default.pa.d ### Added by Guix to include scripts specified in extra-script-files. .nofail .include /etc/pulse/default.pa.d --8<---------------cut here---------------end--------------->8--- >From the snippet above, it can be seen that: 1. The directory /etc/pulse/default.pa.d should be sourced as the file ends with: --8<---------------cut here---------------start------------->8--- ### Added by Guix to include scripts specified in extra-script-files. .nofail .include /etc/pulse/default.pa.d --8<---------------cut here---------------end--------------->8--- Performing a `pulseaudio --dump-conf' reveals that: --8<---------------cut here---------------start------------->8--- $ pulseaudio --dump-conf ### Read from configuration file: /etc/pulse/daemon.conf ### daemonize = no fail = yes high-priority = yes nice-level = -11 realtime-scheduling = yes realtime-priority = 5 allow-module-loading = yes allow-exit = yes use-pid-file = yes system-instance = no local-server-type = user cpu-limit = no enable-shm = yes flat-volumes = no rescue-streams = yes lock-memory = no exit-idle-time = 20 scache-idle-time = 20 dl-search-path = /gnu/store/5nfmdrmm6zp4c3a5g5w5gwp7z39dr09n-pulseaudio-15.0/lib/pulse-15.0/modules default-script-file = /gnu/store/5nfmdrmm6zp4c3a5g5w5gwp7z39dr09n-pulseaudio-15.0/etc/pulse/default.pa load-default-script-file = yes log-target = log-level = notice resample-method = auto avoid-resampling = no enable-remixing = yes remixing-use-all-sink-channels = yes remixing-produce-lfe = no remixing-consume-lfe = no lfe-crossover-freq = 0 default-sample-format = s16le default-sample-rate = 44100 alternate-sample-rate = 48000 default-sample-channels = 2 default-channel-map = front-left,front-right default-fragments = 4 default-fragment-size-msec = 25 enable-deferred-volume = yes deferred-volume-safety-margin-usec = 8000 deferred-volume-extra-delay-usec = 0 shm-size-bytes = 0 log-meta = no log-time = no log-backtrace = 0 rlimit-fsize = -1 rlimit-data = -1 rlimit-stack = -1 rlimit-core = -1 rlimit-rss = -1 rlimit-as = -1 rlimit-nproc = -1 rlimit-nofile = 256 rlimit-memlock = -1 rlimit-locks = -1 rlimit-sigpending = -1 rlimit-msgqueue = -1 rlimit-nice = 31 rlimit-rtprio = 9 rlimit-rttime = 200000 --8<---------------cut here---------------end--------------->8--- The default.pa script that is read is __not__ the one under /etc/pulse/default.pa but the one that comes with pulseaudio package located in /gnu/store which does not contain the line to load /etc/pulse/default.pa.d/ directory. This can be confirmed as the following pactl command outputs shouldn't be empty when used with the configuration snippet below: --8<---------------cut here---------------start------------->8--- $ pactl list modules | grep rtp $ pactl list source-outputs $ env | grep PULSE PULSE_CLIENTCONFIG=/etc/pulse/client.conf PULSE_CONFIG=/etc/pulse/daemon.conf --8<---------------cut here---------------end--------------->8--- Snippet from config.scm: --8<---------------cut here---------------start------------->8--- (modify-services %desktop-services (pulseaudio-service-type config => (pulseaudio-configuration (inherit config) (extra-script-files (list (plain-file "rtp.pa" (string-join (list "load-module module-null-sink sink_name=rtp" "load-module module-rtp-send source=rtp.monitor" "set-default-sink rtp") "\n" 'suffix))))))))) --8<---------------cut here---------------end--------------->8---