Bug 519302 - plasma-login-greeter: SIGSEGV in QWindow::screen() via dangling QWindowPrivate pointer when Wayland compositor replaces pending screen output during startup
Summary: plasma-login-greeter: SIGSEGV in QWindow::screen() via dangling QWindowPrivat...
Status: RESOLVED FIXED
Alias: None
Product: plasma-login-manager
Classification: Plasma
Component: general (other bugs)
Version First Reported In: 6.6.4
Platform: CachyOS Linux
: VHI grave
Target Milestone: ---
Assignee: Plasma Bugs List
URL: https://discuss.kde.org/t/plasmalogin...
Keywords: qt6, wayland-only
Depends on:
Blocks:
 
Reported: 2026-04-23 11:27 UTC by Lendy
Modified: 2026-07-23 08:36 UTC (History)
9 users (show)

See Also:
Latest Commit:
Version Fixed/Implemented In: 6.6.5
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Lendy 2026-04-23 11:27:02 UTC
reference:
https://discuss.kde.org/t/plasmaloginmanager-blank-screen-only-on-first-cold-boot/46087/2

```
TITLE
plasma-login-greeter: SIGSEGV in QWindow::screen() via dangling QWindowPrivate
pointer when Wayland compositor replaces pending screen output during startup

COMPONENT
plasma-login-manager

VERSION
6.6.4-1.fc43

SEVERITY
Critical -- process terminates on every cold boot

---

ENVIRONMENT

  OS:         Fedora 43, x86_64 (kernel 6.19.11-200.fc43.x86_64)
  Package:    plasma-login-manager-6.6.4-1.fc43.x86_64
  Binary:     /usr/libexec/plasma-login-greeter
  Build ID:   ec6b236da37d731156d601f1f4d19fae54a14ffb
  Qt:         6.10.3 (libQt6Gui.so.6, libQt6WaylandClient.so.6)
  Session:    Wayland
  Display:    Single monitor
  User:       plasmalogin (UID 967, GID 967)
  Unit:       user@967.service -> user unit plasma-login.service

---

OBSERVABLE BEHAVIOR

On every cold boot, plasma-login-greeter terminates with SIGSEGV approximately
140 seconds into the boot sequence. The greeter does not display. The crash
is visible in dmesg:

  [140.093515] plasma-login-gr[2275]: segfault at 8e ip 00007ff359d532e4
               sp 00007fff0cb6e7a8 error 4 in
               libQt6Gui.so.6.10.3[1532e4,7ff359c00000+795000]
               likely on CPU 1 (core 1, socket 0)

  fault address: 0x8e (error 4 = user-mode read from unmapped address)
  faulting IP:   libQt6Gui.so.6 + 0x1532e4 = QWindow::screen()

---

CRASH DETAILS

  Signal:       SIGSEGV
  Fault addr:   0x8e (0xe == 14 == likely vtable offset dereference on
                freed/null object, classic use-after-free fingerprint)
  Crash site:   QWindow::screen() -- qwindow.cpp:2261

Source at crash point (qt6-qtbase-6.10.3):

  // qwindow.cpp:2261
  QScreen *QWindow::screen() const
  {
      Q_D(const QWindow);
      return d->parentWindow ? d->parentWindow->screen()   // <-- CRASH
                             : d->topLevelScreen.data();
  }

  d = 0xe

The d_func() macro expands to reinterpret_cast<const QWindowPrivate*>(d_ptr.d).
A value of 0xe for d_ptr.d means the QWindow object's d-pointer is corrupt or
freed. Dereferencing 0xe + offset of parentWindow (0x80 in QWindowPrivate)
yields 0x8e, which matches the fault address exactly.

---

FULL BACKTRACE -- THREAD 1 (crashing thread, LWP 2275)

  #0  QWindow::screen (this=<optimized out>)
          at qwindow.cpp:2261
          d = 0xe                              <-- QWindowPrivate* is freed/corrupt

  #1  LoginGreeter::createWindowForScreen(QScreen*)::{lambda(QScreen*)#1}
          ::operator()(QScreen*) const
          at src/frontend/greeter/main.cpp:56
          window = 0x55b1c5a67200              <-- captured QQuickWindow* (destroyed)
          screenRemoved = 0x7ff2f46dab80       <-- the removed QScreen*

  #2-#6  Qt slot dispatch machinery
          (QtPrivate::FunctorCall, QCallableObject::impl, QSlotObjectBase::call)

  #7  QtPrivate::QSlotObjectBase::call
          at qobjectdefs_impl.h:461
          this = 0x55b1c59fe540

  #8  doActivate<false>
          at qobject.cpp:4273
          sender    = 0x7fff0cb6f300
          receiver  = 0x7fff0cb6f340
          signal_index (screenRemoved) = 10

  #9  QMetaObject::activate
          at qobject.cpp:4333

  #10 QGuiApplication::screenRemoved
          at moc_qguiapplication.cpp:313
          _t1 = 0x7ff2f46dab80               <-- the QScreen being removed

  #11 QWindowSystemInterface::handleScreenRemoved
          at qcoreapplication.h:97
          platformScreen = 0x7ff2f45ec660
          screen         = 0x7ff2f46dab80
          newPrimaryScreen = 0x55b1c5993680

  #12 QtWaylandClient::QWaylandDisplay::handleScreenInitialized
          at qwaylanddisplay.cpp:617
          (note: screen initialization triggering screen *removal* -- see analysis)

  #13 QtWaylandClient::QWaylandScreen::maybeInitialize
          at qwaylandscreen.cpp:82

  #14-#22  Wayland dispatch chain:
          ffi_call_unix64 / ffi_call_int / ffi_call
          wl_closure_invoke (libwayland-client.so.0)
          dispatch_event / wl_display_dispatch_queue_pending
          QtWaylandClient::EventThread::readAndDispatchEvents
          QObject::event / QCoreApplication::notifyInternal2
          QCoreApplicationPrivate::sendPostedEvents
          postEventSourceDispatch / GLib main context dispatch

  #23 main
          at src/frontend/greeter/main.cpp:136

---

ROOT CAUSE ANALYSIS

1. WAYLAND OUTPUT NEGOTIATION DURING STARTUP

   The Wayland protocol requires multiple round-trips before a wl_output
   (screen) is considered fully initialized. Qt's Wayland platform plugin
   tracks this with a "pending screens" list and a set of required events
   (e.g., wl_output.geometry, wl_output.mode, wl_output.done).

   QWaylandScreen::maybeInitialize() (qwaylandscreen.cpp:73-82) checks
   whether all required events have been received. Once they have,
   QWaylandDisplay::handleScreenInitialized() is called.

   In handleScreenInitialized() (qwaylanddisplay.cpp:617), Qt may determine
   that the newly initialized output duplicates or replaces an existing
   screen (e.g., a placeholder created before geometry was known). In that
   case it calls QWindowSystemInterface::handleScreenRemoved() to remove the
   superseded screen before promoting the new one.

   This sequence fires the QGuiApplication::screenRemoved signal during the
   compositor's initial output negotiation phase -- even on single-monitor
   systems. It is not a multi-monitor scenario; it is a normal part of
   single-monitor Wayland startup on this hardware/compositor combination.

2. THE GREETER'S screenRemoved HANDLER

   In main.cpp, createWindowForScreen() creates a QQuickWindow per screen
   and connects a lambda to QGuiApplication::screenRemoved:

     // main.cpp:56 (reconstructed from backtrace symbols)
     connect(app, &QGuiApplication::screenRemoved, greeter,
             [window](QScreen *screenRemoved) {
                 if (window->screen() == screenRemoved) {   // <-- CRASH
                     // presumably: close or move the window
                 }
             });

   The lambda captures window (a raw QQuickWindow*) by value. When
   screenRemoved fires for the placeholder screen during output negotiation,
   Qt may have already destroyed the QQuickWindow associated with that
   placeholder (QWindowSystemInterface::handleScreenRemoved triggers
   QWindow destruction for windows on the removed screen). By the time the
   lambda executes, window is a dangling pointer. Calling window->screen()
   dereferences d_ptr.d = 0xe and crashes.

3. WHY d = 0xe

   QObject stores its private data at d_ptr.d. When a QObject subclass is
   destroyed, the d-pointer is not explicitly zeroed. If the allocation is
   reclaimed and partially reused before the dangling pointer is accessed,
   d_ptr.d will contain whatever the allocator wrote there -- in this case
   0xe, producing a fault at 0xe + offsetof(QWindowPrivate, parentWindow)
   = 0x8e, which matches the kernel's reported fault address exactly.

---

SUGGESTED FIX

Use QPointer<QQuickWindow> to safely detect window destruction before
dereferencing:

  // main.cpp -- createWindowForScreen()
  QPointer<QQuickWindow> safeWindow = window;

  connect(app, &QGuiApplication::screenRemoved, greeter,
          [safeWindow](QScreen *screenRemoved) {
              if (!safeWindow)           // window was already destroyed
                  return;
              if (safeWindow->screen() == screenRemoved) {
                  // handle screen removal
              }
          });

QPointer is automatically zeroed when the pointed-to QObject is destroyed,
making the null check safe without requiring manual lifecycle management.

Additionally, the connection should be disconnected or the lambda should
become a no-op once the greeter has finished initializing, to avoid acting
on screen topology changes that arrive after startup is complete.

---

WORKAROUND

None currently known that does not involve modifying the binary or compositor
configuration. The crash occurs on every cold boot; warm reboots may or may
not reproduce depending on compositor state at startup.

---

REPRODUCTION

  1. Cold boot on affected hardware (confirmed single-monitor Wayland system)
  2. Observe greeter fail to display
  3. Confirm via: journalctl -b | grep plasma-login-greeter
                  dmesg | grep plasma-login-gr
                  coredumpctl list

  Approximate time to crash from boot: 140 seconds (varies by hardware).

---

CORE DUMP

  Captured via systemd-coredump.
  coredumpctl info 2275

  Storage: /var/lib/systemd/coredump/
           core.plasma-login-gr.967.<bootid>.2275.<timestamp>.zst
  Size:    8.4M (compressed)
```
Comment 1 Lendy 2026-04-23 12:40:06 UTC
cc: jgrulich@redhat.com at the Fedora KDE sig
Comment 2 David Edmundson 2026-04-23 13:40:49 UTC
Urgh, I see it:

You would need to

create screen A
create screen B
delete screen B (this is fine, but the connect is not bound and now the captured window is dangling)
delete screen A (this now crashes evaluating the lambda set up for screen B)

Using QPointer is a bad solution, we should scope the connect.

*or* just pivot to letting layer shell dismiss the window and deleting on that.
Comment 3 Bug Janitor Service 2026-04-23 14:02:01 UTC
A possibly relevant merge request was started @ https://invent.kde.org/plasma/plasma-login-manager/-/merge_requests/128
Comment 4 Oliver Beard 2026-04-23 15:13:19 UTC
Git commit d4da6b79377756796081a19c1f628263b6e3a442 by Oliver Beard, on behalf of David Edmundson.
Committed on 23/04/2026 at 14:40.
Pushed by davidedmundson into branch 'master'.

greeter: Avoid leaking connections for window destruction

When a screen is removed we delete the window, because the connect was scoped
to the greeter this connect lingered with the captured 'window' pointer dangling.

We also dropped the geometry connection as this is done implicitly
via layer-shell anyway.

M  +1    -4    src/frontend/greeter/main.cpp
M  +0    -4    src/frontend/wallpaper/wallpaperapp.cpp

https://invent.kde.org/plasma/plasma-login-manager/-/commit/d4da6b79377756796081a19c1f628263b6e3a442
Comment 5 Lendy 2026-04-23 19:03:28 UTC
Hi.
Thanks for the quick turnaround on this!
I see it's committed to `master`.
Looking at 
  https://community.kde.org/Schedules/Plasma_6#Future_releases
I see 
  6.6.5 	Bugfix Release 	Tue 2026-05-12
I'm not sure where to look to check when this fix gets into Distro -- Fedora in my case; v43 right now, v44 any day now.
Does this project push from master>6.6.5 , and then the Distro(s) pick that up on regular update schedule?
Or does the Distro need to drive it?  Maybe with a ping from me?
Comment 6 Oliver Beard 2026-04-23 19:10:23 UTC
As I understand it Fedora are quick to pick up Plasma bugfix releases. Distros can cherry-pick commits before they land in a release.

I'll recommend that we ask distros to cherry-pick this sooner after also looking at the wallpaper, as reports that users are left with a black screen implies that both are deficient.
Comment 7 Oliver Beard 2026-04-23 19:34:42 UTC
Git commit b967468299bd28bffcfaad04cc4ee0485a80616e by Oliver Beard.
Committed on 23/04/2026 at 19:34.
Pushed by olib into branch 'Plasma/6.6'.

greeter: Avoid leaking connections for window destruction

When a screen is removed we delete the window, because the connect was scoped
to the greeter this connect lingered with the captured 'window' pointer dangling.

We also dropped the geometry connection as this is done implicitly
via layer-shell anyway.


(cherry picked from commit d4da6b79377756796081a19c1f628263b6e3a442)

Co-authored-by: David Edmundson <kde@davidedmundson.co.uk>

M  +1    -4    src/frontend/greeter/main.cpp
M  +0    -4    src/frontend/wallpaper/wallpaperapp.cpp

https://invent.kde.org/plasma/plasma-login-manager/-/commit/b967468299bd28bffcfaad04cc4ee0485a80616e
Comment 8 Lendy 2026-04-23 22:38:32 UTC
(In reply to Oliver Beard from comment #6)

Hi.
Ok, Thanks. It sounds like it gets done pretty much on auto-pilot.
Just in case, I see in the Fedora pkg listing
https://src.fedoraproject.org/rpms/plasma-login-manager
it's mainted by 'ngompa'.
I don't see them on the list here.
I guess cc: for info won't hurt.
Comment 9 Fernando Marcelino Muniz 2026-05-15 15:37:03 UTC
On 6.6.5 sometimes PLM seems to soft-lock and not read any inputs with the exception of the ESC key after I end my session then unplug and plug the external screen's HDMI.
Comment 10 Lendy 2026-05-17 12:06:27 UTC
(In reply to David Edmundson from comment #2)
> Urgh, I see it:
> 
> You would need to
> 
> create screen A
> create screen B
> delete screen B (this is fine, but the connect is not bound and now the
> captured window is dangling)
> delete screen A (this now crashes evaluating the lambda set up for screen B)

Fedora finally released their update package,
```
$ rpm -q plasma-login-manager
	plasma-login-manager-6.6.5-1.fc44.x86_64
```

Booting now with screen OFF fails differently.
Once I turn ON the screen after boot,The KDE greeter > login field does show up on screen.
No wallpaper, just black background.
If I enter my password, it doesn't login.  It just sits.
I CAN ssh to the machine.  It's running at the system level OK.  Just no DE.

If I boot with the screen ON, all's still good.

```
=== PRIOR BOOT  (screen OFF) ===
May 17 07:18:28 lendy.loc systemd[1]: Starting plasmalogin.service - Plasma Login Manager...
May 17 07:18:28 lendy.loc systemd[1]: Started plasmalogin.service - Plasma Login Manager.
May 17 07:18:30 lendy.loc plasmalogin-helper[1768]: Detected locale "C" with character encoding "ANSI_X3.4-1968", which is not UTF-8.
May 17 07:18:30 lendy.loc plasmalogin-helper[1768]: pam_unix(plasmalogin-greeter:session): session opened for user plasmalogin(uid=967) by (uid=0)
May 17 07:18:32 lendy.loc systemd-logind[1646]: New session 'c1' of user 'plasmalogin' with class 'greeter' and type 'wayland'.
May 17 07:18:32 lendy.loc systemd-logind[1646]: New session '1' of user 'plasmalogin' with class 'manager-early' and type 'unspecified'.
May 17 07:18:33 lendy.loc systemd[1]: Started session-c1.scope - Session c1 of User plasmalogin.
May 17 07:18:33 lendy.loc plasmalogin-helper[1768]: Starting Wayland user session: "/etc/plasmalogin/wayland-session" "/usr/bin/startplasma-login-wayland"
May 17 07:18:49 lendy.loc plasma-login-wallpaper[2293]: The PlasmaWindowManagement protocol hasn't activated in time. The client possibly got denied by kwin? Check kwin output.
May 17 07:18:50 lendy.loc plasma-login-greeter[2292]: Unknown message received from daemon.
May 17 07:18:50 lendy.loc plasma-login-greeter[2292]: Unknown message received from daemon.
May 17 07:18:50 lendy.loc plasma-login-greeter[2292]: Unknown message received from daemon.
May 17 07:18:50 lendy.loc plasma-login-greeter[2292]: Unknown message received from daemon.
May 17 07:18:50 lendy.loc plasma-login-greeter[2292]: Unknown message received from daemon.
May 17 07:18:50 lendy.loc plasma-login-greeter[2292]: Unknown message received from daemon.
May 17 07:18:50 lendy.loc plasma-login-greeter[2292]: Unknown message received from daemon.
May 17 07:18:50 lendy.loc plasma-login-greeter[2292]: Unknown message received from daemon.
May 17 07:18:50 lendy.loc plasma-login-greeter[2292]: Unknown message received from daemon.
May 17 07:18:50 lendy.loc plasma-login-greeter[2292]: Unknown message received from daemon.
May 17 07:18:50 lendy.loc plasma-login-greeter[2292]: Unknown message received from daemon.
May 17 07:18:50 lendy.loc plasma-login-greeter[2292]: Unknown message received from daemon.
May 17 07:18:50 lendy.loc plasma-login-greeter[2292]: Unknown message received from daemon.
May 17 07:18:50 lendy.loc plasma-login-greeter[2292]: Unknown message received from daemon.
May 17 07:18:50 lendy.loc plasma-login-greeter[2292]: Unknown message received from daemon.
May 17 07:22:46 lendy.loc plasma-login-wallpaper[2293]: There are no outputs - creating placeholder screen
May 17 07:22:46 lendy.loc plasma-login-greeter[2292]: There are no outputs - creating placeholder screen
May 17 07:22:46 lendy.loc plasma-login-greeter[2292]: Creating a layer shell for placeholder screen. This will be positioned incorrectly
May 17 07:22:48 lendy.loc plasma-login-greeter[2292]: <Unknown File>: Singleton registered by registerSingletonInstance must only be accessed from one engine
May 17 07:22:48 lendy.loc plasma-login-greeter[2292]: <Unknown File>: qmlRegisterSingletonType(): "Authenticator" is not available because the callback function returns a null pointer.
May 17 07:22:48 lendy.loc plasma-login-greeter[2292]: <Unknown File>: Singleton registered by registerSingletonInstance must only be accessed from one engine
May 17 07:22:48 lendy.loc plasma-login-greeter[2292]: <Unknown File>: qmlRegisterSingletonType(): "BlurScreenBridge" is not available because the callback function returns a null pointer.
May 17 07:22:48 lendy.loc plasma-login-greeter[2292]: <Unknown File>: Singleton registered by registerSingletonInstance must only be accessed from one engine
May 17 07:22:48 lendy.loc plasma-login-greeter[2292]: <Unknown File>: qmlRegisterSingletonType(): "UserModel" is not available because the callback function returns a null pointer.
May 17 07:22:48 lendy.loc plasma-login-greeter[2292]: <Unknown File>: Singleton registered by registerSingletonInstance must only be accessed from one engine
May 17 07:22:48 lendy.loc plasma-login-greeter[2292]: <Unknown File>: qmlRegisterSingletonType(): "Settings" is not available because the callback function returns a null pointer.
May 17 07:22:48 lendy.loc plasma-login-greeter[2292]: <Unknown File>: Singleton registered by registerSingletonInstance must only be accessed from one engine
May 17 07:22:48 lendy.loc plasma-login-greeter[2292]: <Unknown File>: qmlRegisterSingletonType(): "SessionModel" is not available because the callback function returns a null pointer.
May 17 07:22:48 lendy.loc plasma-login-greeter[2292]: <Unknown File>: Singleton registered by registerSingletonInstance must only be accessed from one engine
May 17 07:22:48 lendy.loc plasma-login-greeter[2292]: <Unknown File>: qmlRegisterSingletonType(): "SessionManagement" is not available because the callback function returns a null pointer.
May 17 07:22:48 lendy.loc plasma-login-greeter[2292]: qrc:/qt/qml/org/kde/plasma/login/Login.qml:114: TypeError: Cannot read property 'needsPassword' of null
May 17 07:22:48 lendy.loc plasma-login-greeter[2292]: qrc:/qt/qml/org/kde/plasma/login/Login.qml:151: TypeError: Cannot read property 'needsPassword' of null
May 17 07:22:48 lendy.loc plasma-login-greeter[2292]: qrc:/qt/qml/org/kde/plasma/login/Main.qml:180:25: Unable to assign [undefined] to bool
May 17 07:22:48 lendy.loc plasma-login-greeter[2292]: qrc:/qt/qml/org/kde/plasma/login/Main.qml:189:25: Unable to assign [undefined] to bool
May 17 07:22:48 lendy.loc plasma-login-greeter[2292]: qrc:/qt/qml/org/kde/plasma/login/Main.qml:198:25: Unable to assign [undefined] to bool
May 17 07:22:48 lendy.loc plasma-login-greeter[2292]: qrc:/qt/qml/org/kde/plasma/login/Main.qml:204:25: Unable to assign [undefined] to bool
May 17 07:22:48 lendy.loc plasma-login-greeter[2292]: qrc:/qt/qml/org/kde/plasma/login/SessionButton.qml:21: TypeError: Cannot call method 'index' of null
May 17 07:22:48 lendy.loc plasma-login-greeter[2292]: qrc:/qt/qml/org/kde/plasma/login/SessionButton.qml:20: TypeError: Cannot call method 'index' of null
May 17 07:22:48 lendy.loc plasma-login-greeter[2292]: qrc:/qt/qml/org/kde/plasma/login/GreeterState.qml:58: TypeError: Property 'indexOfData' of object org.kde.plasma.login/UserModel is not a function
May 17 07:22:48 lendy.loc plasma-login-greeter[2292]: qrc:/qt/qml/org/kde/plasma/login/GreeterState.qml:44: TypeError: Property 'indexOfData' of object org.kde.plasma.login/SessionModel is not a function
May 17 07:22:48 lendy.loc plasma-login-greeter[2292]: qrc:/qt/qml/org/kde/plasma/login/GreeterState.qml:37: TypeError: Property 'rowCount' of object org.kde.plasma.login/UserModel is not a function
May 17 07:22:48 lendy.loc plasma-login-greeter[2292]: qrc:/qt/qml/org/kde/plasma/login/Main.qml:101:13: Unable to assign [undefined] to bool
May 17 07:23:27 lendy.loc plasma-login-greeter[2292]: qrc:/qt/qml/org/kde/plasma/login/GreeterState.qml:147: TypeError: Property 'login' of object org.kde.plasma.login/Authenticator is not a function
May 17 07:34:29 lendy.loc plasmalogin-helper[1768]: Signal received: SIGTERM
May 17 07:34:29 lendy.loc plasmalogin[1723]: Error from greeter session: "Process crashed"
May 17 07:34:29 lendy.loc plasmalogin[1723]: Auth: plasmalogin-helper (--socket /tmp/plasmalogin-auth-a3f72c19-e541-4b8d-917c-6d2e0f3a8b45 --id 2 --start /usr/bin/startplasma-login-wayland --user plasmalogin --greeter) crashed (exit code 1)
May 17 07:34:29 lendy.loc systemd[1]: Stopping session-c1.scope - Session c1 of User plasmalogin...
May 17 07:34:29 lendy.loc plasmalogin[1723]: Error from greeter session: "Process crashed"
May 17 07:34:29 lendy.loc plasmalogin[1723]: Auth: plasmalogin-helper exited with 1
May 17 07:34:29 lendy.loc plasmalogin[1723]: Signal received: SIGTERM
May 17 07:34:29 lendy.loc plasma-login-greeter[2292]: Socket error:  "QLocalSocket: Remote closed"
May 17 07:34:30 lendy.loc systemd[1]: Stopping plasmalogin.service - Plasma Login Manager...
May 17 07:34:30 lendy.loc systemd[1]: plasmalogin.service: Deactivated successfully.
May 17 07:34:30 lendy.loc systemd[1]: Stopped plasmalogin.service - Plasma Login Manager.
May 17 07:34:30 lendy.loc systemd[1]: Stopped session-c1.scope - Session c1 of User plasmalogin.
```

```
=== CURRENT BOOT (screen ON) ===
May 17 07:35:33 lendy.loc systemd[1]: Starting plasmalogin.service - Plasma Login Manager...
May 17 07:35:33 lendy.loc systemd[1]: Started plasmalogin.service - Plasma Login Manager.
May 17 07:35:37 lendy.loc plasmalogin-helper[2150]: Detected locale "C" with character encoding "ANSI_X3.4-1968", which is not UTF-8.
May 17 07:35:38 lendy.loc systemd-logind[1652]: New session 'c1' of user 'plasmalogin' with class 'greeter' and type 'wayland'.
May 17 07:35:38 lendy.loc systemd-logind[1652]: New session '1' of user 'plasmalogin' with class 'manager-early' and type 'unspecified'.
May 17 07:35:39 lendy.loc systemd[1]: Started session-c1.scope - Session c1 of User plasmalogin.
May 17 07:35:39 lendy.loc plasmalogin-helper[2150]: Starting Wayland user session: "/etc/plasmalogin/wayland-session" "/usr/bin/startplasma-login-wayland"
May 17 07:35:50 lendy.loc plasma-login-wallpaper[2299]: The PlasmaWindowManagement protocol hasn't activated in time. The client possibly got denied by kwin? Check kwin output.
May 17 07:35:53 lendy.loc plasma-login-greeter[2298]: Unknown message received from daemon.
May 17 07:35:53 lendy.loc plasma-login-greeter[2298]: Unknown message received from daemon.
May 17 07:35:53 lendy.loc plasma-login-greeter[2298]: Unknown message received from daemon.
May 17 07:35:53 lendy.loc plasma-login-greeter[2298]: Unknown message received from daemon.
May 17 07:35:53 lendy.loc plasma-login-greeter[2298]: Unknown message received from daemon.
May 17 07:35:53 lendy.loc plasma-login-greeter[2298]: Unknown message received from daemon.
May 17 07:35:53 lendy.loc plasma-login-greeter[2298]: Unknown message received from daemon.
May 17 07:35:53 lendy.loc plasma-login-greeter[2298]: Unknown message received from daemon.
May 17 07:35:53 lendy.loc plasma-login-greeter[2298]: Unknown message received from daemon.
May 17 07:35:53 lendy.loc plasma-login-greeter[2298]: Unknown message received from daemon.
May 17 07:35:53 lendy.loc plasma-login-greeter[2298]: Unknown message received from daemon.
May 17 07:35:53 lendy.loc plasma-login-greeter[2298]: Unknown message received from daemon.
May 17 07:35:53 lendy.loc plasma-login-greeter[2298]: Unknown message received from daemon.
May 17 07:35:53 lendy.loc plasma-login-greeter[2298]: Unknown message received from daemon.
May 17 07:35:53 lendy.loc plasma-login-greeter[2298]: Unknown message received from daemon.
May 17 07:43:56 lendy.loc plasmalogin-helper[2550]: Detected locale "C" with character encoding "ANSI_X3.4-1968", which is not UTF-8.
May 17 07:43:58 lendy.loc plasmalogin-helper[2550]: Starting Wayland user session: "/etc/plasmalogin/wayland-session" "/usr/libexec/plasma-dbus-run-session-if-needed /usr/bin/startplasma-wayland"
May 17 07:44:03 lendy.loc plasmalogin-helper[2150]: Signal received: SIGTERM
May 17 07:44:03 lendy.loc plasmalogin[1716]: Auth: plasmalogin-helper exited with 255
$
```
Comment 11 Sebastian Baier 2026-06-23 08:35:40 UTC
I can reproduce a very similar issue on Plasma Login Manager 6.7.0, so after the fix for bug 519302 there still seems to be a remaining “no outputs / placeholder screen” failure mode.

System:
- OS: CachyOS
- Kernel: 7.1.1-2-cachyos
- Plasma Login Manager: 6.7.0-2
- KWin: 6.7.0-3.1
- Plasma Workspace: 6.7.0-1.1
- Qt Declarative: 6.11.1-3.1
- GPU: NVIDIA GeForce RTX 4080 SUPER
- NVIDIA driver: 610.43.02
- Session: Wayland
- Monitor: Samsung Odyssey G93SC, DisplayPort DP-1, 5120x1440@240Hz, HDR enabled

Symptom:
Sometimes after boot, the Plasma Login greeter appears without wallpaper. The password field is visible, but entering the password does not start the session. It just stays on the greeter.

This seems correlated with monitor/DisplayPort wakeup or standby behavior. The monitor is not actively powered off, but uses its built-in standby. Sometimes it does not wake correctly when the PC boots. The same physical monitor has appeared in KWin config with multiple EDID identifiers/hashes for DP-1, suggesting unstable EDID/DisplayPort detection.

Relevant journal excerpt from a failed boot:

```
Jun 23 09:14:38 systemd[1]: Starting Plasma Login Manager...
Jun 23 09:14:38 systemd[1]: Started Plasma Login Manager.
Jun 23 09:14:38 plasmalogin[900]: Greeter session started successfully
Jun 23 09:14:39 kwin_wayland[955]: No backend specified, automatically choosing drm
Jun 23 09:14:39 plasma-login-greeter[994]: Connected to the daemon.
Jun 23 09:14:40 plasma-login-wallpaper[995]: There are no outputs - creating placeholder screen
Jun 23 09:14:40 plasma-login-greeter[994]: There are no outputs - creating placeholder screen
Jun 23 09:14:40 plasma-login-greeter[994]: Creating a layer shell for placeholder screen. This will be positioned incorrectly
Jun 23 09:14:42 plasma-login-greeter[994]: <Unknown File>: Singleton registered by registerSingletonInstance must only be accessed from one engine
Jun 23 09:14:42 plasma-login-greeter[994]: <Unknown File>: qmlRegisterSingletonType(): "Authenticator" is not available because the callback function returns a null pointer.
Jun 23 09:14:42 plasma-login-greeter[994]: <Unknown File>: qmlRegisterSingletonType(): "BlurScreenBridge" is not available because the callback function returns a null pointer.
Jun 23 09:14:42 plasma-login-greeter[994]: <Unknown File>: qmlRegisterSingletonType(): "UserModel" is not available because the callback function returns a null pointer.
Jun 23 09:14:42 plasma-login-greeter[994]: <Unknown File>: qmlRegisterSingletonType(): "Settings" is not available because the callback function returns a null pointer.
Jun 23 09:14:42 plasma-login-greeter[994]: <Unknown File>: qmlRegisterSingletonType(): "SessionModel" is not available because the callback function returns a null pointer.
Jun 23 09:14:42 plasma-login-greeter[994]: <Unknown File>: qmlRegisterSingletonType(): "SessionManagement" is not available because the callback function returns a null pointer.
Jun 23 09:14:42 plasma-login-greeter[994]: qrc:/qt/qml/org/kde/plasma/login/Login.qml:114: TypeError: Cannot read property 'needsPassword' of null
Jun 23 09:14:42 plasma-login-greeter[994]: qrc:/qt/qml/org/kde/plasma/login/Login.qml:151: TypeError: Cannot read property 'needsPassword' of null
Jun 23 09:14:42 plasma-login-greeter[994]: qrc:/qt/qml/org/kde/plasma/login/SessionButton.qml:21: TypeError: Cannot call method 'index' of null
Jun 23 09:14:42 plasma-login-greeter[994]: qrc:/qt/qml/org/kde/plasma/login/GreeterState.qml:58: TypeError: Property 'indexOfData' of object org.kde.plasma.login/UserModel is not a function
Jun 23 09:14:42 plasma-login-greeter[994]: qrc:/qt/qml/org/kde/plasma/login/GreeterState.qml:44: TypeError: Property 'indexOfData' of object org.kde.plasma.login/SessionModel is not a function
Jun 23 09:14:42 plasma-login-greeter[994]: qrc:/qt/qml/org/kde/plasma/login/GreeterState.qml:37: TypeError: Property 'rowCount' of object org.kde.plasma.login/UserModel is not a function
Jun 23 09:59:33 plasma-login-greeter[994]: qrc:/qt/qml/org/kde/plasma/login/GreeterState.qml:147: TypeError: Property 'login' of object org.kde.plasma.login/Authenticator is not a function
```

After restarting Plasma Login, login works:

```
Jun 23 09:59:51 plasmalogin[900]: Auth: plasmalogin-helper exited with 1
Jun 23 09:59:51 systemd[1]: plasmalogin.service: Deactivated successfully.
Jun 23 10:00:03 systemd[1]: Starting Plasma Login Manager...
Jun 23 10:00:03 systemd[1]: Started Plasma Login Manager.
Jun 23 10:00:14 plasmalogin[4334]: Message received from greeter: Login
Jun 23 10:00:14 plasmalogin[4334]: Authentication for user "sebastian" successful
Jun 23 10:00:14 plasmalogin[4334]: Session started true
```

This looks very similar to comment 10 in this bug: after 6.6.5 the original crash may be fixed, but booting when the monitor/output is not available still leaves the greeter in a broken state where the UI is visible but login cannot be invoked.

Please let me know if I should open a new bug instead of commenting here, and which additional logs would be useful.
Comment 12 Oliver Beard 2026-07-23 08:36:41 UTC
Sebastian, your issue is tracked by 523313.

I have added you to the CC list for that bug.