Linux

無法從 www-data 使用者訪問藍牙揚聲器

  • March 17, 2021

我正在嘗試從託管在我的 Raspberry Pi 4 上的 Web 伺服器在藍牙揚聲器上啟動音頻文件。

我在pulseaudio-module-bluetooth模組中使用 PulseAudio。

我可以從該帳戶在藍牙揚聲器上播放音樂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文件夾中。

你有什麼想法讓它工作嗎?

謝謝

我認為主要問題是兩個使用者都試圖控制音效卡/聲音驅動程序。這是因為預設的 PulseAudio 服務只是嘗試創建一個主守護程序。

根據我之前的評論,Arch Linux wiki 有一篇關於允許多個使用者同時使用 PulseAudio的好文章。

上述範例的目標是讓一個使用者創建主守護程序,其他 PA 使用者連接到該主守護程序,從而共享一個主會話。這樣看,你有一個人擁有一個帶揚聲器的音樂工作室——而其他人則租用它通過這些揚聲器播放音樂。但是必須有人控制設置。PA 可以處理相當多的客戶端,它也可以基於 TCP/UDP 並充當跨多個 Raspberry Pi 的 Sonos 設置;)

要解決這個多租戶問題,請為pi使用者創建一個脈衝配置:(如果您已經有一個default.pa,請跳過~/.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,它通常是世界可寫的。這可能太多了,在這種情況下,將套接字移動到只有兩個使用者可以訪問的地方。

引用自:https://unix.stackexchange.com/questions/637923