这是我遇到的一个奇怪的问题。
我一直在使用 PulseAudio 在虚拟机上创建一个假环回接口,用于音乐流传输。几天前,服务器意外重新启动,突然,PulseAudio 守护进程无法绑定到其套接字(以 root 身份运行,我知道不建议这样做,但这是一个 VM,其唯一目的就是执行此操作) 。它以 root 身份运行,所以理论上它应该拥有执行此操作的所有权限,所以我怀疑发生了其他事情。
现在,PA 守护进程从一个systemd
单元启动。从 root 帐户运行完全相同的命令来看,它似乎工作得很好,所以我决定尝试使用strace
systemd 单元来看看它在做什么。然而,我这样做了,并且pulseaudio守护进程正确绑定了!它启动并开始按预期工作!因此,作为权宜之计,我目前在设备中运行以下命令以使其正常工作:
/bin/strace -e '!all' /bin/pulseaudio --start --daemonize=no
我的问题是为什么在程序前面运行 strace 会改变它的行为?我认为这可能与环境变量有关,但我似乎无法弄清楚 strace 是否加载它们。
编辑:我应该注意到,这个虚拟机是故意无头的,并且没有显示管理器。我使用 Xvfb 和 1x1 显示器来让 dbus 工作。整个事情有点像黑客,但直到这个周末它才有效。