The thing is, we have a "new login" button on screensaver. It is hardcoded to use gdmflexiserver. We can create and push our own gdmflexiserver executable which will point to a sddm command to show greeter to login into another user.
Best place to put the executable is /use/share/bin
Contents of the gdmflexiserver would be:
#!/bin/sh dbus-send --print-reply --system --dest=org.freedesktop.DisplayManager /org/freedesktop/DisplayManager/Seat0 org.freedesktop.DisplayManager.Seat.SwitchToGreeter
Now the problem is on executing the above commands, we do get to greeter and can login into users. If we login to the same user which was locked, We get to a different session and apps running from the session before locking remain as it is. we DONOT get to the original session. Also we have only panel loaded and a blank desktop. Some gui apps like file manager don't show up even after launching them from app menu. shortcuts don't work either. you can see previous session apps would still be running if you do a quick ps -aux | grep -a //processname//
I will test if launching different user works correctly and update this description as required.
Need to find a way to log back into original session from the greeter. Also, someone check if the above mentioned dbus command is correct. I had just dug through sddm's cpp manual a lil bit and got this.
If we don't find a way to do this correctly then we should remove the "new login" button entirely as focal is a LTS release.