When kscreenlocker_greet is unable to start (in my case incompatible Qt components were installed), it shows the following message:
The screen locker is broken and unlocking is not possible anymore.\n
In order to unlock switch to a virtual terminal (e.g. Ctrl+Alt+F2),\n
log in and execute the command:\n
Afterwards switch back to the running session (Ctrl+Alt+F%1).
But it is not helpful for me because I don't have systemd installed, thus I don't have the loginctl binary. This only creates confusion.
How do I unlock session without systemd?
Reproducible: Didn't try
There is nothing wrong there. It's a fallback for the case that something is seriously broken. We improved that experience from black screen to something which works on 99 % of our users systems. There is no Plasma developer who doesn't use logind, so it's just not possible for us to support anything else. We expect the non-logind users to add code for this (which could also be a dummy loginctl binary which just works the same way). (Similar code was contributed to support consolekit in kscreenlocker).
From our side this is a clear wontfix or more a cantfix. Please do not expect us to go an extramile to support a corner case of the corner case.
If anybody needs it, I have found another solution to the problem, not involving using systemd.
First, we have to determine which session is X11 session. To accomplish that, run
in any virtual terminal (e.g. using Ctrl+Alt+F2).
One of sessions should contain x11-display property set - that session is possibly corresponding to a locked one:
x11-display = ':0'
Remember that session name ("Session1").
Now run the following command as root from the virtual terminal (below su is used to obtain root privileges)
# su -c 'dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit" /org/freedesktop/ConsoleKit/Session1 org.freedesktop.ConsoleKit.Session.Unlock'
Where you should replace Session1 with your session name obtained at the previous step using ck-list-sessions.
After that you should be able to switch back to the running session (Ctrl+Alt+F%1).
Tested on Gentoo kde-plasma/kscreenlocker-5.6.2.
Thanks Dmitry. That approach looks good. Unfortunately it's a little bit too complex to put on the emergency screen. If we had something as simple as consolekitctl unlock-sessions it would be doable to check whether logind or consolekit is used and show the correct command.
Confirming - I have the same issue and it's really annoying - I can't unlock screen if I am currently updating kdelibs or qt or something...
And I don't use systemd, I use openrc.