Index: libs/libmyth/screensaver-x11.cpp
===================================================================
--- libs/libmyth/screensaver-x11.cpp	(revision 6850)
+++ libs/libmyth/screensaver-x11.cpp	(working copy)
@@ -8,6 +8,7 @@
 }
 
 #include "mythcontext.h"
+#include "util.h"
 
 class ScreenSaverX11Private 
 {
@@ -19,19 +20,50 @@
         int preferblank;
         int allowexposure;
         bool dpmsdisabled;
+        bool xscreensaverRunning;
     } state;
 
     friend class ScreenSaverX11;
 };
 
+ScreenSaverXSSTimer::ScreenSaverXSSTimer() 
+{
+    resetTimer = new QTimer();
+    connect(resetTimer, SIGNAL(timeout()), this, SLOT(resetSlot()));
+}
+
+ScreenSaverXSSTimer::~ScreenSaverXSSTimer() 
+{
+    delete resetTimer;
+}
+
+void ScreenSaverXSSTimer::resetXSS() 
+{
+    myth_system(QString("xscreensaver-command -deactivate >&- 2>&- &")); 
+}
+
+void ScreenSaverXSSTimer::resetSlot() 
+{
+    resetXSS();
+}
+
 ScreenSaverX11::ScreenSaverX11() 
 {
     d = new ScreenSaverX11Private();
+    d->state.xscreensaverRunning = 
+                (myth_system("xscreensaver-command -version >&- 2>&-") == 0);
+    if (d->state.xscreensaverRunning) 
+    {
+        t = new ScreenSaverXSSTimer();
+        t->timeoutInterval = -1;
+        VERBOSE(VB_GENERAL, QString("XScreenSaver support enabled"));
+    }
 }
 
 ScreenSaverX11::~ScreenSaverX11() 
 {
     delete d;
+    delete t; 
 }
 
 void ScreenSaverX11::Disable(void) 
@@ -63,6 +95,25 @@
             VERBOSE(VB_GENERAL, "Disable DPMS");
         }
     }
+
+    if (d->state.xscreensaverRunning)
+    {
+        if (t->resetTimer)
+        {
+            t->resetTimer->stop();
+        }
+        if (t->timeoutInterval == -1)
+        {
+            t->timeoutInterval = 
+                gContext->GetNumSettingOnHost("xscreensaverInterval",
+                                          gContext->GetHostName(),
+                                          60) * 1000;
+        }
+        if (t->timeoutInterval > 0)
+        {
+            t->resetTimer->start(t->timeoutInterval, FALSE);
+        }
+    }
 }
 
 void ScreenSaverX11::Restore(void) 
@@ -84,10 +135,22 @@
             VERBOSE(VB_GENERAL, "Enable DPMS");
         }
     }
+
+    if (d->state.xscreensaverRunning)
+    {
+        if (t->resetTimer)
+        {
+            t->resetTimer->stop();
+        }
+    }
 }
 
 void ScreenSaverX11::Reset(void) 
 {
     XResetScreenSaver(qt_xdisplay());
+    if (d->state.xscreensaverRunning)
+    {
+        t->resetXSS();
+    }
 }
 
Index: libs/libmyth/screensaver-x11.h
===================================================================
--- libs/libmyth/screensaver-x11.h	(revision 6850)
+++ libs/libmyth/screensaver-x11.h	(working copy)
@@ -3,6 +3,24 @@
 
 #include "screensaver.h"
 
+#include <qobject.h> 
+#include <qtimer.h> 
+
+class ScreenSaverXSSTimer : public QObject
+{
+    Q_OBJECT
+public:
+    ScreenSaverXSSTimer();
+    ~ScreenSaverXSSTimer();
+    void resetXSS(void);
+    int timeoutInterval;
+    QTimer *resetTimer;
+
+private slots:
+    void resetSlot();
+
+};
+
 class ScreenSaverX11 : public ScreenSaverControl
 {
 public:
@@ -15,6 +33,7 @@
 
 protected:
     class ScreenSaverX11Private *d;
+    class ScreenSaverXSSTimer *t;
 };
 
 #endif // MYTH_SCREENSAVER_X11_H
