From a4df51435a0683cb54a2101fb9ac44717a663cca Mon Sep 17 00:00:00 2001
From: Arnaud Ferraris <arnaud.ferraris@collabora.com>
Date: Tue, 7 Dec 2021 18:31:37 +0100
Subject: [PATCH] meta-app-framework: add new agl-session recipe

For the new App FW, we want to create a systemd user session, to be
started on boot, which will be used to start the compositor and all user
background services.

This commit adds the corresponding target and service file (enabled by
default) so the session is started on boot.

Bug-AGL: SPEC-4161
Signed-off-by: Arnaud Ferraris <arnaud.ferraris@collabora.com>
Change-Id: I51ca7e0c1a994c6798b20b2592bec56a07f41c98
Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl/+/26974
ci-image-build: Jenkins Job builder account
Tested-by: Jenkins Job builder account
ci-image-boot-test: Jenkins Job builder account
Reviewed-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
---
 .../recipes-config/agl-session/agl-session_0.1.bb  | 35 ++++++++++++++++++++++
 .../agl-session/files/agl-session.target           |  5 ++++
 .../agl-session/files/agl-session@.service         | 24 +++++++++++++++
 3 files changed, 64 insertions(+)
 create mode 100644 meta-app-framework/recipes-config/agl-session/agl-session_0.1.bb
 create mode 100644 meta-app-framework/recipes-config/agl-session/files/agl-session.target
 create mode 100644 meta-app-framework/recipes-config/agl-session/files/agl-session@.service

diff --git a/meta-app-framework/recipes-config/agl-session/agl-session_0.1.bb b/meta-app-framework/recipes-config/agl-session/agl-session_0.1.bb
new file mode 100644
index 000000000..abde287ac
--- /dev/null
+++ b/meta-app-framework/recipes-config/agl-session/agl-session_0.1.bb
@@ -0,0 +1,35 @@
+SUMMARY = "AGL user session"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
+
+SRC_URI = "\
+    file://agl-session@.service \
+    file://agl-session.target \
+"
+
+inherit systemd allarch useradd
+
+USERADD_PACKAGES = "${PN}"
+USERADDEXTENSION = "useradd-staticids"
+GROUPADD_PARAM:${PN} = "\
+	-g 1001 agl-driver ; \
+"
+USERADD_PARAM:${PN} = "\
+  -g 1001 -u 1001 -o -d /home/agl-driver -m -K PASS_MAX_DAYS=-1 agl-driver ; \
+"
+
+SYSTEMD_PACKAGES = "${PN}"
+# Instantiate session for the 'agl-driver' user, so we don't have to hardcode
+# the user name/ID in the service file itself
+SYSTEMD_SERVICE:${PN} = "agl-session@agl-driver.service"
+SYSTEMD_AUTO_ENABLE:${PN} = "enable"
+
+do_install() {
+    install -d ${D}${systemd_system_unitdir}
+    install -m 0644 ${WORKDIR}/agl-session@.service ${D}${systemd_system_unitdir}
+
+    install -d ${D}${systemd_user_unitdir}
+    install -m 0644 ${WORKDIR}/agl-session.target ${D}${systemd_user_unitdir}
+}
+
+FILES:${PN} += "${systemd_system_unitdir} ${systemd_user_unitdir}"
diff --git a/meta-app-framework/recipes-config/agl-session/files/agl-session.target b/meta-app-framework/recipes-config/agl-session/files/agl-session.target
new file mode 100644
index 000000000..84d9daa5b
--- /dev/null
+++ b/meta-app-framework/recipes-config/agl-session/files/agl-session.target
@@ -0,0 +1,5 @@
+[Unit]
+Description=AGL user session
+
+BindsTo=graphical-session.target
+Before=graphical-session.target
diff --git a/meta-app-framework/recipes-config/agl-session/files/agl-session@.service b/meta-app-framework/recipes-config/agl-session/files/agl-session@.service
new file mode 100644
index 000000000..61afa4141
--- /dev/null
+++ b/meta-app-framework/recipes-config/agl-session/files/agl-session@.service
@@ -0,0 +1,24 @@
+[Unit]
+Description=AGL user session
+After=systemd-user-sessions.service
+Wants=dbus.socket
+After=dbus.socket
+After=session-c1.scope
+Before=multi-user.target
+
+[Service]
+Environment=XDG_SESSION_TYPE=wayland
+ExecStart=/bin/systemctl --wait --user start agl-session.target
+TimeoutStartSec=30
+# This is a template service, instantiate for desired user's name or uid
+User=%i
+PAMName=login
+WorkingDirectory=~
+StandardInput=tty-fail
+StandardOutput=journal
+StandardError=journal
+Restart=always
+RestartSec=3s
+
+[Install]
+WantedBy=multi-user.target
-- 
2.16.6