The following sequence of events is possible with the current setup, especially where plymouth is started from the real-root (as opposed to the initramfs):
1. systemd launches plymouth-start and gdm at the same time
2. gdm queries to see if plymouth is running. plymouthd is not ready to respond yet, so gdm assumes no.
3. plymouthd finishes startup and gets splash on the screen
4. gdm starts X without doing the handoff with plymouth, since it believes plymouth is not running
5. X aborts as it can't get DRM master
This could be fixed by making plymouth-start.service Before=gdm.service, or by making gdm.service After=plymouth-start.service. Any preference?
i'd say gdm.service should add After=plymouth-start.service since it already has After=plymouth-quit.service
in fact, gdm.service should have all the same dependencies plymouth-quit.service has, since gdm.service Conflicts (replaces) plymouth-quit.service
Created attachment 114097 [details] [review]
systemd: make sure to only start plymouth is started
This commit makes sure gdm doesn't start in parallel with plymouth,
which could lead to plymouth activating after X is started.
Furthermore, GDM is replacing email@example.com and
plymouth-quit.service, so it needs to have the same dependencies
That looks good, although you might want to avoid eating the blankline above [Service] for cleanliness.