我正在开发一个简单的应用程序来自动闪避音频,使用pulsectl-asyncio库。我已经使用虚拟环境在 Python 中开发了该应用程序,当我从命令行运行脚本时,它运行良好:/path/to/venv/bin/python /path/to/main.py
。
问题在于将其作为服务运行。当我将脚本作为服务运行时,出现错误:pulsectl.pulsectl.PulseError:无法连接到 pulseaudio 服务器。以下是我的服务配置:
[Unit]
Description=Auto-ducker
After=multi-user.target
[Service]
Type=simple
Restart=always
User=myuser
Group=myuser
ExecStart=/path/to/venv/bin/python /path/to/main.py
[Install]
WantedBy=multi-user.target
当我通过 sudo: 以自己的身份运行脚本时,出现同样的错误sudo -H -u myuser bash -c '/path/to/venv/bin/python /path/to/main.py'
。
为什么脚本从命令行运行,而不是作为服务运行?我如何才能将脚本作为服务运行?
答案1
正如 Matias 所说,解决方案是找到缺失的环境变量。就我而言,解决方案是XDG_RUNTIME_DIR=/run/user/1000
。
我的最终服务如下所示:
[Unit]
Description=Auto-ducker
After=multi-user.target
[Service]
Environment=XDG_RUNTIME_DIR=/run/user/1000
Type=simple
Restart=always
User=nicholas
Group=nicholas
ExecStart=/path/to/venv/bin/python /path/to/main.py
[Install]
WantedBy=multi-user.target