Qt Making Windows and/or Linux Shutdown using a button.



  • Hello, I'm wondering, what are the commands for Linux and Windows to make my program shutdown Windows or Linux using a button, I think somebody said shell32 for Windows, but not really sure.. I want a button that has Shutdown, another that has Restart, another that has Sleep, and another that has Standby. The rest I can do on my own, it's the command to shutdown is what I'm struggling with.. Thanks in advance



  • A simple googling will do, though i haven't tested this
    For win: http://samanathon.com/windows-tip-shutdown-your-computer-with-the-command-prompt/
    For linux: http://linux.about.com/od/commands/l/blcmdl8_shutdow.htm

    You can run this in a QProcesss [ http://doc.qt.nokia.com/4.7/qprocess.html ] once the corresponding button is clicked.



  • For Linux ( Tested )..
    @bool verbose;@

    @
    //SUSPEND

    void Converter::suspend()
    {
    bool gnome_power1 = false;
    bool gnome_power2 = false;
    bool hal_works = false;
    QDBusMessage response;

    gnome_power1 = QProcess::startDetached("gnome-power-cmd.sh suspend");
    gnome_power2 = QProcess::startDetached("gnome-power-cmd suspend");
    if(!gnome_power1 && !gnome_power2 && verbose)
      qWarning() << "W: gnome-power-cmd and gnome-power-cmd.sh didn't work";
    
    if(!gnome_power1 && !gnome_power2){
      QDBusInterface powermanagement("org.freedesktop.Hal",
        "/org/freedesktop/Hal/devices/computer",
        "org.freedesktop.Hal.Device.SystemPowerManagement",
        QDBusConnection::systemBus());
      response = powermanagement.call("Suspend",0);
      if(response.type() == QDBusMessage::ErrorMessage){
        if(verbose)
          qWarning() << "W: " << response.errorName() << ":" << response.errorMessage();
      }
      else
        hal_works = true;
    }
    
    if(!hal_works && !gnome_power1 && !gnome_power2){
      QDBusInterface powermanagement("org.freedesktop.DeviceKit.Power",
        "/org/freedesktop/DeviceKit/Power",
        "org.freedesktop.DeviceKit.Power", QDBusConnection::systemBus());
      response = powermanagement.call("Suspend");
      if(response.type() == QDBusMessage::ErrorMessage){
        if(verbose)
          qWarning() << "W: " << response.errorName() << ":" << response.errorMessage();
      }
    }
    

    }

    //SHUTDOWN
    void Converter::shutdown()
    { bool shutdown_works = false;
    bool gnome_power1 = false;
    bool gnome_power2 = false;
    bool hal_works = false;
    QDBusMessage response;

    QDBusInterface gnomeSessionManager("org.gnome.SessionManager",
      "/org/gnome/SessionManager", "org.gnome.SessionManager",
      QDBusConnection::sessionBus());
    response = gnomeSessionManager.call("RequestShutdown");
    if(response.type() == QDBusMessage::ErrorMessage){
      if(verbose)
        qWarning() << "W: " << response.errorName() << ":" << response.errorMessage();
      gnome_power1 = QProcess::startDetached("gnome-power-cmd.sh shutdown");
      gnome_power2 = QProcess::startDetached("gnome-power-cmd shutdown");
      if(verbose && !gnome_power1 && !gnome_power2)
        qWarning() << "W: gnome-power-cmd and gnome-power-cmd.sh didn't work";
    }
    else
      shutdown_works = true;
    
    QDBusInterface kdeSessionManager("org.kde.ksmserver", "/KSMServer",
      "org.kde.KSMServerInterface", QDBusConnection::sessionBus());
    response = kdeSessionManager.call("logout", 0, 2, 2);
    if(response.type() == QDBusMessage::ErrorMessage){
      if(verbose)
        qWarning() << "W: " << response.errorName() << ":" << response.errorMessage();
    }
    else
      shutdown_works = true;
    
    if(!shutdown_works && !gnome_power1 && !gnome_power2){
      QDBusInterface powermanagement("org.freedesktop.Hal",
        "/org/freedesktop/Hal/devices/computer",
        "org.freedesktop.Hal.Device.SystemPowerManagement",
        QDBusConnection::systemBus());
      response = powermanagement.call("Shutdown");
      if(response.type() == QDBusMessage::ErrorMessage){
        if(verbose)
          qWarning() << "W: " << response.errorName() << ":" << response.errorMessage();
      }
      else
        hal_works = true;
    }
    
    if(!hal_works && !shutdown_works && !gnome_power1 && !gnome_power2){
      QDBusInterface powermanagement("org.freedesktop.ConsoleKit",
        "/org/freedesktop/ConsoleKit/Manager", "org.freedesktop.ConsoleKit.Manager",
        QDBusConnection::systemBus());
      response = powermanagement.call("Stop");
      if(response.type() == QDBusMessage::ErrorMessage){
        if(verbose)
          qWarning() << "W: " << response.errorName() << ":" << response.errorMessage();
        QProcess::startDetached("sudo shutdown -P now");
      }
    }}
    

    @



  • @
    //REBOOT
    void Converter::reboot()
    {bool reboot_works = false;
    bool gnome_power1 = false;
    bool gnome_power2 = false;
    bool hal_works = false;
    QDBusMessage response;

    QDBusInterface gnomeSessionManager("org.gnome.SessionManager",
      "/org/gnome/SessionManager", "org.gnome.SessionManager",
      QDBusConnection::sessionBus());
    response = gnomeSessionManager.call("RequestReboot");
    if(response.type() == QDBusMessage::ErrorMessage){
      if(verbose)
        qWarning() << "W: " << response.errorName() << ":" << response.errorMessage();
      gnome_power1 = QProcess::startDetached("gnome-power-cmd.sh reboot");
      gnome_power2 = QProcess::startDetached("gnome-power-cmd reboot");
      if(verbose && !gnome_power1 && !gnome_power2)
        qWarning() << "W: gnome-power-cmd and gnome-power-cmd.sh didn't work";
    }
    else
      reboot_works = true;
    
    QDBusInterface kdeSessionManager("org.kde.ksmserver", "/KSMServer",
      "org.kde.KSMServerInterface", QDBusConnection::sessionBus());
    response = kdeSessionManager.call("logout", 0, 2, 1);
    if(response.type() == QDBusMessage::ErrorMessage){
      if(verbose)
        qWarning() << "W: " << response.errorName() << ":" << response.errorMessage();
    }
    else
      reboot_works = true;
    
    if(!reboot_works && !gnome_power1 && !gnome_power2){
      QDBusInterface powermanagement("org.freedesktop.Hal",
        "/org/freedesktop/Hal/devices/computer",
        "org.freedesktop.Hal.Device.SystemPowerManagement",
        QDBusConnection::systemBus());
      response = powermanagement.call("Reboot");
      if(response.type() == QDBusMessage::ErrorMessage){
        if(verbose)
          qWarning() << "W: " << response.errorName() << ":" << response.errorMessage();
      }
      else
        hal_works = true;
    }
    
    if(!hal_works && !reboot_works && !gnome_power1 && !gnome_power2){
      QDBusInterface powermanagement("org.freedesktop.ConsoleKit",
        "/org/freedesktop/ConsoleKit/Manager", "org.freedesktop.ConsoleKit.Manager",
        QDBusConnection::systemBus());
      response = powermanagement.call("Restart");
      if(response.type() == QDBusMessage::ErrorMessage){
        if(verbose)
          qWarning() << "W: " << response.errorName() << ":" << response.errorMessage();
        QProcess::startDetached("sudo shutdown -r now");
      }
    }}
    

    //HIBERNATE
    void Converter::hibernate()
    {bool gnome_power1 = false;
    bool gnome_power2 = false;
    bool hal_works = false;
    QDBusMessage response;

    gnome_power1 = QProcess::startDetached("gnome-power-cmd.sh hibernate");
    gnome_power2 = QProcess::startDetached("gnome-power-cmd hibernate");
    if(!gnome_power1 && !gnome_power2 && verbose)
      qWarning() << "W: gnome-power-cmd and gnome-power-cmd.sh didn't work";
    
    if(!gnome_power1 && !gnome_power2){
      QDBusInterface powermanagement("org.freedesktop.Hal",
        "/org/freedesktop/Hal/devices/computer",
        "org.freedesktop.Hal.Device.SystemPowerManagement",
        QDBusConnection::systemBus());
      response = powermanagement.call("Hibernate");
      if(response.type() == QDBusMessage::ErrorMessage){
        if(verbose)
          qWarning() << "W: " << response.errorName() << ":" << response.errorMessage();
      }
      else
        hal_works = true;
    }
    
    if(!hal_works && !gnome_power1 && !gnome_power2){
      QDBusInterface powermanagement("org.freedesktop.DeviceKit.Power", "/org/freedesktop/DeviceKit/Power",
        "org.freedesktop.DeviceKit.Power", QDBusConnection::systemBus());
      if(response.type() == QDBusMessage::ErrorMessage){
        if(verbose)
          qWarning() << "W: " << response.errorName() << ":" << response.errorMessage();
      }
    }}
    

    //LOCK
    void Converter::lock()
    {
    if(system("gnome-screensaver-command -l") && system("dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock"))
    QMessageBox::warning(this, "Error", "Unable to lock computer.", QMessageBox::Ok, NULL);

    }@


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.