长话短说,我正在尝试设置PulseAudio作为本地音乐流的回送接口。但是,我在设置它的过程中碰到了一个临界点。
据我所知,如果不运行X服务器,就不能在“非系统模式”下启动脉冲音频,但是如果服务器是无头的,这不是一种选择。因此,我开始编写一个拼凑在一起的systemd脚本,将守护进程作为一个系统范围的实例启动。然而,由于一些令人费解的原因,这一做法失败了。
如果我在systemd脚本中运行命令,系统范围内的脉冲就会很好地启动!但是,如果我从启动脚本中运行它(例如。使用systemctl启动脉冲音频),它在Failed to create '/var/run/pulse': Permission denied中失败。在我的一生中,我无法弄清楚它将如何以不同的方式为同一个用户工作。我还尝试用ls /var/run/pulse替换start脚本。当脚本设置为“脉冲”运行时,它将在日志中不打印任何内容。但是,如果我将整个调用包装在一个sudo -u pulse中,它会打印/var/run/pulse的内容。当我将脉冲启动命令包装在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发布于 2018-11-07 00:57:30
这并不能真正解释Failed to create '/var/run/pulse': Permission denied消息,但是您的配置中有一个明显的问题,就是您正在使用systemd服务单元运行带有--daemonize的PulseAudio,而systemd实际上希望它在前台运行。您应该将其更改为--daemonize=no。
您还可能希望按照日志消息中的建议显式列出--disallow-exit和--disallow-module-loading。
PulseAudio还抱怨用户pulse的S主目录不是/var/run/pulse,因为它似乎预期,您可能希望更新系统帐户以反映这一点。
为了进行进一步的研究,您可能需要查看这篇文章,以获得更多关于运行系统范围内的PulseAudio实例的详细信息和说明,以及PulseAudio wiki中的此页 (包括一些关于为什么不希望将PulseAudio作为系统范围的服务运行的参考)。
发布于 2019-01-30 22:25:50
您可以尝试将pulseaudio.service与--user放在一个shell脚本中来启动它。现在,以普通用户的身份在屏幕中运行启动脚本。然后断开屏幕并注销。脉冲音频服务器继续进行,就好像它是无头的。
https://unix.stackexchange.com/questions/480227
复制相似问题