PulseAudio 无法在 CentOS 7 中以系统模式启动

PulseAudio 无法在 CentOS 7 中以系统模式启动

长话短说,我正在尝试将 PulseAudio 设置为本地音乐流的环回接口。然而,我在设置它时遇到了突破点。

据我了解,如果没有运行 X 服务器,则无法在“非系统模式”下启动pulseaudio,但由于服务器是无头的,因此这不是一个选项。因此,我开始编写一个拼凑在一起的 systemd 脚本,以将守护进程作为系统范围的实例启动。然而,由于某些无法解释的原因,这失败了。

如果我运行 systemd 脚本中的命令,系统范围的脉冲就会正常启动!但是,如果我从启动脚本中运行它(例如使用 systemctl startpulseaudio),它会失败并显示Failed to create '/var/run/pulse': Permission denied.我一生都无法弄清楚它如何以不同的方式为同一用户工作。我还尝试用ls /var/run/pulse.当脚本设置为“脉冲”运行时,它不会在日志中打印任何内容。但是,如果我将整个调用包装在 a 中sudo -u pulse,它会打印 的内容/var/run/pulse。当我将脉冲启动命令包装在 a 中时sudo -u root,它只是因相同的错误而崩溃。

[root@ian-primary ian]# ls -al /var/run/pulse
total 4
drwx------.  3 pulse pulse  80 Nov  5 23:10 .
drwxr-xr-x. 29 root  root  840 Nov  5 23:03 ..
drwxr-xr-x.  3 pulse pulse  60 Nov  5 23:04 .config
-rw-------.  1 pulse pulse  16 Nov  5 23:04 .esd_auth

[root@ian-primary ian]# sudo -u pulse ls -al /var/run/pulse
total 4
drwx------.  3 pulse pulse  80 Nov  5 23:10 .
drwxr-xr-x. 29 root  root  840 Nov  5 23:03 ..
drwxr-xr-x.  3 pulse pulse  60 Nov  5 23:04 .config
-rw-------.  1 pulse pulse  16 Nov  5 23:04 .esd_auth

Nov 06 13:56:02 ian-primary systemd[1]: Starting PulseAudio system server...
Nov 06 13:56:02 ian-primary pulseaudio[23251]: W: [pulseaudio] main.c: Running in system mode, but --disallow-exit not set.
Nov 06 13:56:02 ian-primary pulseaudio[23251]: W: [pulseaudio] main.c: Running in system mode, but --disallow-module-loading not set.
Nov 06 13:56:02 ian-primary pulseaudio[23251]: N: [pulseaudio] main.c: Running in system mode, forcibly disabling SHM mode.
Nov 06 13:56:02 ian-primary pulseaudio[23251]: N: [pulseaudio] main.c: Running in system mode, forcibly disabling exit idle time.
Nov 06 13:56:02 ian-primary pulseaudio[23253]: Timer slack is set to 50 us.
Nov 06 13:56:02 ian-primary pulseaudio[23253]: setpriority() worked.
Nov 06 13:56:02 ian-primary pulseaudio[23253]: Successfully gained nice level -11.
Nov 06 13:56:02 ian-primary pulseaudio[23253]: Found user 'pulse' (UID 171) and group 'pulse' (GID 171).
Nov 06 13:56:02 ian-primary pulseaudio[23253]: Home directory of user 'pulse' is not '/var/run/pulse', ignoring.
Nov 06 13:56:02 ian-primary pulseaudio[23251]: E: [pulseaudio] main.c: Daemon startup failed.
Nov 06 13:56:02 ian-primary pulseaudio[23253]: Failed to create '/var/run/pulse': Permission denied
Nov 06 13:56:02 ian-primary systemd[1]: pulseaudio.service: main process exited, code=exited, status=1/FAILURE
Nov 06 13:56:02 ian-primary systemd[1]: Failed to start PulseAudio system server.
Nov 06 13:56:02 ian-primary systemd[1]: Unit pulseaudio.service entered failed state.
Nov 06 13:56:02 ian-primary systemd[1]: pulseaudio.service failed.

[root@ian-primary ian]# /bin/pulseaudio -vvv --daemonize --system --realtime
W: [pulseaudio] main.c: Running in system mode, but --disallow-exit not set.
W: [pulseaudio] main.c: Running in system mode, but --disallow-module-loading not set.
N: [pulseaudio] main.c: Running in system mode, forcibly disabling SHM mode.
N: [pulseaudio] main.c: Running in system mode, forcibly disabling exit idle time.
I: [pulseaudio] main.c: Daemon startup successful.

[root@ian-primary ian]# cat /etc/systemd/system/pulseaudio.service
[Unit]
Description=PulseAudio system server

[Service]
Type=notify
Environment=PULSE_RUNTIME_PATH=/run/pulse

# ExecStart=/bin/printenv
# export PULSE_RUNTIME_PATH="/run/pulse"
ExecStart=/bin/pulseaudio -vvv --daemonize --system --realtime

[Install]
WantedBy=multi-user.target

答案1

这并没有真正解释这一Failed to create '/var/run/pulse': Permission denied消息,但您的配置中有一个明显的问题,即您正在--daemonize从 systemd 服务单元运行 PulseAudio,而 systemd 实际上希望它在前台运行。你应该将其更改为--daemonize=no.

您可能还想按照日志消息中的建议明确列出--disallow-exit和。--disallow-module-loading

PulseAudio 还抱怨用户pulse的主目录不存在/var/run/pulse,正如它似乎期望的那样,您可能需要更新系统帐户以反映这一点。

如需进一步研究,您可能需要查看本文有关运行 PulseAudio 系统范围实例的更多详细信息和说明,以及这一页来自 PulseAudio wiki(包括一些关于为什么您会这样做的参考资料)不是希望将 PulseAudio 作为系统范围的服务运行。)

答案2

您可以尝试将pulseaudio.service 与--user 一起放入shell 脚本中来启动它。现在以普通用户身份运行屏幕内的启动脚本。然后分离屏幕并注销。脉冲音频服务器继续运行,就好像它没有头一样。

相关内容