無法從 www-data 使用者訪問藍牙揚聲器
我正在嘗試從託管在我的 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
了以下組:audio
、bluetooth
、pulse
和pulse-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
,它通常是世界可寫的。這可能太多了,在這種情況下,將套接字移動到只有兩個使用者可以訪問的地方。