staging.inyokaproject.org

Hat jemand Interesse an (m)einem simplen qt-shutdown - Programm?

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

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)
Avatar von hakaishi

Anmeldungsdatum:
28. April 2008

Beiträge: 525

@BodomBeachTerror: Danke, das hat mir weiter geholfen^^

Ich habe die Sache jetzt so gelöst:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
    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

1
2
3
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:

  1. Ob der Nutzer um Bestätigung gefragt werden soll?

  2. Neu starten, herunterfahren, oder abmelden?

  3. 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)
Avatar von hakaishi

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:

1
2
3
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)
Avatar von hakaishi

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)
Avatar von hakaishi

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

Avatar von 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)
Avatar von hakaishi

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

Avatar von 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

Avatar von Budada_Bubladend

Anmeldungsdatum:
13. Dezember 2009

Beiträge: 812

passt ☺