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

おすすめ記事