My workflow is usually very terminal-centric, I prefer to type, rather than click on things. I spend most of my day using Konsole.
When I want to log out of my Plasma session, I run a command:
qdbus org.kde.ksmserver /KSMServer logout 0 0 1
If you replace
0 0 1 in that command with
1 0 1, it will display the logout window giving you the option to cancel it, shutdown or restart your computer. This does exactly the same thing as clicking on the Log out button, saves your session and everything.
Here is what the three numbers do. They are in this order:
ShutdownConfirm ShutdownType ShutdownMode
ShutdownConfirm can take the following values:
ShutdownType can take the following values:
0: none (log out)
2: halt (shutdown)
3: logout (same as 0? no idea…)
ShutdownMode can be:
1: try now
2: force now
So, if you run the above command with, for example
0 1 1, this will restart your computer without any prompt (if you want a prompt, use
1 1 1). That’s similar to running the
systemctl reboot command, but better, because it gracefully ends your Plasma session and logs you out before rebooting.
0 2 1 will shut down your computer, similar to
shutdown now command, but again, logging you out from your plasma session.
Of course, that
qdbus command is a lot of typing, so I use an alias.
This is how you can set it up. If you’re using Bash, add this to your
alias logout="shopt -q login_shell && logout || qdbus org.kde.ksmserver /KSMServer logout 0 0 1"
Or if you’re using zsh, add this to your
alias logout="[[ -o login ]] && logout || qdbus org.kde.ksmserver /KSMServer logout 0 0 1"
Then you can logout by running:
The alias overrides the normal
logout command which you’d use in the TTY to log out of a login session. To retain the original functionality, it first tests whether you’re in a login shell (in which case it runs the normal
logout command) or, if you’re not in a login shell, it runs that long
qdbus command that logs you out of your Plasma session.
All of this is, of course, applicable to any scripts as well.