From 35c7c33c23685e00bc981a3809a3f3a3597c2f9a Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 6 Mar 2017 16:01:30 +0100 Subject: [server] Prevent screen standby while clients are connected --- src/server/util/platform/screensaver_X11.cpp | 74 ++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 src/server/util/platform/screensaver_X11.cpp (limited to 'src/server/util/platform/screensaver_X11.cpp') diff --git a/src/server/util/platform/screensaver_X11.cpp b/src/server/util/platform/screensaver_X11.cpp new file mode 100644 index 0000000..efffba9 --- /dev/null +++ b/src/server/util/platform/screensaver_X11.cpp @@ -0,0 +1,74 @@ +#include "screensaver.h" + +#include +#include +#include +#include + +#ifdef X11_Xscreensaver_FOUND +# include +#endif +#ifdef X11_dpms_FOUND +#include +#endif + +namespace { + + Display *display = NULL; + bool extensionSupported = false; + bool dpmsSupported = false; + + bool init() + { + if (display != NULL) { + return true; + } + display = QX11Info::display(); + if (display == NULL) { + return false; + } +#ifdef X11_Xscreensaver_FOUND + int dummy; + extensionSupported = (XScreenSaverQueryExtension(display, &dummy, &dummy) == True); +#endif +#ifdef X11_dpms_FOUND + dpmsSupported = (DPMSCapable(display) == True); +#endif + return true; + } + +} + +namespace ScreenSaver { + + void allowSaverAndStandby(bool allow) + { + if (!init()) + return; +#ifdef X11_Xscreensaver_FOUND + if (extensionSupported) { + XScreenSaverSuspend(display, allow ? False : True); + return; + } +#endif + // TODO: Maybe try some fallback, call xset, or trigger some event periodically + } + + void forceUnlockAndScreenOn() + { + if (!init()) + return; + QProcess process; + process.start("xscreensaver-command", QStringList() << "-deactivate"); + process.waitForFinished(100); +#ifdef X11_dpms_FOUND + CARD16 power_level; + BOOL state; + if (DPMSInfo(display, &power_level, &state) && state) { + DPMSForceLevel(display, DPMSModeOn); + return; + } +#endif + } + +} -- cgit v1.2.3-55-g7522