You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派4+OMV环境下命名管道运行mpg321失败求助

解决命名管道执行mpg321音频播放失败的问题

问题根源

你的推测完全正确:systemd系统服务默认以root用户运行,而树莓派上的PulseAudio音频会话属于pi用户,root没有权限访问该会话,导致mpg321无法连接音频驱动。错误日志里的PulseAudio: Unable to connect: Access denied直接验证了这一点。

解决方案

1. 修改systemd服务,以pi用户运行

编辑你的服务文件myscript.service,在[Service]段添加用户和组配置:

[Unit]
Description=My Startup Script
After=network.target

[Service]
ExecStart=/path/to/my_script.sh
User=pi
Group=pi
# 可选:确保服务能访问用户的音频会话环境
Environment=DISPLAY=:0
Environment=XAUTHORITY=/home/pi/.Xauthority

[Install]
WantedBy=default.target

重新加载服务配置并重启:

sudo systemctl daemon-reload
sudo systemctl restart myscript.service

2. 验证管道和脚本的权限

确保命名管道和脚本对pi用户有读写/执行权限:

# 修改管道权限
sudo chown pi:pi /path/to/pipe/hasspipe
sudo chmod 660 /path/to/pipe/hasspipe

# 修改脚本权限
sudo chown pi:pi /path/to/my_script.sh
sudo chmod +x /path/to/my_script.sh

3. 测试验证

通过管道发送mpg321命令,检查是否能正常播放:

echo "mpg321 /path/media/sounds/alert.mp3" > /path/to/pipe/hasspipe

补充说明

  • 手动运行脚本时处于pi用户会话下,因此能正常访问音频设备;systemd系统服务默认脱离用户会话,指定User=pi后会继承该用户的环境变量和权限,包括音频访问权限。
  • 如果添加Environment配置后仍有问题,可以尝试将服务改为用户服务(放在~/.config/systemd/user/目录下),这样会完全继承pi用户的会话环境。

内容的提问来源于stack exchange,提问作者Veoxer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 00:22:32