Ok, so, no solution, so far, but at least I have some deeper insight on what's going on here.
Out of desperation, I've built kwin 5.23.4 (the version I currently have installed) from sources, and added some more logging in the relevant places, to see what goes wrong.
Until now, I thought the main problem is this part:
kwin_wayland_drm: failed to open drm device at "/dev/dri/card0"
kwin_wayland_drm: No suitable DRM devices have been found
But as it turns out, the actual problem is already this line:
kwin_core: Failed to activate /org/freedesktop/login1/session/_35 session. Maybe another compositor is running?
It's this method in session_logind.cpp:
static bool activate(const QString &sessionPath)
{
const QDBusMessage message = QDBusMessage::createMethodCall(s_serviceName, sessionPath,
s_sessionInterface,
QStringLiteral("Activate"));
const QDBusMessage reply = QDBusConnection::systemBus().call(message);
return reply.type() != QDBusMessage::ErrorMessage;
}
The marked call returns "Interactive authentication required" error.
Rest of the error output (kwin_wayland_drm) is caused simply by the fact, that because of the failure above, NOOP session is actually injected in the code instead of the "real" one, and that (understandably) is not even trying to do anything with the real hardware.
But, what to do about the "Interactive authentication required" thing, I just don't know...