How to programmatically prevent linux computer from sleeping or turning on screensaver? How to programmatically prevent linux computer from sleeping or turning on screensaver? linux linux

How to programmatically prevent linux computer from sleeping or turning on screensaver?


From a quick look at how mplayer and SDL do it, there are two things you can do to prevent the screensaver from firing up:

  • Disable it for the duration of the program:
    • Using XScreenSaverSuspend
    • Using DBus, calling org.freedesktop.ScreenSaver.Inhibit
  • Ping it periodically:
    • Using XResetScreenSaver
    • Using DBus, calling org.freedesktop.ScreenSaver.SimulateUserActivity


I'm using QTDBUS using that

QDBusConnection bus = QDBusConnection::sessionBus();if(bus.isConnected()){    QString services[MAX_SERVICES] = {        "org.freedesktop.ScreenSaver",        "org.gnome.SessionManager"    };    QString paths[MAX_SERVICES] = {        "/org/freedesktop/ScreenSaver",        "/org/gnome/SessionManager"    };    for(int i = 0; i < MAX_SERVICES ; i++)    {                QDBusInterface screenSaverInterface(            services[i], paths[i],services[i], bus, this);        if (!screenSaverInterface.isValid())            continue;               QDBusReply<uint> reply = screenSaverInterface.call(            "Inhibit", "YOUR_APP_NAME", "REASON");        if (reply.isValid())        {            cookieID = reply.value();            qDebug()<<"succesful"        } else {               QDBusError error =reply.error();            qDebug()<<error.message()<<error.name();           }    }}


As far as I can tell, things with xdg in the name are the way to go for cross-desktop-environment functionality. There appears to be a commandline utility called xdg-screensaver. It seems to have a bunch of screensavers hardwired and then fall back to xset s off/xset s default, so you might want to just call it when it's installed, or fall back to copying part of its logic when it's not...