Es gibt immer mal wieder Tage, da muss man (also ich) seinen Rechner neu starten.
Gern auch mal remote.
Vergangenheit
KDE3
Bei KDE3 lief das ganze noch mittels dcop
:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
shutdown.kde.sh
#!/bin/bash
DCOP=`which dcop`
${DCOP} --all-sessions --all-users ksmserver ksmserver logout 0 0 0 && exit 0
# parameter
# 1. ShutdownConfirm
# -1 == Obey the user's confirmation setting.
# 0 == Don't confirm, shutdown without asking.
# 1 == Always confirm, ask even if the user turned it off.
# 2. ShutdownType
# -1 == Select previous action or the default if it's the first time.
# 0 == Only log out.
# 1 == Log out and reboot the machine.
# 2 == Log out and halt the machine.
# 3. ShutdownMode
# -1 == Select previous mode or the default if it's the first time.
# 0 == Schedule a shutdown (halt or reboot) for the time all active sessions have exited.
# 1 == Shut down, if no sessions are active. Otherwise do nothing.
# 2 == Force shutdown. Kill any possibly active sessions.
# 3 == Pop up a dialog asking the user what to do if sessions are still active.
KDE4
KDE4 wechselte dann in Richtung DBus. Und damit konnte man einfach das ganze mit qdbus
erledigen.
Dafür hatte ich mein altes Script entsprechend umgebaut:
1
2
3
4
5
6
7
8
9
10
11
shutdown.kde.sh
#!/bin/bash
# well, this is used more than once
desktop_user="${1}"
su -c ". ~/.dbus/session-bus/$(cat /var/lib/dbus/machine-id)-0 ;
export DBUS_SESSION_BUS_ADDRESS ;
/usr/bin/qdbus org.kde.ksmserver /KSMServer logout 0 0 -1" \
- $desktop_user
Fertig.
KDE interpretiere das so, dass man sich abmelden möchte und die aktuelle Sitzung sollte gespeichert werden.
Perfekt.
Plasma5
Bei der Umstellung in Richtung Plasma ging dieses Feature verloren. Ich kann mich jedenfalls nicht daran erinnern, dass es bei Plasma 5 so etwas in einer ähnlichen Form gab.
Gegenwart
Aber Plasma 5 ist Geschichte, wir nutzen ja Plasma 6! :D
Plasma6
In Plasma 6 wurde org.kde.ksmserver
durch org.kde.Shutdown
und org.kde.LogoutPrompt
ersetzt.
Einen sofortigen Logout kann man jetzt hierüber erreichen:
1
qdbus org.kde.Shutdown /Shutdown org.kde.Shutdown.logout
Möchte man einen Prompt sehen, dann nimmt man lieber das folgende:
1
qdbus org.kde.LogoutPrompt /LogoutPrompt org.kde.LogoutPrompt.promptLogout
Darüber hinaus geht das ganze auch für ein “logout and reboot” bzw. “logout and shutdown”.
Hier muss man dann allerdings darauf achten, ob man das Sicherheitshalber noch einmal selber über einen Prompt bestätigen möchte:
1
2
qdbus org.kde.LogoutPrompt /LogoutPrompt promptReboot
qdbus org.kde.LogoutPrompt /LogoutPrompt promptShutDown
oder lieber alles dem Automatismus überlassen und auf den Prompt verzichten möchte:
1
2
qdbus org.kde.Shutdown /Shutdown org.kde.Shutdown.logoutAndReboot
qdbus org.kde.Shutdown /Shutdown org.kde.Shutdown.logoutAndShutdown
Sollte das qdbus
binary nicht im Pfad einer Distribution liegen (so wie bei mir), lässt sich das mit find
aufspüren.