Ok, hat sich
erledigt. Ich konnte das Problem mithilfe des
Wikis lösen.
Die vom Paket
lirc mitgelieferte .service-Datei musste dafür angepasst werden:
Im Wiki steht folgendes:
Type=forking: systemd considers the service started up once the process forks and the parent has exited. For classic daemons use this type unless you know that it is not necessary. You should specify PIDFile= as well so systemd can keep track of the main process.
Damit systemd nun erkennt, dass der Prozess wirklich abgeschlossen wurde, musste ich den
Type auf
forking umstellen und die
PIDFile angeben.
Die fertige .service Datei sieht dann so aus:
[Unit]
Description=LIRC Infrared Signal Decoder
After=network.target
[Service]
Type=forking
ExecStart=/usr/sbin/lircd --pidfile=/var/run/lirc/lircd.pid
PIDFile=/var/run/lirc/lircd.pid
[Install]
WantedBy=multi-user.target
Um die .service Datei vom Paket zu überschreiben, muss man lediglich die Datei von /usr/lib/systemd/system/lircd.service nach /etc/systemd/system/lircd.service kopieren.
cp /usr/lib/systemd/system/lircd.service /etc/systemd/system/lircd.service
Die irexec@.service kann so bleiben wie ich sie oben bereits angefügt hatte. Lediglich den Pfad zur .lircrc im Home-Verzeichnis kann man sich sparen, da der User sowieso schon angegeben wird.
Hier nochmal die irexec@.service:
[Unit]
Description=IR Exec
Requires=lircd.service
After=lircd.service
[Service]
User=%i
Group=users
ExecStart=/usr/bin/irexec --daemon
Type=forking
[Install]
WantedBy=multi-user.target