使用 systemd 启动 Libre Office

使用 systemd 启动 Libre Office

我编写了一个 Python 脚本,用于从 nginx RTMP 服务器请求视频帧。如果该请求作为空字节字符串返回,则应终止 VLC / FFMPEG 进程,并以 Impress 幻灯片演示形式显示 libreoffice。这个 Python 脚本在终端上运行得很好,但是当从 systemd 执行时,它的 libreoffice 部分会失败。

运行htop显示为运行 libreoffice: 而执行的命令soffice --impress --norestore -invisible --show test.pptx

当然,屏幕上实际上没有显示任何内容。我看到的唯一错误是一个错误,指出Can't get display

这是我的单位文件:

[Unit]
Description=Polls the RTMP Server for a valid video feed
Wants=network-online.target
After=network-online.target

[Service]
ExecStartPre=/bin/sleep 10
ExecStart=/usr/bin/python3 -u /home/pi/stream_script/launch_stream.py
Restart=always
User=pi

[Install]
WantedBy=multi-user.target

我在 Python 脚本中使用了以下代码行来启动 VLC

# Show the stream
vlc_process = subprocess.Popen("cvlc --fullscreen --avcodec-threads=0 " + STREAM, stdout=subprocess.PIPE, shell=True,  preexec_fn=os.setsid)

以及以下命令来终止该进程

os.killpg(os.getpgid(vlc_process.pid), signal.SIGTERM)  # Send the signal to all the process groups

我当然不是 systemd 方面的专家,但我之前已经使用过它很多次,没有出现任何问题 - 但从来没有使用过图形应用程序。 systemd 无法访问图形资源吗?

如果这是一个相对简单的问题,我深表歉意......我搞砸了好几天,无法想出解决方案。我研究的与上述错误相关的大部分内容都与无头 libreoffice 操作有关。

答案1

这将作为一项用户服务(至少有一个仅在登录后手动启动或通过其他方式启动),但不能作为系统服务。

$ systemctl show-environment
LANG=de_DE.UTF-8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

$ systemctl --user show-environment
HOME=/home/hl
LANG=de_DE.UTF-8
LOGNAME=hl
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/bash
USER=hl
XDG_RUNTIME_DIR=/run/user/1000
XDG_DATA_DIRS=/home/hl/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
DISPLAY=:0
XAUTHORITY=/home/hl/.Xauthority

相关内容