在没有 sudo 权限的情况下运行 systemd 服务

问题描述 投票:0回答:2

我有一台 PC,它通过 TCP/IP 套接字将日志数据传输到 Raspberry Pi。我写了一个在 Pi 上运行的 python 服务器程序,这样当遇到某些关键字时,它必须播放相应的音轨 - 这是我目前正在解决的问题的要点。

现在,我希望这个服务器程序在 Raspberry Pi 启动后立即运行,因此我编写了一个

systemd
服务来实现这一点。假设我的服务器代码名为
server.py
,我的
service
文件如下所示:

[Unit]
Description=Python Server

[Service]
# Command to execute when the service is started
ExecStart=/usr/bin/python3 -u /usr/bin/server.py

[Install]
WantedBy=multi-user.target

我使这个服务器程序可执行,并且我的服务没有遇到任何问题(也通过重新启动 Pi 进行验证)。现在,退一步,我使用以下几行(一个小片段)在 python 服务器程序上播放音轨:

start
这里没有错误,一切都很好。但是当启动运行服务器程序的服务时,遇到特定关键字时,音轨不会播放 - 它显示错误:

enable

当我尝试使用

import subprocess subprocess.run(["cvlc", "~/Downloads/doors.wav"])
 从命令行播放音频时,会发生上面显示的相同错误,即:

: [00005565470df480] vlcpulse audio output error: PulseAudio server connection failure: Connection refused : [0000556547157310] dbus interface error: Failed to connect to the D-Bus session daemon: Unable to autolaunch a dbus-daemon without a $D : [0000556547157310] main interface error: no suitable interface module : [000055654700c570] main libvlc error: interface "dbus,none" initialization failed : [0000556547101460] main interface error: no suitable interface module : [000055654700c570] main libvlc error: interface "globalhotkeys,none" initialization failed : [0000556547101460] dummy interface: using the dummy interface module... : [00007f5f98c0b610] idummy demux: command `quit'

这让我相信,如果启用了该服务,那么与该服务对应的整个 python 程序就会自动以 sudo 权限运行,即使我不希望发生这种情况。我做了一些挖掘,但根据我的理解,要运行该服务,

sudo
特权是必要的。我无法找到使用 
cvlc ~/Downloads/doors.wav

运行 vlc 的解决方案,尽管我知道理想情况下不应将 sudo 权限授予诸如 vlc 之类的东西。有办法解决这个问题吗?

    
发生这种情况是因为 PulseAudio 服务器在 

your
python-3.x linux raspberry-pi vlc systemd
2个回答
0
投票
sudo

。您正在启动的服务作为 sudo 运行,并尝试连接到

root
的 PulseAudio 服务器。
您可以使用 
root

root

指令在

[Service]
部分下指定运行服务的用户/组。
您还可以像这样以您的用户身份运行该服务:

User

可能使用 polkit 可以在这里提供帮助


0
投票

© www.soinside.com 2019 - 2024. All rights reserved.