Thank you! Yes, InputPanel was what was needed to make the VirtualKeyboard actually show on embedded (eglfs_kms or wayland). Then it also needs a y and width. And then it is always visible by default, so I guess need to bind visible: active.
The code shown on this page, i.e. without InputPanel, "just worked" on desktop (except the virtual keyboard was massive), but not embedded
https://doc.qt.io/qt-6/qtvirtualkeyboard-basic-example.html
and the "Detailed Description" here didn't really explain why/when to use it
https://doc.qt.io/qt-6/qml-qtquick-virtualkeyboard-inputpanel.html