Linux: 允许 www-data 到 mute/unmute 声音

Linux: Allow www-data to mute/unmute sound

要静音和取消静音,我在终端中成功使用了以下命令(作为 root):

amixer -D pulse set Master 1+ toggle

但如果我以用户 www-data 通过 PHP (shell_exec) 触发此命令,它就不起作用了。 我收到错误:

ALSA lib pulse.c:242:(pulse_connect) PulseAudio: Unable to connect: Connection refused
amixer: Mixer attach pulse error: Connection refused

这可能与用户权限有关,但我不知道如何将这些权限授予用户 www-data,你能帮忙吗?

其他信息来自 pactl 信息:

pi@raspberrypi:~ $ pactl info
Server-Zeichenkette: /run/user/1000/pulse/native
Bibliotheks-Protokollversion: 34
Server-Protokollversion: 34
ist lokal: ja
Client-Index: 32
Tile-Größe: 65496
Name des Benutzers: pi
Rechnername: raspberrypi
Name des Servers: pulseaudio
Version des Servers: 14.2
Standard-Abtastwert-Angabe: s16le 2ch 44100Hz
Standard-Kanal-Zuordnung: front-left,front-right
Standard-Ziel: alsa_output.usb-Generic_USB2.0_Device_20130100ph0-00.analog-stere                                     o
Standard-Quelle: alsa_output.usb-Generic_USB2.0_Device_20130100ph0-00.analog-ste                                     reo.monitor
Cookie: 249b:a636

pi@raspberrypi:~ $ stat /run/user/1000/pulse/native
 Datei: /run/user/1000/pulse/native
 Größe: 0               Blöcke: 0          EA Block: 4096   Socket
 Gerät: 20h/32d Inode: 33          Verknüpfungen: 1
Zugriff: (0666/srw-rw-rw-)  Uid: ( 1000/      pi)   Gid: ( 1000/      pi)
Zugriff: 2021-11-14 11:34:40.192044159 +0100
Modifiziert: 2021-11-12 15:33:34.489999995 +0100
Geändert: 2021-11-12 15:33:34.489999995 +0100
Geburt: -
 Datei: /run/user/1000/pulse/native
Zugriff: (0666/srw-rw-rw-)  Uid: ( 1000/      pi)   Gid: ( 1000/      pi)

无论哪种方式,您都必须将您的应用程序指向正确的路径并授予访问权限。

我相信将 www-data 用户添加到 pi 组,然后执行 env PULSE_RUNTIME_PATH=/run/user/1000/pulse/native pamixer.... 应该可以解决问题。实际上,无论如何,套接字都是 rw-rw-rw-,所以也许您不必将用户添加到组中。

另一种方法是打开 RDP 到 pulseaudio 并从 php 连接到它。

在 Eli Billauer 的技术博客的帮助下,我终于解决了这个问题: http://billauer.co.il/blog/2014/01/pa-multiple-users/

有关详细信息,请访问他的博客 post。

简而言之,步骤是:

作为桌面用户(在我的例子中'pi') 将/etc/pulse/default.pa复制到.pulse目录下的同名文件中,即

cp /etc/pulse/default.pa ~/.pulse/

然后编辑文件,在末尾添加以下行:

load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1

此时,重启pulseaudio守护进程,

$ pulseaudio -k
$ pulseaudio -D

作为“www-data”用户 现在切换到第二个用户 (www-data),并在该用户的 .pulse 子目录下创建一个名为 client.conf 的文件(我必须创建它。在 www-data 的 'home' 方向 /var/www/)

$ echo "default-server = 127.0.0.1" > ~/.pulse/client.conf

注意default.pa和client.conf在完全不同的目录下,分别属于不同的用户!