SUMMARY When Qt is built with assertions enabled, and when using multiple monitors, as soon as I lock my screen, kscreenlocker_greet crashes and I get the fallback text message that says I'll have to use a TTY to unlock. STEPS TO REPRODUCE 1. Build qtvirtualkeyboard in debug mode 2. $KDEDIR/lib64/libexec/kscreenlocker_greet --testing OBSERVED RESULT main Greeter is starting up. PamWorker::start [PAM worker kde] start: successfully started PamWorker::start [PAM worker kde-fingerprint] start: successfully started PamWorker::start [PAM worker kde-smartcard] start: successfully started main Greeter is running in testing mode ScreenLocker::UnlockApp::setTesting Testing mode enabled: true QVirtualKeyboardInputContextPrivate::registerInputPanel QVirtualKeyboardInputContextPrivate::registerInputPanel(): VirtualKeyboard_QMLTYPE_120(0x1b89f0d0) QVirtualKeyboardInputContextPrivate::registerInputPanel QVirtualKeyboardInputContextPrivate::registerInputPanel(): VirtualKeyboard_QMLTYPE_120(0x1bdc1740) unknown ASSERT: "!this->inputPanel" in file /d/qt/6/kde/qtvirtualkeyboard/src/virtualkeyboard/qvirtualkeyboardinputcontext_p.cpp, line 203 [1] 1414108 IOT instruction (core dumped) /d/kde/inst/kde_frameworks6/lib64/libexec/kscreenlocker_greet --testing #7 0x00007fac7bb1a0dc in QMessageLogger::fatal (this=0x7ffdb2f0e530, msg=0x7fac7c11d620 "ASSERT: \"%s\" in file %s, line %d") at /d/qt/6/kde/qtbase/src/corelib/global/qlogging.cpp:884 #8 0x00007fac7bb087e4 in qt_assert (assertion=0x7fac763abd13 "!this->inputPanel", file=0x7fac763abb80 "/d/qt/6/kde/qtvirtualkeyboard/src/virtualkeyboard/qvirtualkeyboardinputcontext_p.cpp", line=203) at /d/qt/6/kde/qtbase/src/corelib/global/qassert.cpp:105 #9 0x00007fac76355519 in QVirtualKeyboardInputContextPrivate::registerInputPanel (this=0x17593a30, inputPanel=0x17c82230) at /d/qt/6/kde/qtvirtualkeyboard/src/virtualkeyboard/qvirtualkeyboardinputcontext_p.cpp:203 #10 0x00007fac7630fcff in QVirtualKeyboardInputContextPrivate::qt_static_metacall (_o=0x17593a30, _c=QMetaObject::InvokeMetaMethod, _id=15, _a=0x7ffdb2f0e8e8) at /d/qt/6/kde/build-debug/qtvirtualkeyboard/src/virtualkeyboard/VirtualKeyboard_autogen/EWIEGA46WW/moc_qvirtualkeyboardinputcontext_p.cpp:299 #11 0x00007fac76310505 in QVirtualKeyboardInputContextPrivate::qt_metacall (this=0x17593a30, _c=QMetaObject::InvokeMetaMethod, _id=15, _a=0x7ffdb2f0e8e8) at /d/qt/6/kde/build-debug/qtvirtualkeyboard/src/virtualkeyboard/VirtualKeyboard_autogen/EWIEGA46WW/moc_qvirtualkeyboardinputcontext_p.cpp:432 #12 0x00007fac7bc19e2b in QMetaObject::metacall (object=0x17593a30, cl=QMetaObject::InvokeMetaMethod, idx=19, argv=0x7ffdb2f0e8e8) at /d/qt/6/kde/qtbase/src/corelib/kernel/qmetaobject.cpp:336 #13 0x00007fac7f2131fb in QQmlObjectOrGadget::metacall (this=0x7ffdb2f0edb0, type=QMetaObject::InvokeMetaMethod, index=19, argv=0x7ffdb2f0e8e8) at /d/qt/6/kde/qtdeclarative/src/qml/qml/qqmlobjectorgadget.cpp:14 #14 0x00007fac7efacf5c in QV4::CallMethod (object=..., index=19, returnType=..., argCount=1, argTypes=0x7ffdb2f0ec48, engine=0x172f47d0, callArgs=0x7fac5fbbf588, callType=QMetaObject::InvokeMetaMethod) at /d/qt/6/kde/qtdeclarative/src/qml/jsruntime/qv4qobjectwrapper.cpp:1679 #15 0x00007fac7efae566 in QV4::QObjectMethod::callPrecise (object=..., data=..., engine=0x172f47d0, callArgs=0x7fac5fbbf588, callType=QMetaObject::InvokeMetaMethod) at /d/qt/6/kde/qtdeclarative/src/qml/jsruntime/qv4qobjectwrapper.cpp:1988 #16 0x00007fac7efb3376 in operator() (__closure=0x7ffdb2f0ee30) at /d/qt/6/kde/qtdeclarative/src/qml/jsruntime/qv4qobjectwrapper.cpp:2984 #17 0x00007fac7efb3461 in operator()<QV4::QObjectMethod::callInternal(const QV4::Value*, const QV4::Value*, int) const::<lambda()> >(const struct {...} &) const (__closure=0x7ffdb2f0ee10, call=...) at /d/qt/6/kde/qtdeclarative/src/qml/jsruntime/qv4qobjectwrapper.cpp:2961 #18 0x00007fac7efb3c32 in QV4::QObjectMethod::callInternal (this=0x7ffdb2f0f218, thisObject=0x7fac5fbbf538, argv=0x7fac5fbbf550, argc=1) at /d/qt/6/kde/qtdeclarative/src/qml/jsruntime/qv4qobjectwrapper.cpp:2984 #19 0x00007fac7efb2d94 in QV4::QObjectMethod::virtualCall (m=0x7ffdb2f0f218, thisObject=0x7fac5fbbf538, argv=0x7fac5fbbf550, argc=1) at /d/qt/6/kde/qtdeclarative/src/qml/jsruntime/qv4qobjectwrapper.cpp:2866 #20 0x00007fac7ee71dda in QV4::FunctionObject::call (this=0x7ffdb2f0f218, thisObject=0x7fac5fbbf538, argv=0x7fac5fbbf550, argc=1) at /d/qt/6/kde/qtdeclarative/src/qml/jsruntime/qv4functionobject_p.h:187 #21 0x00007fac7f064750 in QV4::Moth::VME::interpret (frame=0x7ffdb2f10870, engine=0x172f47d0, code=0x7fac5878880d "\030\006\324\026\006\002") at /d/qt/6/kde/qtdeclarative/src/qml/jsruntime/qv4vme_moth.cpp:798 #22 0x00007fac7f05ffd8 in QV4::Moth::VME::exec (frame=0x7ffdb2f10870, engine=0x172f47d0) at /d/qt/6/kde/qtdeclarative/src/qml/jsruntime/qv4vme_moth.cpp:487 #23 0x00007fac7ef2acec in QV4::doCall (self=0x1783e4c0, thisObject=0x7fac5fbbf4f8, argv=0x7fac5fbbf4f8, argc=0, context=0x7fac54f86230) at /d/qt/6/kde/qtdeclarative/src/qml/jsruntime/qv4function.cpp:52 #24 0x00007fac7ef2aedc in QV4::Function::call (this=0x1783e4c0, thisObject=0x7fac5fbbf4f8, argv=0x7fac5fbbf4f8, argc=0, context=0x7fac54f86230) at /d/qt/6/kde/qtdeclarative/src/qml/jsruntime/qv4function.cpp:77 #25 0x00007fac7ef2a9b6 in operator() (__closure=0x7ffdb2f10a80, thisObject=0x7fac5fbbf4f8, argv=0x7fac5fbbf4f8, argc=0) at /d/qt/6/kde/qtdeclarative/src/qml/jsruntime/qv4function.cpp:28 #26 0x00007fac7ef2c364 in QV4::convertAndCall<QV4::Function::call(QObject*, void**, const QMetaType*, int, QV4::ExecutionContext*)::<lambda(const QV4::Value*, const QV4::Value*, int)> >(QV4::ExecutionEngine *, QObject *, void **, const QMetaType *, int, struct {...}) (engine=0x172f47d0, thisObject=0x17c94340, a=0x7ffdb2f10c50, types=0x7ffdb2f10c60, argc=0, call=...) at /d/qt/6/kde/qtdeclarative/src/qml/jsruntime/qv4jscall_p.h:199 #27 0x00007fac7ef2aa54 in QV4::Function::call (this=0x1783e4c0, thisObject=0x17c94340, a=0x7ffdb2f10c50, types=0x7ffdb2f10c60, argc=0, context=0x7fac54f86230) at /d/qt/6/kde/qtdeclarative/src/qml/jsruntime/qv4function.cpp:25 #28 0x00007fac7f19486a in QQmlJavaScriptExpression::evaluate (this=0x17cc7f00, a=0x7ffdb2f10c50, types=0x7ffdb2f10c60, argc=0) at /d/qt/6/kde/qtdeclarative/src/qml/qml/qqmljavascriptexpression.cpp:270 #29 0x00007fac7f0eb595 in QQmlBoundSignalExpression::evaluate (this=0x17cc7f00, a=0x0) at /d/qt/6/kde/qtdeclarative/src/qml/qml/qqmlboundsignal.cpp:200 #30 0x00007fac7f0ebab7 in QQmlBoundSignal_callback (e=0x17cc7f70, a=0x0) at /d/qt/6/kde/qtdeclarative/src/qml/qml/qqmlboundsignal.cpp:315 #31 0x00007fac7f1e5d8c in QQmlNotifier::emitNotify (endpoint=0x0, a=0x0) at /d/qt/6/kde/qtdeclarative/src/qml/qml/qqmlnotifier.cpp:70 #32 0x00007fac7f135fa5 in QQmlData::signalEmitted (object=0x17cc79b0, index=3, a=0x0) at /d/qt/6/kde/qtdeclarative/src/qml/qml/qqmlengine.cpp:340 #33 0x00007fac7bca8080 in doActivate<false> (sender=0x17cc79b0, signal_index=3, argv=0x0) at /d/qt/6/kde/qtbase/src/corelib/kernel/qobject.cpp:4014 #34 0x00007fac7bc9cac6 in QMetaObject::activate (sender=0x17cc79b0, m=0x7fac7f856f00 <QQmlComponentAttached::staticMetaObject>, local_signal_index=0, argv=0x0) at /d/qt/6/kde/qtbase/src/corelib/kernel/qobject.cpp:4184 #35 0x00007fac7f10c7ff in QQmlComponentAttached::completed (this=0x17cc79b0) at /d/qt/6/kde/build-debug/qtdeclarative/src/qml/Qml_autogen/include/moc_qqmlcomponentattached_p.cpp:154 #36 0x00007fac7f1f13ba in QQmlObjectCreator::finalize (this=0x17c8cc60, interrupt=...) at /d/qt/6/kde/qtdeclarative/src/qml/qml/qqmlobjectcreator.cpp:1604 #37 0x00007fac7f18eae6 in QQmlIncubatorPrivate::incubate (this=0x17c10c70, i=...) at /d/qt/6/kde/qtdeclarative/src/qml/qml/qqmlincubator.cpp:352 #38 0x00007fac7f18d796 in QQmlEnginePrivate::incubate (this=0x1729e1b0, i=..., forContext=...) at /d/qt/6/kde/qtdeclarative/src/qml/qml/qqmlincubator.cpp:53 #39 0x00007fac7f1087d6 in QQmlComponent::create (this=0x17c11c10, incubator=..., context=0x17c11ed0, forContext=0x0) at /d/qt/6/kde/qtdeclarative/src/qml/qml/qqmlcomponent.cpp:1518 #40 0x00007fac7feac274 in QQuickLoaderPrivate::_q_sourceLoaded (this=0x17bb50a0) at /d/qt/6/kde/qtdeclarative/src/quick/items/qquickloader.cpp:734 #41 0x00007fac7feab73b in QQuickLoaderPrivate::load (this=0x17bb50a0) at /d/qt/6/kde/qtdeclarative/src/quick/items/qquickloader.cpp:604 #42 0x00007fac7feac3ae in QQuickLoader::componentComplete (this=0x17bb4fc0) at /d/qt/6/kde/qtdeclarative/src/quick/items/qquickloader.cpp:794 #43 0x00007fac7f1f112a in QQmlObjectCreator::finalize (this=0x17a90760, interrupt=...) at /d/qt/6/kde/qtdeclarative/src/qml/qml/qqmlobjectcreator.cpp:1581 #44 0x00007fac7f106b5e in QQmlComponentPrivate::complete (enginePriv=0x1729e1b0, state=0x17bd6808) at /d/qt/6/kde/qtdeclarative/src/qml/qml/qqmlcomponent.cpp:1188 #45 0x00007fac7f1072aa in QQmlComponentPrivate::completeCreate (this=0x17bd6750) at /d/qt/6/kde/qtdeclarative/src/qml/qml/qqmlcomponent.cpp:1304 #46 0x00007fac7f106f50 in QQmlComponent::completeCreate (this=0x17bf13b0) at /d/qt/6/kde/qtdeclarative/src/qml/qml/qqmlcomponent.cpp:1271 #47 0x00007fac815b64fb in PlasmaQuick::SharedQmlEngine::completeInitialization (this=0x7fac68003c70, initialProperties=<optimized out>) at /d/kde/src/6/kde/workspace/libplasma/src/plasmaquick/sharedqmlengine.cpp:270 #48 0x00007fac815b6605 in PlasmaQuick::SharedQmlEnginePrivate::scheduleExecutionEnd (this=0x17b49580) at /d/qt/6/inst/include/QtCore/qhash.h:839 #49 0x00007fac815b88f0 in PlasmaQuick::QuickViewSharedEngine::setSource (this=0x17211870, url=...) at /d/kde/src/6/kde/workspace/libplasma/src/plasmaquick/quickviewsharedengine.cpp:214 #50 PlasmaQuick::QuickViewSharedEngine::setSource (this=this@entry=0x17211870, url=...) at /d/kde/src/6/kde/workspace/libplasma/src/plasmaquick/quickviewsharedengine.cpp:208 #51 0x000000000041dda4 in ScreenLocker::UnlockApp::createViewForScreen (this=this@entry=0x7ffdb2f138a0, screen=screen@entry=0x172186e0) at /d/kde/src/6/kde/workspace/kscreenlocker/greeter/greeterapp.cpp:383 #52 0x000000000041ebd9 in ScreenLocker::UnlockApp::handleScreen (this=this@entry=0x7ffdb2f138a0, screen=0x172186e0) at /d/kde/src/6/kde/workspace/kscreenlocker/greeter/greeterapp.cpp:310 #53 0x000000000041ef3f in ScreenLocker::UnlockApp::initialViewSetup (this=this@entry=0x7ffdb2f138a0) at /d/kde/src/6/kde/workspace/kscreenlocker/greeter/greeterapp.cpp:300 #54 0x000000000041141c in main (argc=<optimized out>, argv=<optimized out>) at /d/kde/src/6/kde/workspace/kscreenlocker/greeter/main.cpp:203 EXPECTED RESULT I'm sure you know the answer to this one ;) SOFTWARE/OS VERSIONS Operating System: openSUSE Tumbleweed 20241226 KDE Plasma Version: 6.3.80 KDE Frameworks Version: 6.11.0 Qt Version: 6.8.1 Kernel Version: 6.12.6-1-default (64-bit) Graphics Platform: X11 Processors: 16 × Intel® Xeon® W-10885M CPU @ 2.40GHz Memory: 62.5 GiB of RAM Graphics Processor: Quadro T1000 ADDITIONAL INFORMATION https://bugreports.qt.io/browse/QTBUG-90809 says: The Q_ASSERT was added as part of the fix for QTBUG-56918, making sure and asserting that there is only one InputPanel, as otherwise assumptions elsewhere in the VirtualKeyboard code will fail. So, asserting that the "this->inputPanel" pointer is nullptr when QVirtualKeyboardInputContextPrivate::registerInputPanel is intentional and correct.
I cannot reproduce it on Wayland, looks like an X11 thing.
This one seems tricky. There is going to be an InputPanel per every screen. I think it's possible to work around the crash by loading the InputPanel on demand on X11 but as soon as you show two virtual keyboards, the crash will happen again
Why would you show two virtual keyboards, if there's only one input panel at a time?
Adding the x11-only keyword