Bug 498907 - On X11, kscreenlocker_greet hits an assert in qtvirtualkeyboard when using multiple monitors
Summary: On X11, kscreenlocker_greet hits an assert in qtvirtualkeyboard when using mu...
Status: CONFIRMED
Alias: None
Product: plasmashell
Classification: Plasma
Component: Screen locking (show other bugs)
Version: master
Platform: Other Linux
: NOR grave
Target Milestone: 1.0
Assignee: Plasma Bugs List
URL:
Keywords: multiscreen, X11-only
Depends on:
Blocks:
 
Reported: 2025-01-20 00:21 UTC by David Faure
Modified: 2025-02-24 17:59 UTC (History)
3 users (show)

See Also:
Latest Commit:
Version Fixed In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description David Faure 2025-01-20 00:21:38 UTC
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.
Comment 1 Vlad Zahorodnii 2025-01-22 10:41:45 UTC
I cannot reproduce it on Wayland, looks like an X11 thing.
Comment 2 Vlad Zahorodnii 2025-01-22 11:19:39 UTC
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
Comment 3 David Faure 2025-01-26 19:58:36 UTC
Why would you show two virtual keyboards, if there's only one input panel at a time?
Comment 4 TraceyC 2025-02-24 17:59:11 UTC
Adding the x11-only keyword