Linux 无法使用pulseaudio作为systemd单元捕获麦克风输入

Linux 无法使用pulseaudio作为systemd单元捕获麦克风输入,linux,go,systemd,pulseaudio,Linux,Go,Systemd,Pulseaudio,我创建了一个小的go程序,它使用go绑定来录制来自默认麦克风的一些命令,并相应地执行操作。它作为一个独立的二进制文件(作为普通用户和根用户)运行良好,但当我试图将其转换为systemd单元时,go绑定中的Capture函数失败,错误为连接被拒绝 作为systemd服务运行时,程序无法捕获麦克风输入。以下是基本上是从中复制粘贴的单位文件 sh是一个简单的shell脚本,用于向go二进制文件提供环境变量。脚本如下 #!/bin/bash cd /path/to/binary env LD_LIBRA

我创建了一个小的go程序,它使用go绑定来录制来自默认麦克风的一些命令,并相应地执行操作。它作为一个独立的二进制文件(作为普通用户和根用户)运行良好,但当我试图将其转换为systemd单元时,go绑定中的
Capture
函数失败,错误为
连接被拒绝

作为systemd服务运行时,程序无法捕获麦克风输入。以下是基本上是从中复制粘贴的单位文件

sh是一个简单的shell脚本,用于向go二进制文件提供环境变量。脚本如下

#!/bin/bash
cd /path/to/binary
env LD_LIBRARY_PATH=/usr/local/lib ./binary > stdout 2> stderr
LD_LIBRARY_PATH
是用于从音频识别命令的
pocketsphinx
共享库所需的

我认为单位档案有问题,但我不知道是什么问题。整个项目都可以找到


任何见解都会有所帮助。谢谢。

pulseaudio是一个可能尚未启动的守护程序。。。使用

sleep 10
echo about to determine whether pulseaudio is up and running
pulseaudio --check
echo if pulseaudio is running above check silently returns

在启动golang binary之前

Hi Scott,感谢您的输入,但是
pulseaudio
正在运行。我正在用二进制文件并行测试服务。二进制文件正在运行,但服务给我带来了问题。一旦这个问题得到解决,我将添加这个检查。PulseAudio通常在登录用户会话的上下文中运行,并且音频输入/输出仅适用于在该会话中运行的程序。系统服务不可能从用户会话中运行的PulseAudio获取麦克风音频,因为这将是一个严重的安全漏洞。嗨,Michael。这很有道理。但是应该可以使用
systemd
在用户会话中运行服务。。?或者我必须使用桌面环境的自动启动机制来实现我想要的功能吗?systemd services从不在用户的桌面会话中运行。这听起来像是作为systemd用户服务运行是有意义的(就像PulseAudio本身一样)。@LucasWerkmeister它成功了。谢谢
sleep 10
echo about to determine whether pulseaudio is up and running
pulseaudio --check
echo if pulseaudio is running above check silently returns