aplay 不会为非默认用户产生声音输出,但详细状态看起来没问题?

aplay 不会为非默认用户产生声音输出,但详细状态看起来没问题?

我正在编写一个利用 Raspberry PI 的 GPIO 的 python 脚本,因此必须将脚本提升为 sudo 运行,以获得 /dev/mem 和 /dev/gpiomem 的正确权限并访问 GPIO。

不过我也想从这个脚本中播放声音,所以我现在使用os.system(cmd)允许 Python 执行 shell 命令的方法。

我正在使用这种方法将 wav 文件加载到 aplay 中。

Python 片段:

defaultUser = 'pi' #the user to run the command as
cmd = 'sudo -H -u %s bash -c \'aplay sounds/%s &\'' % (defaultUser, filename)

os.system(cmd) #now run the command as if it were typed into the shell

上面的尝试以默认用户身份启动命令,当我自己使用 alsa 时,这曾经工作得很好。然而,由于 DAC 打开和关闭时发出的爆裂声/爆裂声,我不得不切换到脉冲音频并禁用空闲时模块挂起。

这导致了上述问题,我不再能够从 root 用户发出声音。

我尝试在 shell 中执行这些命令,尝试以默认用户身份启动 aplay(但实际上没有一个播放任何声音):

$ sudo -H -u pi bash -c 'aplay sounds/beep.wav &'
$ Playing WAVE 'sounds/3tone.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Mono

$ sudo -u pi aplay sounds/beep.wav
$ Playing WAVE 'sounds/beep.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Mono

两者都产生良好的详细输出,只是没有音频。

如果我以非 root 用户(又名 pi)身份运行,我确实会收到音频

什么可能导致pulseaudio或aplay对非root用户起作用,但当root启动命令以默认用户身份运行时却不起作用?

这让我陷入了第 22 条军规,我需要 sudo,但 sudo 会导致问题。

感谢您的指导!

答案1

Pulseaudio 的设计仅适用于登录用户。

你要么需要全系统 Pulseaudio,或者您必须启用非默认选项之一通讯方式模块为根。

相关内容