From 26b31185b5c119d07178c40a522e0af4e095bbee Mon Sep 17 00:00:00 2001
From: Adar Nimrod <nimrod@shore.co.il>
Date: Thu, 24 Dec 2020 18:06:09 +0200
Subject: [PATCH] Kodi service.

Use the one from https://github.com/xbmc/xbmc/pull/14905 but with slight
tweaks. Keyboard input still isn't working, but it starts up reliably.
---
 roles/kodi/files/kodi.service  | 14 -----------
 roles/kodi/files/kodi@.service | 44 ++++++++++++++++++++++++++++++++++
 roles/kodi/tasks/main.yml      |  6 ++---
 3 files changed, 47 insertions(+), 17 deletions(-)
 delete mode 100644 roles/kodi/files/kodi.service
 create mode 100644 roles/kodi/files/kodi@.service

diff --git a/roles/kodi/files/kodi.service b/roles/kodi/files/kodi.service
deleted file mode 100644
index 42630c7..0000000
--- a/roles/kodi/files/kodi.service
+++ /dev/null
@@ -1,14 +0,0 @@
-[Unit]
-Description=Kodi Media Center
-Requires=dbus.socket
-After=network.target
-After=sound.target
-
-[Service]
-User=kodi
-ExecStart=flatpak run --device=dri --filesystem=home --filesystem=/srv/library tv.kodi.Kodi --standalone --windowing=gbm
-KillMode=control-group
-Restart=always
-
-[Install]
-WantedBy=multi-user.target graphical.target
diff --git a/roles/kodi/files/kodi@.service b/roles/kodi/files/kodi@.service
new file mode 100644
index 0000000..e9e2a57
--- /dev/null
+++ b/roles/kodi/files/kodi@.service
@@ -0,0 +1,44 @@
+[Unit]
+Description=Kodi Media Center on %i
+After=systemd-user-sessions.service sound.target network-online.target
+
+# Require the library to be mounted.
+After=srv-library.mount
+
+# D-Bus is necessary for contacting logind. Logind is required.
+Wants=dbus.socket
+After=dbus.socket
+
+Conflicts=getty@%i.service
+Before=graphical.target
+
+# On systems without virtual consoles, don't start
+ConditionPathExists=/dev/tty0
+
+[Service]
+User=kodi
+PAMName=login
+ExecStart=flatpak run --device=dri --filesystem=home --filesystem=/srv/library tv.kodi.Kodi --standalone --windowing=gbm -fs
+Type=simple
+Restart=on-abort
+RestartSec=5
+KillMode=control-group
+
+# A virtual terminal is needed.
+TTYPath=/dev/%i
+TTYReset=yes
+TTYVHangup=yes
+TTYVTDisallocate=yes
+
+# Fail to start if not controlling the tty.
+StandardOutput=tty
+StandardInput=tty
+StandardError=journal
+
+# Log this user with utmp, letting it show up with commands 'w' and 'who'.
+UtmpIdentifier=%i
+UtmpMode=user
+
+[Install]
+WantedBy=graphical.target
+DefaultInstance=tty7
diff --git a/roles/kodi/tasks/main.yml b/roles/kodi/tasks/main.yml
index 59e8cec..9775d2a 100644
--- a/roles/kodi/tasks/main.yml
+++ b/roles/kodi/tasks/main.yml
@@ -41,13 +41,13 @@
 
 - name: Copy service
   copy:
-    dest: /etc/systemd/system/kodi.service
+    dest: /etc/systemd/system/
     mode: preserve
-    src: kodi.service
+    src: kodi@.service
 
 - name: Enable service
   service:
     daemon-reload: true
     enabled: true
-    name: kodi.service
+    name: kodi@tty7.service
     state: started
-- 
GitLab