Pulseaudio system mode

Автор kID, 26 марта 2017, 12:09:40

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

kID

Здравствуйте
Столкнулся с такой проблемкой (или мое недопонимание вопроса)
Хочу запустить pulseaudio в общесистемном режиме (организация музыкального центра)
Судя по документации если установить
system-instance = yes   pulseaudio должен запускаться по требованию клиентов запущенных от имени любого пользователя (включая root)
Однако после данной настройки pulseaudio перестает запускаться как при запросе от клиента в сессии обычного пользователя и не появляется такой возможности при запуске клиента от root.

Если я пытаюсь запустить от имени root  pulseaudio -- system, то он запускается и становится доступен всем, независимо от состояния опции  system-instance (daemon.conf)
В настоящее время я его запускаю создав файлик
/etc/systemd/system/pulseaudio.service

Открыть содержимое (спойлер)
[Unit]
Description=PulseAudio Daemon

[Install]
WantedBy=multi-user.target

[Service]
Type=simple
PrivateTmp=true
ExecStart=/usr/bin/pulseaudio --system
[свернуть]

получая pulseaudio работающий в общесистемном режиме, однако мне кажется,  что так не было задумано.

Так же при этом сервисы запускаемые до пульсы не могут получить устройство воспроизведения и отваливаются с ошибкой. 

kID

Набаловался я с системным режимом и поскольку его не рекомендуют, решил запускать все в отдельном сеансе.
Вот таким образом:
Через systemd запускаю сервис (music.service) который уже из под юзеровского аккаунта вызывает скрипт и оттуда стартует все мне необходимое
Открыть содержимое (спойлер)
music.service
[Unit]
Description=Запуск музыкальных сервисов
After=sound.target
Requires=avahi-daemon.service
After=avahi-daemon.service
[Service]
Type=simple
ExecStart=/home/yura/music.sh
User=yura
[Install]
WantedBy=multi-user.target

music.sh
#!/bin/bash
/usr/bin/squeezelite  -o pulse -z
/usr/bin/shairport-sync  -c etc/shairport-sync.conf
[свернуть]
Все запускается и работает
Active: active (running) since Sat 2017-04-01 11:18:30 CEST; 32min ago
Main PID: 724 (music.sh)
   CGroup: /system.slice/music.service
           ├─724 /bin/bash /home/yura/music.sh
           ├─874 /usr/bin/squeezelite -o pulse -z
           ├─875 /usr/bin/shairport-sync -c etc/shairport-sync.conf
           └─882 /usr/bin/pulseaudio --start --log-target=syslog

Включая bluetooth подключение и стриминг с сервера из MPD  через pulseaudio
Учитывая показания top все работает под указанным пользователем.
Однако если я логинюсь под этим пользователем через ssh то
любые попытки достучаться до этого пульса безрезультатны. Он не видит ни одного sink-inputs, отсутствуют sinks, cards.
При попытке  запустить из под этого пользователя что то музыкальное невозможно.
Однако если сделать pulseaudio -k, то сразу освобождаются все исчезнувшие ресурсы и при ручном запуске music.sh все работает в согласии с другим софтом.
Пытался ставить задержки перед загрузкой, в скрипте music.sh вначале проигрывать звук, затем убивать pulseaudio и после запускать основные программы - не помогает.
Чего посоветуете.
Debian jessie. Pulseaudio из комплектного репозитория





kID

Разобрался.  :P
Запуская сервис music.service - systemd хоть и даунгрэйдит пользователя до указанного в секции [Service] User=
и указанный пользователь в дальнейшем может грохнуть форкнутые процессы, однако эти процессы в окружении system
Т.е  большая часть ресурсов,  такие как сокеты или файлы состояния для этого процесса будут недоступны (то что находится в директории /home/user).
Для того чтобы все заработало надо делать это из под залогинившегося пользователя.
systemd позволяет выполнить вход пользователя автоматически loginctl enable-linger username при этом
сам сервис надо переложить в папку ~/.config/systemd/user
и активировать его systemctl --user enable music.service
После этого все загружается и работает как надо.
Как  бы оказалось что pulseaudio не причем :)