diff options
author | Scott Murray <scott.murray@konsulko.com> | 2021-11-02 19:29:39 -0400 |
---|---|---|
committer | Jan-Simon Moeller <jsmoeller@linuxfoundation.org> | 2021-11-04 14:24:24 +0000 |
commit | b1b652ff976655d0c1fcb170fb3f6795e56cd947 (patch) | |
tree | c0ef7baf2272a44d60d3cb74abc9b4c0c2be5274 /meta-agl-core/recipes-graphics/wayland | |
parent | d468ce3b3d602f7c8a88d67126a32900b76fd433 (diff) |
meta-agl-core: Update weston/agl-compositor init
Changes/rework to get weston and agl-compositor starting again:
- Since an upgrade to a newer Yocto release is in the near future,
update weston-init and associated files to effectively backport
the new weston startup behavior added in 3.3/Hardknott as our
new base. The changes mean weston or agl-compositor will by
default start as a "weston" user that replaces the "display"
user that had been added previously in AGL. The goal is that
any new work done on top of this base should hopefully work
on 3.5/Kirkstone without further substantial rework.
- Add new agl-compositor-init recipe that replaces the previous
weston-init bbappend in meta-agl-demo. Having it as a separate
recipe in core so weston or agl-compositor "just work" in simple
test images seems like a better approach.
- As part of the above, drop the --log option to agl-compositor
in its command-line to address SPEC-4112.
- Add SYSTEMD_DEFAULT_TARGET definition to agl-image-weston and
in a new core-image-weston bbappend to result in agl-compositor
and weston starting automatically in the corresponding images.
This is required with the new weston-init behavior until we
upgrade past 3.3/Hardknott, when "weston" in IMAGE_FEATURES
can be used instead.
Bug-AGL: SPEC-4121, SPEC-4112
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
Change-Id: Ia64894416846569abf8e744006ef26637279a895
Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl/+/26782
Reviewed-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
Tested-by: Jan-Simon Moeller <jsmoeller@linuxfoundation.org>
Diffstat (limited to 'meta-agl-core/recipes-graphics/wayland')
7 files changed, 189 insertions, 1 deletions
diff --git a/meta-agl-core/recipes-graphics/wayland/agl-compositor-init.bb b/meta-agl-core/recipes-graphics/wayland/agl-compositor-init.bb new file mode 100644 index 000000000..0cdf4d5d6 --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/agl-compositor-init.bb @@ -0,0 +1,40 @@ +SUMMARY = "Startup systemd unit drop-in file for the AGL Wayland compositor" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420" + +PACKAGE_ARCH = "${MACHINE_ARCH}" + +SRC_URI = "file://agl-compositor.conf.in" + +S = "${WORKDIR}" + +AGL_COMPOSITOR_ARGS ?= " --config ${sysconfdir}/xdg/weston/weston.ini --idle-time=0" +AGL_COMPOSITOR_USE_PIXMAN ??= "0" + +AGL_COMPOSITOR_ARGS:append = " ${@bb.utils.contains("DISTRO_FEATURES", "agl-devel", " --debug", "",d)}" +AGL_COMPOSITOR_ARGS:append = " ${@bb.utils.contains("WESTON_USE_PIXMAN", "1", " --use-pixman", "",d)}" + +do_install() { + # Process ".in" files + files=agl-compositor.conf.in + for f in ${files}; do + g=${f%.in} + if [ "${f}" != "${g}" ]; then + sed -e "s,@AGL_COMPOSITOR_ARGS@,${AGL_COMPOSITOR_ARGS},g" \ + ${WORKDIR}/${f} > ${WORKDIR}/${g} + fi + done + + # Install Weston systemd service drop-in + install -d ${D}${systemd_system_unitdir}/weston.service.d + install -m644 ${WORKDIR}/agl-compositor.conf ${D}/${systemd_system_unitdir}/weston.service.d/agl-compositor.conf +} + +FILES:${PN} += "\ + ${systemd_system_unitdir}/weston.service.d \ + " + +RDEPENDS:${PN} = " \ + agl-compositor \ + weston-init \ +" diff --git a/meta-agl-core/recipes-graphics/wayland/agl-compositor-init/agl-compositor.conf.in b/meta-agl-core/recipes-graphics/wayland/agl-compositor-init/agl-compositor.conf.in new file mode 100644 index 000000000..2918c410c --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/agl-compositor-init/agl-compositor.conf.in @@ -0,0 +1,3 @@ +[Service] +ExecStart= +ExecStart=/usr/bin/agl-compositor @AGL_COMPOSITOR_ARGS@ diff --git a/meta-agl-core/recipes-graphics/wayland/agl-compositor_git.bb b/meta-agl-core/recipes-graphics/wayland/agl-compositor_git.bb index 2156c7839..bdf8dc896 100644 --- a/meta-agl-core/recipes-graphics/wayland/agl-compositor_git.bb +++ b/meta-agl-core/recipes-graphics/wayland/agl-compositor_git.bb @@ -30,7 +30,10 @@ FILES:${PN} = " \ ${libdir}/agl-compositor/libexec_compositor.so.0.0.0 \ " -RDEPENDS:${PN} += " ${@bb.utils.contains('AGL_FEATURES', 'waltham-remoting', 'waltham waltham-transmitter-plugin', '', d)}" +RDEPENDS:${PN} += " \ + agl-compositor-init \ + ${@bb.utils.contains('AGL_FEATURES', 'waltham-remoting', 'waltham waltham-transmitter-plugin', '', d)} \ +" FILES:${PN}-dev += " \ ${datadir}/agl-compositor/protocols/agl-shell.xml \ diff --git a/meta-agl-core/recipes-graphics/wayland/weston-init/weston-autologin b/meta-agl-core/recipes-graphics/wayland/weston-init/weston-autologin new file mode 100644 index 000000000..f6e6d106d --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/weston-init/weston-autologin @@ -0,0 +1,11 @@ +auth required pam_nologin.so +auth required pam_unix.so try_first_pass nullok + +account required pam_nologin.so +account required pam_unix.so + +session required pam_env.so +session required pam_unix.so +-session optional pam_systemd.so type=wayland class=user desktop=weston +-session optional pam_loginuid.so + diff --git a/meta-agl-core/recipes-graphics/wayland/weston-init/weston.service b/meta-agl-core/recipes-graphics/wayland/weston-init/weston.service new file mode 100644 index 000000000..e09625b31 --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/weston-init/weston.service @@ -0,0 +1,71 @@ +# This is a system unit for launching Weston with auto-login as the +# user configured here. +# +# Weston must be built with systemd support, and your weston.ini must load +# the plugin systemd-notify.so. +[Unit] +Description=Weston, a Wayland compositor, as a system service +Documentation=man:weston(1) man:weston.ini(5) +Documentation=http://wayland.freedesktop.org/ + +# Make sure we are started after logins are permitted. +Requires=systemd-user-sessions.service +After=systemd-user-sessions.service + +# If Plymouth is used, we want to start when it is on its way out. +After=plymouth-quit-wait.service + +# D-Bus is necessary for contacting logind. Logind is required. +Wants=dbus.socket +After=dbus.socket + +# Ensure the socket is present +Requires=weston.socket + +# Since we are part of the graphical session, make sure we are started before +# it is complete. +Before=graphical.target + +# Prevent starting on systems without virtual consoles, Weston requires one +# for now. +ConditionPathExists=/dev/tty0 + +[Service] +# Requires systemd-notify.so Weston plugin. +Type=notify +EnvironmentFile=/etc/default/weston +ExecStart=/usr/bin/weston --modules=systemd-notify.so + +# Optional watchdog setup +TimeoutStartSec=60 +WatchdogSec=20 + +# The user to run Weston as. +User=weston +Group=weston + +# Make sure the working directory is the users home directory +WorkingDirectory=/home/weston + +# Set up a full user session for the user, required by Weston. +PAMName=weston-autologin + +# A virtual terminal is needed. +TTYPath=/dev/tty7 +TTYReset=yes +TTYVHangup=yes +TTYVTDisallocate=yes + +# Fail to start if not controlling the tty. +StandardInput=tty-fail +StandardOutput=journal +StandardError=journal + +# Log this user with utmp, letting it show up with commands 'w' and 'who'. +UtmpIdentifier=tty7 +UtmpMode=user + +[Install] +# Note: If you only want weston to start on-demand, remove this line with a +# service drop file +WantedBy=graphical.target diff --git a/meta-agl-core/recipes-graphics/wayland/weston-init/weston.socket b/meta-agl-core/recipes-graphics/wayland/weston-init/weston.socket new file mode 100644 index 000000000..c1bdc83c0 --- /dev/null +++ b/meta-agl-core/recipes-graphics/wayland/weston-init/weston.socket @@ -0,0 +1,14 @@ +[Unit] +Description=Weston socket +RequiresMountsFor=/run + +[Socket] +ListenStream=/run/wayland-0 +SocketMode=0775 +SocketUser=weston +SocketGroup=wayland +RemoveOnStop=yes + +[Install] +WantedBy=sockets.target + diff --git a/meta-agl-core/recipes-graphics/wayland/weston-init_aglcore.inc b/meta-agl-core/recipes-graphics/wayland/weston-init_aglcore.inc index 896f1eafb..070f5f8b5 100644 --- a/meta-agl-core/recipes-graphics/wayland/weston-init_aglcore.inc +++ b/meta-agl-core/recipes-graphics/wayland/weston-init_aglcore.inc @@ -6,3 +6,49 @@ do_install:append() { } RDEPENDS:${PN} += "weston-ini" + +# Temporary effective backport of upstream commit ccdaab97 +# This gets us on the same page as upstream with respect to running +# weston as non-root, and should make migrating to 3.5/Kirkstone +# easier. + +FILESEXTRAPATHS:prepend := "${THISDIR}/weston-init:" + +SRC_URI += " \ + file://weston.service \ + file://weston.socket \ + file://weston-autologin \ +" + +do_install:append() { + rm -f ${D}${sysconfdir}/udev/rules.d/71-weston-drm.rules + rm -f ${D}${systemd_system_unitdir}/weston@.service + rm -f ${D}${systemd_system_unitdir}/weston@.socket + + install -D -p -m0644 ${WORKDIR}/weston.service ${D}${systemd_system_unitdir}/weston.service + install -D -p -m0644 ${WORKDIR}/weston.socket ${D}${systemd_system_unitdir}/weston.socket + if [ "${@bb.utils.filter('DISTRO_FEATURES', 'pam', d)}" ]; then + install -D -p -m0644 ${WORKDIR}/weston-autologin ${D}${sysconfdir}/pam.d/weston-autologin + fi + + sed -i -e s:/etc:${sysconfdir}:g \ + -e s:/usr/bin:${bindir}:g \ + -e s:/var:${localstatedir}:g \ + ${D}${systemd_system_unitdir}/weston.service + + install -dm 755 -o weston -g weston ${D}/home/weston +} + +inherit useradd + +USERADD_PACKAGES = "${PN}" + +FILES_${PN} += "\ + ${systemd_system_unitdir}/weston.service \ + ${systemd_system_unitdir}/weston.socket \ + /home/weston \ +" + +SYSTEMD_SERVICE_${PN} = "weston.service weston.socket" +USERADD_PARAM_${PN} = "--home /home/weston --shell /bin/sh --user-group -G video,input weston" +GROUPADD_PARAM_${PN} = "-r wayland" |