systemd를 사용하여 Libre Office 시작

systemd를 사용하여 Libre Office 시작

nginx RTMP 서버에서 비디오 프레임을 요청하는 Python 스크립트를 작성했습니다. 요청이 빈 바이트 문자열로 반환되면 VLC/FFMPEG 프로세스가 종료되고 libreoffice가 Impress 슬라이드쇼로 표시됩니다. 이 Python 스크립트는 터미널에서 제대로 실행되지만 systemd에서 실행하면 libreoffice 부분이 실패합니다.

Run은 htoplibreoffice를 실행하기 위해 실행된 명령을 보여줍니다 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

VLC를 시작하기 위해 Python 스크립트에서 다음 코드 줄을 사용했습니다.

# 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

관련 정보