Порой иногда нужно запускать Pulseaudio через systemd как сервис в Ubuntu. Это может быть необходимо по разным причинам.
Например, вы хотите сделать музыкальный сервер. Или как в моем случае, у меня многопользовательская система, и я запускаю иногда игры, под разными пользователям. Steam у меня работает под отдельным пользователем. И хотелось бы, чтобы звук из игры со steam и audacious работали одновременно и проигрывали музыку.
По умолчанию в Ubuntu pulseaudio запускается, от лица пользователя, когда ему потребуется звук, и чтобы одновременно играть в игры со steam и слушать музыку в audacious, нужно запустить Pulseaudio в качестве сервиса, либо прокинуть сокет для второго пользователя.
На официальном сайте, говорят что запускать pulseaudio в качестве сервиса, не очень удачная идея . Пишут, что все пользователи системы получат доступ к звуковой карте и микрофону (мне как раз это и нужно), и то что все смогут зафлудить папку /var.
Также говорят, что будет высокая нагрузка на CPU, из-за того что не доступен shared memory. Я если честно не увидел этой высокой нагрузки в system mode. Имхо, больше грузит хром, когда проигрывает музыку, или видео на ютубе. Загрузка Pulseaudio CPU действительно есть, у меня она порядка 4%, а хрома 25%. Причем она одинаковая что в system wide mode, что в обычном.
Flatpak не работает с pulseaudio в system wide mode. Тикет на Github .
Способ первый.
Если вы хотите просто передать звук второму пользователю, например, запустить программу через kdesudo, то отлично подойдет данный способ, и не нужно будет включать system wide mode у pulseaudio.
Создайте файл
nano /etc/pulse/default.pa.d/pulse-socket.pa
_x000D_load-module module-native-protocol-unix auth-anonymous=1 socket=/tmp/pulse-socketНа другом пользователе в файле
nano /home/otheruser/.config/pulse/client.conf
_x000D_default-server = unix:/tmp/pulse-socketСпособ второй.
Если первый способ вам не подходит, или вы решили запускать pulseaudio в качестве сервиса, то вот что нужно сделать.
1) Сделайте бэкап папке /etc/pulse
2) Немного о конфигах
Я очень долго не мог понять, почему, когда я правлю конфиги, ничего не работает. Оказалось, что за работу в качестве клиента и сервиса у Pulseaudio, отвечают разные конфиги, и я правил не тот конфиг. Я правил конфиги от клиента, а запускал как сервис, и удивлялся почему ничего не работает.
Конфиги, которые отвечают за сервис — daemon.conf, system.pa
Конфиги, которые отвечают за работу клиента — client.conf, default.pa
3) Исправьте конфиги в /etc/pulse
В client.conf указать:
_x000D_autospawn = noЭто запретит автозапуск от имени пользователя.
В daemon.conf указать:
_x000D_daemonize = yes_x000D_allow-module-loading = no_x000D_allow-exit = no_x000D_local-server-type = system_x000D_enable-shm = no_x000D_log-target = journal_x000D_flat-volumes = no_x000D__x000D_default-sample-format = s16le_x000D_default-sample-rate = 48000_x000D_default-sample-channels = 2_x000D__x000D_deferred-volume-safety-margin-usec = 1_x000D_Параметры default-sample-format, default-sample-rate, default-sample-channels выставить индивидуально в зависимости от звуковой карты.
Отредактировать файл system.pa. Я привожу весь свой конфиг, т.к. стандартный конфиг отличается.
_x000D_#!/usr/bin/pulseaudio -nF_x000D_#_x000D_# This file is part of PulseAudio._x000D_#_x000D_# PulseAudio is free software; you can redistribute it and/or modify it_x000D_# under the terms of the GNU Lesser General Public License as published by_x000D_# the Free Software Foundation; either version 2 of the License, or_x000D_# (at your option) any later version._x000D_#_x000D_# PulseAudio is distributed in the hope that it will be useful, but_x000D_# WITHOUT ANY WARRANTY; without even the implied warranty of_x000D_# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU_x000D_# General Public License for more details._x000D_#_x000D_# You should have received a copy of the GNU Lesser General Public License_x000D_# along with PulseAudio; if not, see <http://www.gnu.org/licenses/>._x000D__x000D_# This startup script is used only if PulseAudio is started in system_x000D_# mode._x000D__x000D__x000D_### Should be after module-*-restore but before module-*-detect_x000D_load-module module-switch-on-port-available_x000D__x000D_### Use hot-plugged devices like Bluetooth or USB automatically (LP: #1702794)_x000D_.ifexists module-switch-on-connect.so_x000D_load-module module-switch-on-connect_x000D_.endif_x000D__x000D__x000D_### Automatically load driver modules depending on the hardware available_x000D_.ifexists module-udev-detect.so_x000D_load-module module-udev-detect_x000D_.else_x000D_### Use the static hardware detection module (for systems that lack udev/hal support)_x000D_load-module module-detect_x000D_.endif_x000D__x000D_### Load several protocols_x000D_.ifexists module-esound-protocol-unix.so_x000D_load-module module-esound-protocol-unix_x000D_.endif_x000D_load-module module-native-protocol-unix_x000D__x000D__x000D_### Automatically restore the volume of streams and devices_x000D_load-module module-stream-restore_x000D_load-module module-device-restore_x000D_#load-module module-card-restore_x000D__x000D__x000D_### Automatically load driver modules for Bluetooth hardware_x000D_.ifexists module-bluetooth-policy.so_x000D_load-module module-bluetooth-policy_x000D_.endif_x000D__x000D_.ifexists module-bluetooth-discover.so_x000D_load-module module-bluetooth-discover_x000D_.endif_x000D__x000D__x000D_### Automatically restore the default sink/source when changed by the user_x000D_### during runtime_x000D_### NOTE: This should be loaded as early as possible so that subsequent modules_x000D_### that look up the default sink/source get the right value_x000D_load-module module-default-device-restore_x000D__x000D_### Automatically move streams to the default sink if the sink they are_x000D_### connected to dies, similar for sources_x000D_load-module module-rescue-streams_x000D__x000D_### Make sure we always have a sink around, even if it is a null sink._x000D_load-module module-always-sink_x000D__x000D_### Automatically suspend sinks/sources that become idle for too long_x000D_load-module module-suspend-on-idle_x000D__x000D_### Enable positioned event sounds_x000D_load-module module-position-event-sounds_x000D__x000D__x000D_### Modules to allow autoloading of filters (such as echo cancellation)_x000D_### on demand. module-filter-heuristics tries to determine what filters_x000D_### make sense, and module-filter-apply does the heavy-lifting of_x000D_### loading modules and rerouting streams._x000D_load-module module-filter-heuristics_x000D_load-module module-filter-apply_x000D__x000D__x000D_# Remove microphone noise_x000D_load-module module-echo-cancel aec_method=webrtc format=s16le rate=48000 channels=2_x000D__x000D__x000D_### Make some devices default_x000D_set-default-sink alsa_output.pci-0000_00_1b.0.analog-stereo_x000D_set-default-source alsa_input.pci-0000_00_1b.0.analog-stereo.echo-cancelОчень важным является set-default-sink и set-default-source. У вас они могут отличатся в зависимости от звуковой карты. Чтобы узнать конкретный sink(выход) и source(вход) нужно выполнить команды
_x000D_pacmd list-sinks_x000D_pacmd list-sourcesПараметр load-module module-echo-cancel aec_method=webrtc format=s16le rate=48000 channels=2 Отключает шум микрофона, при записи.
Параметр load-module module-switch-on-connect позволяет, при подключении наушников переводить звук на них автоматически.
4) Создайте systemd конфиг
nano /lib/systemd/system/pulseaudio.service
_x000D_[Unit]_x000D_Description=PulseAudio system server_x000D_After=syslog.target local-fs.target network.target_x000D__x000D_[Service]_x000D_Type=simple_x000D_ExecStart=/usr/bin/pulseaudio --daemonize=no --system --disallow-exit --disable-shm --disallow-module-loading --log-target=journal_x000D_ExecReload=/bin/kill -HUP $MAINPID_x000D__x000D__x000D_[Install]_x000D_WantedBy=multi-user.targetВключите автозапуск pulseaudio при старте системы:
_x000D_systemctl enable pulseaudio.service_x000D_systemctm start pulseaudio.serviceВсе! Ваш Pulseaudio сервер готов
Материалы: