In diesem kurzen Beitrag möchte ich festhalten, wie LibreOffice (OpenOffice klappt auch) im „Headless-Modus“ installiert werden kann. In meinem Fall benötigen wir die Headless Installation, weil ich ein PHP Skript im Einsatz habe um diverse Daten in ein PDF, DOC oder XLS konvertieren zu können

Ausgangslage

Als Server OS wird Ubuntu 20.04 eingesetzt. Auf diesem ist ebenfalls PHP 8.1 installiert inkl Caddy Webserver (PHP und Caddy sind nicht relevant für den Betrieb des Headless-Modus.

Benötigte Pakete

Legen wir gleich los und installieren uns folgende Pakete:

sudo apt update
sudo apt --no-install-recommends install libreoffice

Mit diesem Befehl haben wir LibreOffice installiert, damit wir nun Dokumente konvertieren können benötigen wir noch JODConverter (inkl. seinen Abhängigkeiten).

sudo apt install default-jre libreoffice-java-commonstart jodconverter

Somit haben wir alle Pakete auf unserem System installiert. Mit folgendem Befehl kann nun LibreOffice „Headless“ gestartet werden:

/usr/bin/libreoffice --headless --nologo --nofirststartwizard --accept="socket,host=127.0.0.1,port=8100;urp" & > /dev/null 2>&1

Um das ganze testen zu können, kann nun einfach eine Text Datei angelegt werden und via folgendem Befehl, kann diese Text Datei in ein PDF konvertiert werden

jodconverter test.txt test.pdf

Tada, schon haben wir eine Datei konvertiert. Wie unschwer zu erwarten ist die Verwendung von JODConverter recht simpel:

jodconverter INPUT OUTPUT

Symstemd Script anlegen

Damit wir nicht immer LibreOffice manuell starten müssen, bietet es sich an hierfür ein Systemd Script anzulegen.

Im ersten Schritt legen wir eine libreoffice.service Datei unter /etc/systemd/system/ an

sudo touch /etc/systemd/system/libreoffice.service

Der Inhalt der Service Datei sieht folgendermaßen aus (kann einfach kopiert und eingefügt werden).

[Unit]
Description=Control headless libreoffice instance
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/libreoffice --headless  \
    --accept=socket,host=127.0.0.1,port=8100;urp; \
    --pidfile=/var/run/libreoffice.pid --nologo --nodefault --nofirststartwizard
RestartSec=5
ExecStop=/usr/bin/pkill -F /var/run/libreoffice.pid
PIDFile=/var/run/libreoffice.pid

[Install]
WantedBy=multi-user.target

Zum Schluss muss das systemd Script noch aktiviert werden und anschließen kann der LibreOffice Dienst über sudo service libreoffice (start|reload|stop) verwaltet werden.

Um den Service zu aktivieren muss folgender Befehl eingegeben werden:

sudo systemctl enable libreoffice.service

Das wars auch schon, viel Spaß mit der kleinen Anleitung 🙂