mbox series

[PATCHv12,0/6] Display manager proposal for x11 and wayland

Message ID 20251218191025.667701-2-rs@ti.com
Headers show
Series Display manager proposal for x11 and wayland | expand

Message

Randolph Sapp Dec. 18, 2025, 7:10 p.m. UTC
From: Randolph Sapp <rs@ti.com>

Hello maintainers, I wanted to wait for the latest tag to get cut before
bringing this back up, but here it is. This version addresses most of the
concerns I've seen regarding this series and adds on a little more functionality
considering we now allow for proper session selection.

This led me into a bit of a dive into the desktop-entry-spec [1] and associated
validator [2] that I wouldn't mind some opinions on as well if people are
curious about that.

Legacy details follow:

We've recently run into some issues with weston-init attempting to start Weston
prior to all drm devices being registered. There's not really a good, scriptable
mechanism to listen in to device registration events that works with the
existing weston-init package. Well, at least one that doesn't involve polling
files or introducing more dependency on the init system being used.

I also see there is also a lot of scripting around starting X11,
xserver-nodm-init, that (from my limited review) should experience the same
issue.

I'd like to introduce the following display manager for oe-core, emptty [3].
This display manager is, as described upstream, a "Dead simple CLI Display
Manager on TTY". It supports both x11 and wayland sessions, with togglable build
parameters to completely remove x11 and pam dependencies. It's licensed MIT,
which shouldn't be an issue for any users. (It is written in Go, if you have
opinions about that.)

With this, both weston-init and the xserver-nodm-init packages can be re-tuned
to leverage this display manager and simply add a user and emptty config for an
autologin session. This can resolve the current behavior across init systems
without additional scripting, and move some development out of this layer.

This lists myself as a maintainer of emptty as well as xserver-nodm-init and
xuser-account since these are currently unassigned and I've reworked them
significantly here.

Sorry for the delay on this series. I found a few bugs in emptty that I wanted
to address before submitting this officially.

[1] https://gitlab.freedesktop.org/xdg/xdg-specs/-/merge_requests/110
[2] https://gitlab.freedesktop.org/xdg/desktop-file-utils/-/merge_requests/28
[3] https://github.com/tvrzna/emptty

v2:
	- Address spelling issues in commit messages
	- Attempt to resolve some test related issues with weston
	- Add additional logs to X11 related tests
v3:
	- Reset AUTOLOGIN_MAX_RETRY to the default value of 2. When running
	  under QEMU the first auth attempt almost always fails.
v4:
	- Add a tmpfile entry for the x11 domain socket directory.
	- Remove some scripts associated with weston-init that were being
	  shipped with weston
v5:
	- Move tmpfile data to individual files
	- Add explicit entries for these in the FILES variable
v6:
	- Do not attempt to ship a tmpfiles.d entry in libx11
v7:
	- Include a backported fix for go/runtime to address segfault issues
	  reported on x86 platforms in previous revisions
v8:
	- Sign-off backported patch
v9:
	- Resolve merge conflict in maintainers file
v10:
	- Remove the ability to run x11 as root in xserver-nodm-init, see
	  https://lists.openembedded.org/g/openembedded-core/topic/115318655#msg223906
	  for more information
	- Merge xuser-account and xserver-nodm-init as this is now a direct
	  dependency with no other consumers
	- Fix warning about multiple providers for virtual-emptty-conf
v11:
	- Bump emptty revision to 0.15.0
	- Add session entries for all the session providers
	- Make autologin default session configurable for xserver-nodm-init
v12:
	- Add util-linux-mcookie as a runtime dependency to emptty when x11
	  support is enabled


Randolph Sapp (6):
  emptty: add version 0.15.0
  weston-init: convert to virtual-emptty-conf
  weston: remove deprecated weston-start scripts
  xserver-nodm-init: convert to virtual-emptty-conf
  xuser-account: merge with xserver-nodm-init
  xsessions: add unique desktop entries

 .../conf/distro/include/default-providers.inc |   1 +
 meta/conf/distro/include/maintainers.inc      |   5 +-
 meta/lib/oeqa/runtime/cases/weston.py         |  18 +-
 meta/lib/oeqa/runtime/cases/xorg.py           |   8 +
 meta/recipes-graphics/emptty/emptty-conf.bb   |  14 +
 meta/recipes-graphics/emptty/emptty.inc       |  26 ++
 .../recipes-graphics/emptty/emptty/emptty.tab |   1 +
 meta/recipes-graphics/emptty/emptty/pamconf   |  10 +
 meta/recipes-graphics/emptty/emptty_0.15.0.bb |  53 +++
 .../matchbox-session/matchbox-session.desktop |   6 +
 .../matchbox-session/matchbox-session_0.1.bb  |  13 +-
 .../files/mini-x-session.desktop              |   6 +
 .../mini-x-session/mini-x-session_0.1.bb      |  13 +-
 meta/recipes-graphics/wayland/weston-init.bb  |  66 +---
 .../wayland/weston-init/emptty.conf           |  77 ++++
 .../recipes-graphics/wayland/weston-init/init |  54 ---
 .../wayland/weston-init/weston-autologin      |  11 -
 .../wayland/weston-init/weston-socket.sh      |  20 -
 .../wayland/weston-init/weston-start          |  76 ----
 .../wayland/weston-init/weston.env            |   0
 .../wayland/weston-init/weston.service        |  71 ----
 .../wayland/weston-init/weston.socket         |  14 -
 .../weston/systemd-notify.weston-start        |   9 -
 .../wayland/weston/xwayland.weston-start      |   6 -
 .../recipes-graphics/wayland/weston_14.0.2.bb |  10 -
 .../x11-common/xserver-nodm-init/X11/Xsession |  38 --
 .../X11/Xsession.d/13xdgbasedirs.sh           |  19 -
 .../X11/Xsession.d/89xdgautostart.sh          |   7 -
 .../X11/Xsession.d/90XWindowManager.sh        |   7 -
 .../x11-common/xserver-nodm-init/Xserver      |  25 --
 .../xserver-nodm-init/capability.conf         |   2 -
 .../xserver-nodm-init/emptty.conf.in          |  77 ++++
 .../xserver-nodm-init/gplv2-license.patch     | 355 ------------------
 .../xserver-nodm-init}/system-xuser.conf      |   0
 .../x11-common/xserver-nodm-init/xserver-nodm |  75 ----
 .../xserver-nodm-init/xserver-nodm.conf.in    |   7 -
 .../xserver-nodm-init/xserver-nodm.service.in |  13 -
 .../x11-common/xserver-nodm-init_3.0.bb       |  73 ++--
 .../user-creation/xuser-account_0.1.bb        |  30 --
 39 files changed, 342 insertions(+), 974 deletions(-)
 create mode 100644 meta/recipes-graphics/emptty/emptty-conf.bb
 create mode 100644 meta/recipes-graphics/emptty/emptty.inc
 create mode 100644 meta/recipes-graphics/emptty/emptty/emptty.tab
 create mode 100644 meta/recipes-graphics/emptty/emptty/pamconf
 create mode 100644 meta/recipes-graphics/emptty/emptty_0.15.0.bb
 create mode 100644 meta/recipes-graphics/matchbox-session/matchbox-session/matchbox-session.desktop
 create mode 100644 meta/recipes-graphics/mini-x-session/files/mini-x-session.desktop
 create mode 100644 meta/recipes-graphics/wayland/weston-init/emptty.conf
 delete mode 100644 meta/recipes-graphics/wayland/weston-init/init
 delete mode 100644 meta/recipes-graphics/wayland/weston-init/weston-autologin
 delete mode 100755 meta/recipes-graphics/wayland/weston-init/weston-socket.sh
 delete mode 100755 meta/recipes-graphics/wayland/weston-init/weston-start
 delete mode 100644 meta/recipes-graphics/wayland/weston-init/weston.env
 delete mode 100644 meta/recipes-graphics/wayland/weston-init/weston.service
 delete mode 100644 meta/recipes-graphics/wayland/weston-init/weston.socket
 delete mode 100644 meta/recipes-graphics/wayland/weston/systemd-notify.weston-start
 delete mode 100644 meta/recipes-graphics/wayland/weston/xwayland.weston-start
 delete mode 100644 meta/recipes-graphics/x11-common/xserver-nodm-init/X11/Xsession
 delete mode 100644 meta/recipes-graphics/x11-common/xserver-nodm-init/X11/Xsession.d/13xdgbasedirs.sh
 delete mode 100644 meta/recipes-graphics/x11-common/xserver-nodm-init/X11/Xsession.d/89xdgautostart.sh
 delete mode 100644 meta/recipes-graphics/x11-common/xserver-nodm-init/X11/Xsession.d/90XWindowManager.sh
 delete mode 100644 meta/recipes-graphics/x11-common/xserver-nodm-init/Xserver
 delete mode 100644 meta/recipes-graphics/x11-common/xserver-nodm-init/capability.conf
 create mode 100644 meta/recipes-graphics/x11-common/xserver-nodm-init/emptty.conf.in
 delete mode 100644 meta/recipes-graphics/x11-common/xserver-nodm-init/gplv2-license.patch
 rename meta/{recipes-support/user-creation/files => recipes-graphics/x11-common/xserver-nodm-init}/system-xuser.conf (100%)
 delete mode 100755 meta/recipes-graphics/x11-common/xserver-nodm-init/xserver-nodm
 delete mode 100644 meta/recipes-graphics/x11-common/xserver-nodm-init/xserver-nodm.conf.in
 delete mode 100644 meta/recipes-graphics/x11-common/xserver-nodm-init/xserver-nodm.service.in
 delete mode 100644 meta/recipes-support/user-creation/xuser-account_0.1.bb

Comments

Mathieu Dubois-Briand Dec. 19, 2025, 10:17 a.m. UTC | #1
On Thu Dec 18, 2025 at 8:10 PM CET, rs wrote:
> From: Randolph Sapp <rs@ti.com>
>
> Hello maintainers, I wanted to wait for the latest tag to get cut before
> bringing this back up, but here it is. This version addresses most of the
> concerns I've seen regarding this series and adds on a little more functionality
> considering we now allow for proper session selection.
>
> This led me into a bit of a dive into the desktop-entry-spec [1] and associated
> validator [2] that I wouldn't mind some opinions on as well if people are
> curious about that.
>
> Legacy details follow:
>
> We've recently run into some issues with weston-init attempting to start Weston
> prior to all drm devices being registered. There's not really a good, scriptable
> mechanism to listen in to device registration events that works with the
> existing weston-init package. Well, at least one that doesn't involve polling
> files or introducing more dependency on the init system being used.
>
> I also see there is also a lot of scripting around starting X11,
> xserver-nodm-init, that (from my limited review) should experience the same
> issue.
>
> I'd like to introduce the following display manager for oe-core, emptty [3].
> This display manager is, as described upstream, a "Dead simple CLI Display
> Manager on TTY". It supports both x11 and wayland sessions, with togglable build
> parameters to completely remove x11 and pam dependencies. It's licensed MIT,
> which shouldn't be an issue for any users. (It is written in Go, if you have
> opinions about that.)
>
> With this, both weston-init and the xserver-nodm-init packages can be re-tuned
> to leverage this display manager and simply add a user and emptty config for an
> autologin session. This can resolve the current behavior across init systems
> without additional scripting, and move some development out of this layer.
>
> This lists myself as a maintainer of emptty as well as xserver-nodm-init and
> xuser-account since these are currently unassigned and I've reworked them
> significantly here.
>
> Sorry for the delay on this series. I found a few bugs in emptty that I wanted
> to address before submitting this officially.
>

Hi Randolph,

Thanks for the new version. It looks like it got better. Still, we got a
few issues on the autobuilder.

First, issue, probably because of nopasswdlogin group:

 NOTE: Resolving any missing task queue dependencies
2025-12-19 08:42:54,839 - oe-selftest - INFO -       ERROR: Nothing RPROVIDES 'xserver-nodm-init' (but /srv/pokybuild/yocto-worker/reproducible/build/layers/openembedded-core/meta/recipes-graphics/packagegroups/packagegroup-core-x11.bb RDEPENDS on or otherwise requires it)
2025-12-19 08:42:54,839 - oe-selftest - INFO -       xserver-nodm-init was skipped: Recipe xserver-nodm-init, package xserver-nodm-init: system groupname "nopasswdlogin" does not have a static ID defined. Add nopasswdlogin to one of these files: /srv/pokybuild/yocto-worker/reproducible/build/build-st/meta-selftest/files/static-group
2025-12-19 08:42:54,839 - oe-selftest - INFO -       NOTE: Runtime target 'xserver-nodm-init' is unbuildable, removing...
2025-12-19 08:42:54,839 - oe-selftest - INFO -       Missing or unbuildable dependency chain was: ['xserver-nodm-init']
2025-12-19 08:42:54,839 - oe-selftest - INFO -       ERROR: Nothing RPROVIDES 'packagegroup-core-x11-utils' (but /srv/pokybuild/yocto-worker/reproducible/build/layers/openembedded-core/meta/recipes-graphics/packagegroups/packagegroup-core-x11.bb, /srv/pokybuild/yocto-worker/reproducible/build/layers/openembedded-core/meta/recipes-graphics/packagegroups/packagegroup-core-x11-base.bb RDEPENDS on or otherwise requires it)
2025-12-19 08:42:54,840 - oe-selftest - INFO -       No eligible RPROVIDERs exist for 'packagegroup-core-x11-utils'
2025-12-19 08:42:54,840 - oe-selftest - INFO -       NOTE: Runtime target 'packagegroup-core-x11-utils' is unbuildable, removing...
2025-12-19 08:42:54,840 - oe-selftest - INFO -       Missing or unbuildable dependency chain was: ['packagegroup-core-x11-utils']
2025-12-19 08:42:54,840 - oe-selftest - INFO -       NOTE: Runtime target 'packagegroup-core-x11-base' is unbuildable, removing...
2025-12-19 08:42:54,840 - oe-selftest - INFO -       Missing or unbuildable dependency chain was: ['packagegroup-core-x11-base', 'packagegroup-core-x11-utils']
2025-12-19 08:42:54,840 - oe-selftest - INFO -       NOTE: Runtime target 'core-image-sato' is unbuildable, removing...
2025-12-19 08:42:54,840 - oe-selftest - INFO -       Missing or unbuildable dependency chain was: ['core-image-sato', 'packagegroup-core-x11-base', 'packagegroup-core-x11-utils']
2025-12-19 08:42:54,840 - oe-selftest - INFO -       ERROR: Nothing RPROVIDES 'packagegroup-core-x11' (but /srv/pokybuild/yocto-worker/reproducible/build/layers/openembedded-core/meta/recipes-graphics/packagegroups/packagegroup-core-x11.bb RDEPENDS on or otherwise requires it)
2025-12-19 08:42:54,840 - oe-selftest - INFO -       No eligible RPROVIDERs exist for 'packagegroup-core-x11'

https://autobuilder.yoctoproject.org/valkyrie/#/builders/37/builds/3049

The second one is again on xorg.XorgTest.test_xorg_running:

Traceback (most recent call last):
  File "/srv/pokybuild/yocto-worker/qa-extras2/build/layers/openembedded-core/meta/lib/oeqa/core/decorator/__init__.py", line 35, in wrapped_f
    return func(*args, **kwargs)
  File "/srv/pokybuild/yocto-worker/qa-extras2/build/layers/openembedded-core/meta/lib/oeqa/core/decorator/__init__.py", line 35, in wrapped_f
    return func(*args, **kwargs)
  File "/srv/pokybuild/yocto-worker/qa-extras2/build/layers/openembedded-core/meta/lib/oeqa/core/decorator/__init__.py", line 35, in wrapped_f
    return func(*args, **kwargs)
  File "/srv/pokybuild/yocto-worker/qa-extras2/build/layers/openembedded-core/meta/lib/oeqa/runtime/cases/xorg.py", line 31, in test_xorg_running
    self.assertEqual(status, 0, msg=msg)
    ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
AssertionError: 1 != 0 : Xorg does not appear to be running   PID USER       VSZ STAT COMMAND
...
RESULTS - xorg.XorgTest.test_xorg_running: FAILED (1.30s)

https://autobuilder.yoctoproject.org/valkyrie/#/builders/26/builds/2862

I had a look at the corresponding QEMU boot log, but there is no
error in there.

Thanks,
Mathieu
Randolph Sapp Dec. 19, 2025, 8:08 p.m. UTC | #2
On Fri Dec 19, 2025 at 4:17 AM CST, Mathieu Dubois-Briand wrote:
> On Thu Dec 18, 2025 at 8:10 PM CET, rs wrote:
>> From: Randolph Sapp <rs@ti.com>
>>
>> Hello maintainers, I wanted to wait for the latest tag to get cut before
>> bringing this back up, but here it is. This version addresses most of the
>> concerns I've seen regarding this series and adds on a little more functionality
>> considering we now allow for proper session selection.
>>
>> This led me into a bit of a dive into the desktop-entry-spec [1] and associated
>> validator [2] that I wouldn't mind some opinions on as well if people are
>> curious about that.
>>
>> Legacy details follow:
>>
>> We've recently run into some issues with weston-init attempting to start Weston
>> prior to all drm devices being registered. There's not really a good, scriptable
>> mechanism to listen in to device registration events that works with the
>> existing weston-init package. Well, at least one that doesn't involve polling
>> files or introducing more dependency on the init system being used.
>>
>> I also see there is also a lot of scripting around starting X11,
>> xserver-nodm-init, that (from my limited review) should experience the same
>> issue.
>>
>> I'd like to introduce the following display manager for oe-core, emptty [3].
>> This display manager is, as described upstream, a "Dead simple CLI Display
>> Manager on TTY". It supports both x11 and wayland sessions, with togglable build
>> parameters to completely remove x11 and pam dependencies. It's licensed MIT,
>> which shouldn't be an issue for any users. (It is written in Go, if you have
>> opinions about that.)
>>
>> With this, both weston-init and the xserver-nodm-init packages can be re-tuned
>> to leverage this display manager and simply add a user and emptty config for an
>> autologin session. This can resolve the current behavior across init systems
>> without additional scripting, and move some development out of this layer.
>>
>> This lists myself as a maintainer of emptty as well as xserver-nodm-init and
>> xuser-account since these are currently unassigned and I've reworked them
>> significantly here.
>>
>> Sorry for the delay on this series. I found a few bugs in emptty that I wanted
>> to address before submitting this officially.
>>
>
> Hi Randolph,
>
> Thanks for the new version. It looks like it got better. Still, we got a
> few issues on the autobuilder.
>
> First, issue, probably because of nopasswdlogin group:
>
>  NOTE: Resolving any missing task queue dependencies
> 2025-12-19 08:42:54,839 - oe-selftest - INFO -       ERROR: Nothing RPROVIDES 'xserver-nodm-init' (but /srv/pokybuild/yocto-worker/reproducible/build/layers/openembedded-core/meta/recipes-graphics/packagegroups/packagegroup-core-x11.bb RDEPENDS on or otherwise requires it)
> 2025-12-19 08:42:54,839 - oe-selftest - INFO -       xserver-nodm-init was skipped: Recipe xserver-nodm-init, package xserver-nodm-init: system groupname "nopasswdlogin" does not have a static ID defined. Add nopasswdlogin to one of these files: /srv/pokybuild/yocto-worker/reproducible/build/build-st/meta-selftest/files/static-group
> 2025-12-19 08:42:54,839 - oe-selftest - INFO -       NOTE: Runtime target 'xserver-nodm-init' is unbuildable, removing...
> 2025-12-19 08:42:54,839 - oe-selftest - INFO -       Missing or unbuildable dependency chain was: ['xserver-nodm-init']
> 2025-12-19 08:42:54,839 - oe-selftest - INFO -       ERROR: Nothing RPROVIDES 'packagegroup-core-x11-utils' (but /srv/pokybuild/yocto-worker/reproducible/build/layers/openembedded-core/meta/recipes-graphics/packagegroups/packagegroup-core-x11.bb, /srv/pokybuild/yocto-worker/reproducible/build/layers/openembedded-core/meta/recipes-graphics/packagegroups/packagegroup-core-x11-base.bb RDEPENDS on or otherwise requires it)
> 2025-12-19 08:42:54,840 - oe-selftest - INFO -       No eligible RPROVIDERs exist for 'packagegroup-core-x11-utils'
> 2025-12-19 08:42:54,840 - oe-selftest - INFO -       NOTE: Runtime target 'packagegroup-core-x11-utils' is unbuildable, removing...
> 2025-12-19 08:42:54,840 - oe-selftest - INFO -       Missing or unbuildable dependency chain was: ['packagegroup-core-x11-utils']
> 2025-12-19 08:42:54,840 - oe-selftest - INFO -       NOTE: Runtime target 'packagegroup-core-x11-base' is unbuildable, removing...
> 2025-12-19 08:42:54,840 - oe-selftest - INFO -       Missing or unbuildable dependency chain was: ['packagegroup-core-x11-base', 'packagegroup-core-x11-utils']
> 2025-12-19 08:42:54,840 - oe-selftest - INFO -       NOTE: Runtime target 'core-image-sato' is unbuildable, removing...
> 2025-12-19 08:42:54,840 - oe-selftest - INFO -       Missing or unbuildable dependency chain was: ['core-image-sato', 'packagegroup-core-x11-base', 'packagegroup-core-x11-utils']
> 2025-12-19 08:42:54,840 - oe-selftest - INFO -       ERROR: Nothing RPROVIDES 'packagegroup-core-x11' (but /srv/pokybuild/yocto-worker/reproducible/build/layers/openembedded-core/meta/recipes-graphics/packagegroups/packagegroup-core-x11.bb RDEPENDS on or otherwise requires it)
> 2025-12-19 08:42:54,840 - oe-selftest - INFO -       No eligible RPROVIDERs exist for 'packagegroup-core-x11'
>
> https://autobuilder.yoctoproject.org/valkyrie/#/builders/37/builds/3049
>
> The second one is again on xorg.XorgTest.test_xorg_running:
>
> Traceback (most recent call last):
>   File "/srv/pokybuild/yocto-worker/qa-extras2/build/layers/openembedded-core/meta/lib/oeqa/core/decorator/__init__.py", line 35, in wrapped_f
>     return func(*args, **kwargs)
>   File "/srv/pokybuild/yocto-worker/qa-extras2/build/layers/openembedded-core/meta/lib/oeqa/core/decorator/__init__.py", line 35, in wrapped_f
>     return func(*args, **kwargs)
>   File "/srv/pokybuild/yocto-worker/qa-extras2/build/layers/openembedded-core/meta/lib/oeqa/core/decorator/__init__.py", line 35, in wrapped_f
>     return func(*args, **kwargs)
>   File "/srv/pokybuild/yocto-worker/qa-extras2/build/layers/openembedded-core/meta/lib/oeqa/runtime/cases/xorg.py", line 31, in test_xorg_running
>     self.assertEqual(status, 0, msg=msg)
>     ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
> AssertionError: 1 != 0 : Xorg does not appear to be running   PID USER       VSZ STAT COMMAND
> ...
> RESULTS - xorg.XorgTest.test_xorg_running: FAILED (1.30s)
>
> https://autobuilder.yoctoproject.org/valkyrie/#/builders/26/builds/2862
>
> I had a look at the corresponding QEMU boot log, but there is no
> error in there.
>
> Thanks,
> Mathieu

Ah, thanks for that. Didn't realize we needed to cover the case where both
systemd and sysvinit were enabled, but sysvinit was considered to be the actual
runtime init provider. Out of curiosity, what's the consensus here? Should I
ship the legacy inittab entry only when a legacy init is set as
VIRTUAL-RUNTIME_init_manager or should I just always ship it? I'm more favorable
to only shipping it when necessary, but I've seen a mix in the past.

As for the nopasswdlogin issue, I'll make it take the place of the old wayland
group in that static group definition file. Should be good enough if I'm
understanding that error correctly. I'll also make sure this group is created in
the emptty recipe itself since the pam entry added there makes reference to it.

Unfortunately it seems both OEQA_REPRODUCIBLE_TEST_LEAF_TARGETS and
OEQA_REPRODUCIBLE_TEST_TARGET are unable to reproduce the issue, and I don't
really have the resources to build *world* twice in a reasonable amount of time.
May need to rely on you to check the result of that fix.

- Randolph