debian.org / О Debian Где взять Debian Поддержка Уголок разработчика Новости Wiki

Автор Тема: Pulseaudio system mode  (Прочитано 888 раз)

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

Оффлайн kID

  • Topic Author
  • Сообщений: 8
Pulseaudio system mode
« : 26 Март 2017, 12:09:40 »
Здравствуйте
Столкнулся с такой проблемкой (или мое недопонимание вопроса)
Хочу запустить 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

  • Topic Author
  • Сообщений: 8
Re: Pulseaudio system mode
« Ответ #1 : 01 Апрель 2017, 13:10:30 »
Набаловался я с системным режимом и поскольку его не рекомендуют, решил запускать все в отдельном сеансе.
Вот таким образом:
Через 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

  • Topic Author
  • Сообщений: 8
Re: Pulseaudio system mode
« Ответ #2 : 11 Апрель 2017, 17:10:54 »
Разобрался.  :P
Запуская сервис music.service - systemd хоть и даунгрэйдит пользователя до указанного в секции [Service] User=
и указанный пользователь в дальнейшем может грохнуть форкнутые процессы, однако эти процессы в окружении system
Т.е  большая часть ресурсов,  такие как сокеты или файлы состояния для этого процесса будут недоступны (то что находится в директории /home/user).
Для того чтобы все заработало надо делать это из под залогинившегося пользователя.
systemd позволяет выполнить вход пользователя автоматически loginctl enable-linger username при этом
сам сервис надо переложить в папку ~/.config/systemd/user
и активировать его systemctl --user enable music.service
После этого все загружается и работает как надо.
Как  бы оказалось что pulseaudio не причем :)
 

Теги: