在Ubuntu 16.04的系统启动时创建脉冲插座



我正在运行一个docker容器,然后将脉冲服务器环境变量传递给容器。该容器设置为重新启动始终策略。如果" pulseaudio.socket" /tmp 文件夹中不存在,则容器将无法运行。

为了实现我的目标,我将命令"pactl load-module module-native-protocol-unix socket=/tmp/pulseaudio.socket"添加到启动应用程序[通过Searcing启动程序访问的GUI程序]。此命令创建 pulseaudio.socket /tmp 文件夹

中的文件

如果在Docker启动容器之前,创建 pulseaudio.socket.socket.socket 文件。如果Docker在创建 pulseaudio.socket 之前启动容器,则容器无法启动。

要确保在docker启动容器之前始终创建pulseaudio.socket,我将代码"pactl load-module module-native-protocol-unix socket=/tmp/pulseaudio.socket"添加到>/etc/rc.local >。

但将代码添加到/etc/rc.local init.d >中创建 punse> punse> punse-punse-pkdhtxmmr18n tmp 文件夹,而不是文件 pulseaudio.socket

如何确保代替 pulse-pkdhtxmmr18n ,始终创建称为 pulseaudio.socket 的文件?

我的主要目标是在Docker启动或Docker尝试使用RESTART Policy启动一个容器之前,创建/tmp/pulseaudio.socket 文件。

或有任何方法以使Docker服务首先检查是否 pulseaudio.socket文件存在,如果存在,则仅启动 容器?

我该怎么做?

我解决了这样的问题:

我的容器有一个启动应用程序的节点脚本,并且该应用程序需要PulseAudio才能正确运行。因此,这是我的Docker Run命令。注意大胆的代码。那就是我修改的。

上一个命令

sudo docker run --pid=host -dit --restart unless-stopped --env PULSE_SERVER=unix:/tmp/pulseaudio.socket --env PULSE_COOKIE=/home/$USER/pulseaudio.cookie **--volume /tmp/pulseaudio.socket:/tmp/pulseaudio.socket** --volume /home/$USER/pulseaudio.client.conf:/etc/pulse/client.conf --user $(id -u):$(id -g) --privileged --net=host ubuntu bash -c "**node service.js** && tail -F anything"

当前命令

sudo docker run --pid=host -dit --restart unless-stopped --env PULSE_SERVER=unix:/tmp/pulseaudio.socket --env PULSE_COOKIE=/home/$USER/pulseaudio.cookie **--volume /tmp:/tmp** --volume /home/$USER/pulseaudio.client.conf:/etc/pulse/client.conf --user $(id -u):$(id -g) --privileged --net=host ubuntu bash -c "**sh checksocket.sh** && tail -F anything"

在上一个命令中,仅在主机/tmp文件夹中有一个pulseaudio.socket文件时才启动的容器。

现在,当前的工作命令安装 --volume /tmp:/tmp 而不是 --volume /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

此外壳脚本不断检查已安装的/tmp文件夹中的pulseaudio.socket文件,如果存在,则仅启动我的节点服务。

以这种方式,每当我重新启动机器时,我的容器总是启动,并且一旦shell脚本检测到 /tmp文件夹中的pulseaudio.socket。

我希望这有助于试图与Docker一起使用PulseAudio的人,以进行声音多路复用或避免"设备或资源繁忙"错误(设备或资源繁忙的错误是在您将Docker与Alsa一起使用ALSA作为ALSA直接捕获的错误在主机上的声卡)。让我知道是否有人需要更多帮助

最新更新