weston-init: Redefine weston service and add socket activation option

Currently, weston when autolauched with systemd ends up with seat0
related errors because its launched before seat0 is assigned.

Fixes
[05:16:09.357] logind: failed to get session seat
[05:16:09.358] logind: cannot setup systemd-logind helper (-61), using legacy fallback

The above error results in ptest failures in parselogs, even though
weston has started ok using fallback methods, these errors are still seen in logs

Also fixes weston ptests
RESULTS - weston.WestonTest.test_weston_can_initialize_new_wayland_compositor: PASSED (8.58s)

(From OE-Core rev: c21fa5a291ab207a084285935ab73a0b4225c965)

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Cc: Marek Vasut <marex@denx.de>
Cc: Henning Heinold <henning@itconsulting-heinold.de>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Khem Raj 2020-09-09 09:27:04 -07:00 committed by Richard Purdie
parent 75e803a4d0
commit 31259e5913
4 changed files with 88 additions and 12 deletions

View File

@ -8,7 +8,9 @@ SRC_URI = "file://init \
file://weston.env \
file://weston.ini \
file://weston@.service \
file://weston@.socket \
file://71-weston-drm.rules \
file://weston-autologin \
file://weston-start"
S = "${WORKDIR}"
@ -20,6 +22,10 @@ do_install() {
# Install Weston systemd service and accompanying udev rule
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 \
@ -50,7 +56,7 @@ RDEPENDS_${PN} = "weston kbd"
INITSCRIPT_NAME = "weston"
INITSCRIPT_PARAMS = "start 9 5 2 . stop 20 0 1 6 ."
FILES_${PN} += "${sysconfdir}/xdg/weston/weston.ini ${systemd_system_unitdir}/weston@.service ${sysconfdir}/default/weston"
FILES_${PN} += "${sysconfdir}/xdg/weston/weston.ini ${systemd_system_unitdir}/weston@.service ${systemd_system_unitdir}/weston@.socket ${sysconfdir}/default/weston ${sysconfdir}/pam.d/"
CONFFILES_${PN} += "${sysconfdir}/xdg/weston/weston.ini ${sysconfdir}/default/weston"

View File

@ -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

View File

@ -1,15 +1,64 @@
# 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 Wayland Compositor
RequiresMountsFor=/run
Conflicts=plymouth-quit.service
After=systemd-user-sessions.service plymouth-quit-wait.service
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.
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
# 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]
User=%i
PAMName=login
EnvironmentFile=-/etc/default/weston
StandardError=journal
PermissionsStartOnly=true
IgnoreSIGPIPE=no
# Requires systemd-notify.so Weston plugin.
Type=notify
ExecStart=/usr/bin/weston --modules=systemd-notify.so
ExecStart=/usr/bin/weston-start -v -e -- $OPTARGS
# Optional watchdog setup
TimeoutStartSec=60
WatchdogSec=20
# The user to run Weston as.
User=%I
# Make sure working directory is users home directory
WorkingDirectory=/home/%i
# 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]
WantedBy=graphical.target
DefaultInstance=tty7

View File

@ -0,0 +1,10 @@
[Unit]
Description=Weston Wayland socket
After=user-runtime-dir@1000.service
[Socket]
ListenStream=/run/user/1000/wayland-%I
[Install]
WantedBy=sockets.target