diff --git a/src/misc.cpp b/src/misc.cpp index 1213e4ec4..6592449d4 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -211,13 +211,31 @@ void misc::shutdownComputer(bool sleep) { #if defined(Q_WS_X11) && defined(QT_DBUS_LIB) // Use dbus to power off / suspend the system if(sleep) { + // Recent systems use UPower QDBusInterface upowerIface("org.freedesktop.UPower", "/org/freedesktop/UPower", - "org.freedesktop.UPower", QDBusConnection::systemBus()); - upowerIface.call("Suspend"); + "org.freedesktop.UPower", QDBusConnection::systemBus()); + if(upowerIface.isValid()) { + upowerIface.call("Suspend"); + return; + } + // HAL (older systems) + QDBusInterface halIface("org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer", + "org.freedesktop.Hal.Device.SystemPowerManagement", + QDBusConnection::systemBus()); + halIface.call("Suspend", 5); } else { + // Recent systems use ConsoleKit QDBusInterface consolekitIface("org.freedesktop.ConsoleKit", "/org/freedesktop/ConsoleKit/Manager", "org.freedesktop.ConsoleKit.Manager", QDBusConnection::systemBus()); - consolekitIface.call("Stop"); + if(consolekitIface.isValid()) { + consolekitIface.call("Stop"); + return; + } + // HAL (older systems) + QDBusInterface halIface("org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer", + "org.freedesktop.Hal.Device.SystemPowerManagement", + QDBusConnection::systemBus()); + halIface.call("Shutdown"); } #endif #ifdef Q_WS_MAC