Требуется подключить акустику к некоторому устройству в сети с linux на борту.
В данном случае Arch, а значит конфигурация стандартная, как и задумано разработчиками ПО.
Для начала ставим необходимые пакеты:
pacman -S nss-mdns avahi pulseaudio pulseaudio-zeroconf alsa sox
sox для удобства запуска воспроизведения, так же это можно делать через pacmd
Что бы всё взлетело удалённо добавляем пользователя в группу:
usermod -a -G audio youruser
Запускаем и проверяем:
pulseaudio -D
play some_file.wav
Если всё хорошо, вы должны услышать воспроизводимый файл.
Теперь pulseaudio должен научиться работать по сети и публиковать информацию через zeroconf.
Для этого редактируем файл
/etc/pulse/default.pa:
load-module module-native-protocol-tcp auth-ip-acl=192.168.0.0/24 auth-anonymous=1
load-module module-zeroconf-publish
Тем самым мы позволяем пользователям домашней сети стримить аудио на устройство.
На клиентах тоже следует разрешить zeroconf — в том же файле:
load-module module-zeroconf-discover
Далее всё это нужно повесить на автозагрузку.
В arch для pulse указан домашний каталог /var/run/pulse, что вполне верно. Только его там нет и это tmpfs (создавать руками бесполезно), поэтому воспользуемся tmpfile.d
Создаём файл
/usr/lib/tmpfiles.d/pulse.conf
с содержимым:D /var/run/pulse 0775 pulse pulse
Так же создадим демона на systemd (
/etc/systemd/system/pulseaudio.service
):
[Unit]
Description=Pulseaudio sound server
After=avahi-daemon.service network.target
[Service]
#Type=dbus
#BusName=org.pulseaudio.Server
User=pulse
ExecStart=/usr/bin/pulseaudio --log-target=journal
ExecReload=/usr/bin/pulseaudio --kill
Restart=always
RestartSeq=3sec
[Install]
WantedBy=multi-user.target
Теперь avahi - об этом ни кто не пишет, но без конфигурации сервиса чуда не происходит. А именно нужно создать файл /etc/avahi/services/pulseaudio.service: <?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">%h</name>
<service>
<type>_pulse-server._tcp</type>
<port>695</port>
</service>
</service-group>
Порт можно подсмотреть через
netstat -tulpn | grep pulse
В файле /etc/nsswitch.conf в конце строки hosts добавить mdns.
У меня используется исключительно ipv6 в связи с этим моя строка выглядит так:
hosts: files mymachines resolve [!UNAVAIL=return] dns myhostname mdns6
В /etc/avahi/avahi-daemon.conf ipv4 так же отключен.
При использовании 4 и 6 ревизий устройства будут дублироваться.
Всё это неплохо бы обвязать DLNA.
В данном необходим media render, его роль может выполнить
mdp
, но он не умеет искаробки и для этого ещё нужен upmpdcli
Для него тоже нужен домашний каталог Создаём
/etc/tmpfiles.d/upmpdcli.conf
D /run/upmpdcli 0775 upmpdcli upmpdcli
(не забудьте прописать в /etc/passwd)
И в заключении как обычно включаем:
systemctl enable avahi
systemctl start avahi
systemctl enable pulseaudio
systemctl start
pulseaudio