Seamless Visual Log-in Transition without VT blinking.

Hey all,

After working on this bugfix and becoming a little more familiar with the plasma ecosystem, I would like to propose and work on developing a small set of visual enhancements to the log-in process. The end goal of these enhancements would be to seamlessly enable the visual transition from plasma-login-manager to the user’s desktop, without the blinking or blacking out of the screen caused by the VT switch. Think KDE3’s behavior, GDM, or MacOS.

I have a general idea how this might be accomplished, but I’d like to get input on whether or not it’s something I should do. Also, get input on additional considerations of factors I may not be aware of, as the gaps in my Plasma knowledge are somewhat massive :slight_smile:

Plan

  1. Implement useUserBackground setting and behavior in plasma-login-manager
  2. TBD

Currently:

  • plasma-login-manager has a configured background that is displayed.
  • The background is blurred when a user is selected, the password input is focused and the user begins typing.
  • :red_circle: After authentication, the screen goes black and blinks as the VT is switched and plasma-login-manager quits
  • There’s a brief blackout as the session VT is activated.
  • :red_circle: KSplash shows a black background and the configured splash screen.
  • :red_circle: KSplash fades out and shows the user’s desktop.

General Proposal:

  • Add a useUserBackground setting to the plasma-login-manager kcm, to use the selected user’s background for the login manager background.
  • Changing users on a multi-user machine should transition the background. I propose using a simple crossfade for now.
  • Instead of closing plasma-login-manager immediately, and switching VTs, wait until the user’s session is ready and the first frame has been rendered. This is the GDM approach (source)
    • This would entail updating slotSessionStarted from the fixed 5 second timer to some explicit signal that the session is ready, with a fallback timer. Maybe watching for org.kde.KSplash.setStage(“desktop”)?
  • Change KSplash’s black background to be transparent under this condition (show the background)
  • For text-based log-in, use the default configured plasma-login-manager background, then transition to the user’s background after authentication.

Possible alternatives to the VT “flash”:

  • GDM doesn’t teardown until the first session frame is rendered- requires the same display mode to minimize flashing. Likely most practical path.
  • First session frame is rendered to an offscreen buffer, once it’s rendered then switch VT and commit.
  • Preserve the DRM framebuffer and have KWin’s first atomic commit be that same framebuffer.

Other Considerations:

  • A user can install a custom wallpaper provider. A number of these are not functional yet in current plasma-login-manager (like the animated wallpapers ones, or the Apply-style time-based transitioning ones). This is likely out of scope.
  • Users can install “live” wallpapers that require an internet connection, and potentially require authentication. My gut feeling is that this functionality should be limited to the built-in Image wallpaper type for now.
  • A user can install and use custom splash screens. Should I create a new one called “Seamless”, or update “Breeze”?
2 Likes