Создайте сокет pulseaudio при системном запуске в Ubuntu 16.04

Я выполняю контейнер докера, и я передаю импульсную переменную серверной среды своему контейнеру. Контейнер установлен всегда перезапускать политику. Контейнеру не удается работать, если "pulseaudio.socket" не присутствует в/tmp папке.

Таким образом для достижения моей цели я добавил команду "pactl load-module module-native-protocol-unix socket=/tmp/pulseaudio.socket" запускать приложения [программа GUI, к которой получают доступ путем поиска программ запуска]. Эта команда создает pulseaudio.socket файл в/tmp папке

Этот метод работает большую часть времени, если pulseaudio.socket файл создается, прежде чем докер запускает контейнер. Если докер запускает контейнер, прежде чем pulseaudio.socket будет создан, контейнеру не удается запуститься.

Для проверки pulseaudio.socket всегда создается, прежде чем докер запускает контейнер, я добавил код "pactl load-module module-native-protocol-unix socket=/tmp/pulseaudio.socket" к/etc/rc.local и также попробованный для добавления его к init.d.

Но добавление кода к/etc/rc.local или init.d создает импульсную-PKdhtXMmr18n папку в/tmp папке вместо файла pulseaudio.socket

Как я удостоверяюсь, что вместо импульса-PKdhtXMmr18n, файл, названный pulseaudio.socket, всегда создается?

Моя основная цель состоит в том, чтобы создать/tmp/pulseaudio.socket файл, прежде чем докер запустит или прежде чем докер попытается запустить контейнер с политики перезапуска.

Как я делаю это?

0
задан 5 March 2019 в 21:18

1 ответ

Я решил вопрос как это:

Мой контейнер имеет сценарий узла, который запускает приложение, и для этого приложения нужен pulseaudio для выполнения правильно. Таким образом, вот моя команда выполнения докера. Заметьте код полужирным. Это - то, что я изменил.

Предыдущая команда

докер sudo работает - pid=host - дит - перезапускает, если - не остановился - ENV PULSE_SERVER=unix:/tmp/pulseaudio.socket - ENV PULSE_COOKIE =/home/$USER/pulseaudio.cookie - объем/tmp/pulseaudio.socket:/tmp/pulseaudio.socket - объем/home/$USER/pulseaudio.client.conf:/etc/pulse/client.conf - пользовательский $ (идентификатор-u): $ (идентификатор-g) - привилегированный - net=host удар человечности-c "узел service.js && хвост-F что-либо"

Текущая команда

докер sudo работает - pid=host - дит - перезапускает, если - не остановился - ENV PULSE_SERVER=unix:/tmp/pulseaudio.socket - ENV PULSE_COOKIE =/home/$USER/pulseaudio.cookie - объем/tmp:/tmp - объем/home/$USER/pulseaudio.client.conf:/etc/pulse/client.conf - пользовательский $ (идентификатор-u): $ (идентификатор-g) - привилегированный - net=host удар человечности-c "sh checksocket.sh && хвост-F что-либо"

В предыдущей команде раньше запускался контейнер, только если был pulseaudio.socket файл в/tmp папке хоста.

Теперь текущая рабочая команда монтируется - объем/tmp:/tmp вместо - объем/tmp/pulseaudio.socket:/tmp/pulseaudio.socket

и sh checksocket.sh команда выполняет checksocket.sh файл, который я создал в контейнере.

Вот код моего checksocket.sh файла:

#!/bin/bash
while sleep 0.5;
do if [ -e /tmp/pulseaudio.socket ]
then
value="node service.js"
exec $value
break
fi
done

Этот сценарий оболочки продолжает проверять на pulseaudio.socket файл в смонтированной/tmp папке и если это существует затем, только это запускает мой сервис узла.

Таким образом мой контейнер всегда запускается каждый раз, когда я перезагружаю свою машину, и сервис узла запускается, после того как сценарий оболочки обнаруживает pulseaudio.socket в/tmp папке.

Я надеюсь, что это помогает кому-то, кто пытается использовать pulseaudio с докером в целях звукового мультиплексирования или избежать “устройства или ресурса занятая” ошибка (устройство или ресурс, занятая ошибка прибывает при использовании докера с alsa, поскольку alsa непосредственно получает звуковую карту) на хост-машине. Сообщите мне, нуждается ли кто-либо в большем количестве помощи

0
ответ дан 26 October 2019 в 02:37

Другие вопросы по тегам:

Похожие вопросы: