Pulseaudio — звуковой сервер
Было бы очень удобно, если бы дома была распределенная звуковая система, одна пара колонок на всю квартиру, а всякие ПК и ноутбуки могли на нее отправлять свои звуковые потоки, так можно избавится от кучи проводов идущих от ПК, это добавило бы мобильности к ноутбуку, уже не пришлось носить по дому мобильные колонки для ноутбука, т.к зачастую ноутбуки оборудованы отвратительным звуком. А еще можно было бы усложнить и поместить по паре акустических систем в разных комнатах и при переходе между комнатами переключать звук между ними, но как этого достичь? Ответ лежит на поверхности — уже давно в Ubuntu и Debian и других дистрибутивах установлен звуковой сервер Pulseaudio, в его функции заложена такая замечательная возможность передачи звука через локальную сеть.
Что необходимо для звукового сервера?
- ПК который будет выполнять роль звукового сервера
- Звуковые карты для каждой акустической системы
В качестве ПК прекрасно подойдет домашний сервер с утановленной ОС Debian.
По умолчанию пакет не идет в минимальной установке Debian, поэтому производим его установку:
1 | apt install pulseaudio pulseaudio-module-zeroconf |
Стоит отметить что Pulseaudio может работать как в служба пользователя так и как системная служба.
В первом режиме служба не запускается пока пользователь не зайдет в систему, во втором служба запущена всегда.
Pulseaudio — переводим в системный режим
Переходим в каталог
1 | cd /etc/pulse/ |
Там находится четыре файла
1 2 | ls * client.conf daemon.conf default.pa system.pa |
client.conf — настройки для клиентской части звукового сервера.
daemon.conf — настройки Pulseaudio в режиме службы
default.pa — настройка модулей в режиме пользователя
system.pa — настрока модулей в системном режиме
В звуковом сервере нас интересуют файлы daemon.conf и system.pa
Открыаем файл daemon.conf
#Включаем режим сервиса
1 2 3 4 5 6 7 | #Отключить загрузку модулей пользователем allow-module-loading = no #Запретить запросы пользователя allow-exit = no cpu-limit = no #Приоретет поцесса - устанавливаем наивысший high-priority = yes |
В файл system.pa добавляем:
1 2 3 | #Загружаем модуль для доступа по сети и настраиваем доступ из локальной сети load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.0.0/16 load-module module-zeroconf-publish |
запускаем звуковой сервер Pulseaudio, напоминая что настройка ведется из под пользователя root:
1 | pulseaudio --system -D |
Клиенты для Pulseaudio
Проверим проигрывание звука через клиент, в качестве клиента выступает ПК с установленной убунту 16.04
Устанавливаю на клиенте pavucontrol:
1 | apt install pavucontrol -y |
Запускаем pavucontrol из системного меню
В командной строке вводим команду на создание туннеля к звуковому серверу:
1 | pactl load-module module-tunnel-sink-new server=192.168.2.1 sink_name=Remote channels=2 rate=44100 |
в списке устройств pavucontrol появится еще одно устройство которое соответствует нашему туннелю, если его выбрать, то должен звук пойти через него.
Для постоянного подключения добавляем строку
1 | echo "load-module module-tunnel-sink-new server=192.168.2.1 sink_name=Remote channels=2 rate=44100" >> /etc/pulse/default.pa |
Для управления громкостью подключаемся к удаленному серверу
1 | PULSE_SERVER=192.168.1.25 pavucontrol |
Тут же можно переключать звуковые карты для каждого звукового потока
Теперь нам необходимо создать сервис для pulseaudio
Создаем файл:
1 | touch /etc/systemd/system/pulseaudio.service |
Открываем и добавляем строки:
1 2 3 4 5 6 7 8 9 10 11 12 | nano /etc/systemd/system/pulseaudio.service [Unit] Description=PulseAudio Daemon [Install] WantedBy=multi-user.target [Service] Type=simple PrivateTmp=true ExecStart=/usr/bin/pulseaudio --system |
Перегружаем службы, добавляем в автозагрузку и запускаем:
1 2 3 | systemctl daemon-reload systemctl enable pulseaudio systemctl start pulseaudio |
Проверяем службу
1 2 3 4 5 6 7 8 9 10 11 12 13 | service pulseaudio status ● pulseaudio.service - PulseAudio Daemon Loaded: loaded (/etc/systemd/system/pulseaudio.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2018-03-12 21:59:48 MSK; 2s ago Main PID: 1807 (pulseaudio) Tasks: 4 (limit: 4915) CGroup: /system.slice/pulseaudio.service └─1807 /usr/bin/pulseaudio --system --realtime мар 12 21:59:48 router pulseaudio[1807]: N: [pulseaudio] main.c: Running in system mode, forcibly disabling SHM mode. мар 12 21:59:48 router pulseaudio[1807]: N: [pulseaudio] main.c: Running in system mode, forcibly disabling exit idle time. мар 12 21:59:48 router pulseaudio[1807]: W: [pulseaudio] main.c: OK, so you are running PA in system mode. Please make sure that you actuall мар 12 21:59:48 router pulseaudio[1807]: W: [pulseaudio] main.c: Please read http://www.freedesktop.org/wiki/Software/PulseAudio/Documentati |
При каждом перезапуске сервера туннель пропадает на клиенте, поэтому перезапускаем pulseaudio на клиенте, должен появиться туннель в списке устройств в pavucontrol
1 2 | pulseaudio -k pulseaudio -D |
В процессе настройки столкнулся с особенностью — по умолчанию после перезагрузки звук отключен.
Проблема решилась установки пакета alsa-utils и сохранения настроек с помощью команды alsactl store
1 2 | apt install alsa-utils -y alsactl store |
Управлять мастер-уровнем можно с помощью команды alsamixer
P.S. После каждой перезагрузки сервера необходимо перезапускать Pulseaudio на клиенте или просто отправлять его в перезагрузку.