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在完全不同的目录下,分别属于不同的用户!
要静音和取消静音,我在终端中成功使用了以下命令(作为 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在完全不同的目录下,分别属于不同的用户!