几天来,我一直在尝试设置一个在 debian 上运行并通过蓝牙传输音乐的 python 服务。蓝牙部分工作正常。我正在使用
dbus
。问题出在 debian 计算机上运行的“pulsectl”脉冲音频服务。错误如下。它一直告诉我找不到 `/run/user/1001/pulse` 目录,但是当我执行 `ls` 时它已经在那里了。
:Failed to create secure directory (/run/user/1001/pulse): No such file or directoryNov 28 14:32:59 triton python3[550]: ERROR app.root - PulseAudio connection test failed: Failed to connect to pulseaudio serverNov 28 14:32:59 triton python3[550]: ERROR app.root - Cannot connect to PulseAudio server. Exiting...
我有一些逻辑首先检查 `pulsectl` 是否已连接,这就是它中断的地方:
def test_pulseaudio_connection():
try:
with pulsectl.Pulse("test-connection") as pulse:
return True
except Exception as e:
logging.error(f"PulseAudio connection test failed: {e}")
return False
if __name__ == "__main__":
os.environ["XDG_RUNTIME_DIR"] = f"/run/user/{os.getuid()}"
# First, test the PulseAudio connection
if not test_pulseaudio_connection():
logging.error("Cannot connect to PulseAudio server. Exiting...")
exit(1) # Exits the program if PulseAudio is not running
此外,我还设置了 systemd 服务文件,并在那里传递了环境文件,并选择用户来运行此文件等,因为我读到它不应该是运行pulseaudio服务的根用户。
[Service]ExecStart=/usr/bin/python3 /opt/backend/src/app.py
WorkingDirectory=/opt/backend/src
Environment="XDG_RUNTIME_DIR=/run/user/1001"
Environment="ENVIRONMENT=development"
User=user
Group=audio
Group=root
Restart=always
[Device]
DeviceAllow=/dev/ttyRS232_A rw
[Install]WantedBy=multi-user.target
我不知道为什么它一直显示此错误。
但是当我这样做时
它已经在那里了ls
用户运行时目录不是在启动时创建的——它们的存在与交互式登录会话的存在相关。因此,在您登录后,它已经“已经存在”了,但在您登录检查之前,当服务在系统引导期间启动时,它还没有“已经存在”。 使用
loginctl enable-linger $USER
配置 systemd 以在启动时创建用户的运行时目录(以及在启动时启动该用户的个人“systemctl --user”服务)。
然后,添加[email protected]
依赖项以确保事情按正确的顺序发生,或者(最好)将整个服务转换为 ~/.config/systemd/user/ 中的“--user”服务。