BodomBeachTerror
Anmeldungsdatum: 24. März 2008
Beiträge: 788
|
Lunar schrieb: 1
2
3
4
5
6
7
8
9
10
11
12
13
14 | #include <QtDBus/QDBusInterface>
#include <QtDBus/QDBusMessage>
#inlcude <QtCore/QDebug>
// …
QDBusInterface powermanagement(
"org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer",
"org.freedesktop.Hal.Device.SystemPowerManagement",
QDBusConnection::systemBus());
QDBusMessage response = powermanagement.call("Shutdown");
if (response.type() = QDBusMessage::ErrorMessage) {
qWarning() << response.errorName() << ":" << response.errorMessage();
}
|
Damit das ganze funktioniert, muss man natürlich noch in der .pro Datei "QT += dbus" hinzufügen 😉
|
hakaishi
(Themenstarter)
Anmeldungsdatum: 28. April 2008
Beiträge: 525
|
@BodomBeachTerror: Danke, das hat mir weiter geholfen^^ Ich habe die Sache jetzt so gelöst:
| if(QFile::exists("/usr/bin/gnome-session")){
QDBusInterface powermanagement("org.gnome.SessionManager", "/org/gnome/SessionManager", "org.gnome.SessionManager",
QDBusConnection::sessionBus());
powermanagement.call("RequestShutdown");
}
else{
QDBusInterface powermanagement("org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer",
"org.freedesktop.Hal.Device.SystemPowerManagement", QDBusConnection::systemBus());
powermanagement.call("Shutdown");
}
|
Gibt es für KDE auch eine Möglichkeit über den SessionManager abzuschalten? - Auf diese Weise ist es nämlich möglich, dass (falls man beim logout alle laufenden Programme speichert) alles beim Systemstart wiederhergestellt wird. --Oder hat da jemand noch eine bessere Idee? Gruß Hakaishi
|
Lunar
Anmeldungsdatum: 17. März 2006
Beiträge: 5792
|
| QDBusInterface kdeSessionManager("org.kde.ksmserver", "/KSMServer", "org.kde.KSMServerInterface",
QDBusConnection::sessionBus());
kdeSessionManager.call("logout", 0, 2, 1);
|
Diese "logout"-Methode nimmt dieselben Parameter entgegen wie die requestShutDown -Funktion: Ob der Nutzer um Bestätigung gefragt werden soll? Neu starten, herunterfahren, oder abmelden? Jetzt ausführen, oder erst, wenn alle Sitzungen beendet sind?
Möglich sind alle Werte der Enum-Typen in der Signatur. Auf die symbolischen Namen der Enum-Typen hast Du natürlich keinen Zugriff, wenn Du nicht gegen KDE linkst bzw. deren Header nicht einbindest, in der Dokumentation aber sind die dazu gehörigen Zahlenwerte aufgeführt. Obiges Beispiel unterdrückt den Bestätungsdialog (0), fährt das System komplett herunter (2) und versucht, diese Aktion sofort (1) durchzuführen. Btw, der Name „powermanagement“ für den Session-Manager von Gnome ist irgendwie unpassend 😉
|
hakaishi
(Themenstarter)
Anmeldungsdatum: 28. April 2008
Beiträge: 525
|
Lunar schrieb: Obiges Beispiel unterdrückt den Bestätungsdialog (0), fährt das System komplett herunter (2) und versucht, diese Aktion sofort (1) durchzuführen.
Leider stimmt das nicht. 0, 2, 1 Hat bei mir nur zu einem Logout geführt (interessanterweise). Der erste Parameter ist, wie du sagtest der Bestätigunsdialog, der zweite ShutdownMode bestimmt nicht, ob der Computer heruntergefahren wird, das macht der dritte Parameter: | enum ShutdownType {
ShutdownTypeDefault = -1, ShutdownTypeNone = 0, ShutdownTypeReboot = 1, ShutdownTypeHalt = 2, ShutdownTypeLogout = 3
}
|
http://api.kde.org/4.x-api/kdebase-workspace-apidocs/libs/kworkspace/html/namespaceKWorkSpace.html ShutdownMode bestimmt nur wie bzw. wann ShutdownType aufgeführt wird (oder so ähnlich). Hier mehr dazu. Bei mir funktioniert jedenfalls 0, 2, 2. Gruß Hakaishi
|
Lunar
Anmeldungsdatum: 17. März 2006
Beiträge: 5792
|
Ich kann dazu nur sagen, dass folgender Befehl das System unter KDE 4.3.4 herunter fährt, ohne einen Bestätigungsdialog anzuzeigen:
qdbus org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.logout 0 2 1
Dieser Aufruf entspricht eigentlich genau dem gezeigten C++-Quelltext. Der zweite Parameter der Funktion requestShutdown ist ShutdownType , nicht ShutdownMode . ShutdownType bestimmt die Art des Herunterfahrens. An der Implementierung von requestShutdown lässt sich sehen, dass die Parameter in unveränderter Reihenfolge an die logout -Funktion des DBus-Dienstes übergeben werden. Am Quelltext des DBus-Dienstes lässt sich das auch verifizieren.
|
hakaishi
(Themenstarter)
Anmeldungsdatum: 28. April 2008
Beiträge: 525
|
Lunar schrieb: Der zweite Parameter der Funktion requestShutdown ist ShutdownType , nicht ShutdownMode .
Ups... Stimmt. Die haben das dort nur in einer anderen Reihenfolge stehen, wie irritierend...
Unter Kubuntu Karmic hat qdbus org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.logout 0 2 1 bei mir jedenfalls zu keinem Shutdown geführt (vielleicht hatte das aber auch andere Ursachen...)
|
Lunar
Anmeldungsdatum: 17. März 2006
Beiträge: 5792
|
Nun, dazu kann ich Dir leider nichts sagen. Versuch halt mal, beim ersten Parameter 1 zu übergeben, um zu sehen, ob überhaupt der entsprechende Dialog angezeigt wird.
|
hakaishi
(Themenstarter)
Anmeldungsdatum: 28. April 2008
Beiträge: 525
|
Unter Xubuntu müsste der Befehl so aussehen:
dbus-send --print-reply --session --dest=org.xfce.SessionManager /org/xfce/SessionManager org.xfce.Session.Manager.Shutdown uint32:2 boolean:true
Jedoch fehlt mir ein Parameter oder ich muss noch irgendwas anpassen, da der Shutdown nur zu einem Logout führt. uint32:0 führt zum Auswahldialog. unit32:3 sollte ein Reboot sein, macht jedoch auch nur einen Logout. Ich brauche also noch einen Parameter, der den Shutdown erzwingt... (boolean:true speichert die Sitzung) @Lunar: Was meinst du? - Soll ich es bei Ubuntu/Kubuntu bewenden lassen? - Der Shutdown über Hal würde alle andere Systeme eh übernehmen und was über Hal nicht läuft, wird weiterhin mit sudo shutdown -P now erledigt. Gruß Hakaishi
|
Lunar
Anmeldungsdatum: 17. März 2006
Beiträge: 5792
|
hakaishi schrieb: @Lunar: Was meinst du? - Soll ich es bei Ubuntu/Kubuntu bewenden lassen?
Das ist Deine Entscheidung, mir ist das egal ☺
|
Budada_Bubladend
Anmeldungsdatum: 13. Dezember 2009
Beiträge: 812
|
eine Frage:
warum denn shutdown -p now?
sollte das nich über -h laufen? @BodomBeachTerror: bist du COB Fan?
|
BodomBeachTerror
Anmeldungsdatum: 24. März 2008
Beiträge: 788
|
Budada Bubladend schrieb: eine Frage:
warum denn shutdown -p now?
sollte das nich über -h laufen? @BodomBeachTerror: bist du COB Fan?
Ja schon xD Wie kommst du da drauf? xDxD
|
hakaishi
(Themenstarter)
Anmeldungsdatum: 28. April 2008
Beiträge: 525
|
Budada Bubladend schrieb: eine Frage:
warum denn shutdown -p now?
sollte das nich über -h laufen?
aus man shutdown:
-h Requests that the system be either halted or powered off after
it has been brought down, with the choice as to which left up to
the system.
-H Requests that the system be halted after it has been brought
down.
-P Requests that the system be powered off after it has been
brought down.
Wieso sollte ich die Entscheidung dem OS überlassen?
|
Budada_Bubladend
Anmeldungsdatum: 13. Dezember 2009
Beiträge: 812
|
naja weil ich selber einer binn und bodom beach terror nun mal ein Lied von denen ist und ich mir bei deinem Nick nix anderes eingefallen is als da saugeile lied von COB! @hakaishi öhm war en denk fehler von mir sorry ☺
|
BodomBeachTerror
Anmeldungsdatum: 24. März 2008
Beiträge: 788
|
Budada Bubladend schrieb: naja weil ich selber einer binn und bodom beach terror nun mal ein Lied von denen ist und ich mir bei deinem Nick nix anderes eingefallen is als da saugeile lied von COB! @hakaishi öhm war en denk fehler von mir sorry ☺
😀 War eigentlich auch eher als Scherz gemeint ^^ Sry fürs Off Topic
|
Budada_Bubladend
Anmeldungsdatum: 13. Dezember 2009
Beiträge: 812
|
|