无法从 www-data 用户访问蓝牙扬声器

无法从 www-data 用户访问蓝牙扬声器

我正在尝试从 Raspberry Pi 4 上托管的网络服务器在蓝牙扬声器上启动音频文件。

我将 PulseAudio 与该pulseaudio-module-bluetooth模块一起使用。

我可以通过该帐户在蓝牙扬声器上播放音乐pi,但我没有成功使其与www-data用户帐户(网络服务器使用的帐户)一起使用。

这是当我从两个帐户列出 PulseAudio 设备时看到的内容:

在此输入图像描述 (蓝牙设备在 pi 帐户中可见,但在 www-data 帐户中不可见)

在深入研究问题时,我发现一些模块是为 加载的pi,但不是为该www-data帐户加载的。

在此输入图像描述

我尝试手动加载它们,但出现此错误:

raspberrypi pulseaudio[384]: E: [pulseaudio] module.c: Module "module-bluez5-discover" should be loaded once at most. Refusing to load.
raspberrypi pulseaudio[384]: E: [pulseaudio] module.c: Failed to load module "module-bluetooth-discover" (argument: ""): initialization failed.

这是有道理的,因为该模块已经为 pi 帐户加载了。

我不明白加载的模块有何不同,因为系统上只有一个 PulseAudio 服务实例在运行,对吧?

不管怎样,也许模块上的这种差异与我的问题无关,但我发现提及它很有用。


服务配置如下所示:

[Unit]
Description=PulseAudio Daemon

[Install]
WantedBy=multi-user.target

[Service]
Type=simple
PrivateTmp=true
ExecStart=/usr/bin/pulseaudio --system --realtime --disallow-exit --no-cpu-limit

我做了什么来尝试解决这个问题:

  • 我添加到www-data以下组中:audiobluetoothpulsepulse-access
  • 我定义了一个$HOME文件夹,www-data并将该/home/pi/.config/pulse文件夹复制到该www-data $HOME文件夹​​中。

你有什么想法让它发挥作用吗?

谢谢

答案1

我认为主要问题是两个用户都试图控制声卡/声卡驱动程序。这是因为默认的 PulseAudio 服务只是尝试创建主守护程序。

根据我之前的评论,Arch Linux wiki 有一篇关于允许多个用户同时使用PulseAudio

上例的目标是让一个用户创建主守护进程,其他 PA 用户连接到该守护进程,从而共享一个主会话。这样看,您有一个人拥有一间带扬声器的音乐工作室 - 而其他人则租用它通过这些扬声器播放音乐。但必须有人来控制设置。 PA 可以处理相当多的客户端,它也可以基于 TCP/UDP,并充当跨多个 Raspberry Pi 的 Sonos 设置;)

为了解决这个多租户问题,为pi用户创建一个脉冲配置:(如果您已经有default.pain ,请跳过~/.config/pulse/

sudo cp /etc/pulse/default.pa  ~/.config/pulse/default.pa
sudo chown pi:pi ~/.config/pulse/default.pa

通过将以下内容添加到配置底部来修改pi脉冲配置:~/.config/pulse/default.pa

load-module module-native-protocol-unix auth-anonymous=1 socket=/tmp/pulse-socket

www-data主目录中,创建/编辑~/.config/pulse/client.conf并添加以下内容:

default-server = unix:/tmp/pulse-socket

这将指示pi在 上创建一个 PulseAudio 套接字/tmp/pulse-socket,并依次指示www-data连接到该套接字而不是生成一个新套接字。

请注意,套接字需要被两个用户访问,并且在您的情况下,它/tmp通常是世界可写的。这可能太多了,在这种情况下,将套接字移动到只有两个用户可以访问的地方。

相关内容