Index: /trunk/src/VBox/Additions/common/VBoxService/VBoxService.cpp
===================================================================
--- /trunk/src/VBox/Additions/common/VBoxService/VBoxService.cpp	(revision 85961)
+++ /trunk/src/VBox/Additions/common/VBoxService/VBoxService.cpp	(revision 85962)
@@ -78,4 +78,5 @@
 # include <iprt/memtracker.h>
 #endif
+#include <iprt/env.h>
 #include <iprt/message.h>
 #include <iprt/path.h>
@@ -91,4 +92,5 @@
 
 #include "VBoxServiceInternal.h"
+#include "VBoxServiceUtils.h"
 #ifdef VBOX_WITH_VBOXSERVICE_CONTROL
 # include "VBoxServiceControl.h"
@@ -892,4 +894,32 @@
 }
 
+#ifdef RT_OS_LINUX
+/**
+ * Check for a guest property and start VBoxDRMClient if it exists.
+ *
+ */
+static void startDRMResize(void)
+{
+    uint32_t uGuestPropSvcClientID;
+    int rc = VbglR3GuestPropConnect(&uGuestPropSvcClientID);
+    if (RT_SUCCESS(rc))
+    {
+        rc = VGSvcCheckPropExist(uGuestPropSvcClientID, "/VirtualBox/GuestAdd/DRMResize");
+        if (RT_SUCCESS(rc))
+        {
+            RTMsgInfo("Starting DRM resize service");
+            char szDRMClientPath[RTPATH_MAX];
+            RTPathExecDir(szDRMClientPath, RTPATH_MAX);
+            RTPathStripSuffix(szDRMClientPath);
+            RTPathAppend(szDRMClientPath, RTPATH_MAX, "VBoxDRMClient");
+            const char *apszArgs[1] = { NULL };
+            rc = RTProcCreate("VBoxDRMClient", apszArgs, RTENV_DEFAULT,
+                              RTPROC_FLAGS_DETACHED | RTPROC_FLAGS_SEARCH_PATH, NULL);
+            if (rc == -1)
+                RTMsgError("Could not start DRM resize service");
+        }
+    }
+}
+#endif
 
 int main(int argc, char **argv)
@@ -1157,4 +1187,8 @@
         return rcExit;
 
+#ifdef RT_OS_LINUX
+    startDRMResize();
+#endif
+
 #ifdef RT_OS_WINDOWS
     /*
@@ -1284,3 +1318,2 @@
     return rcExit;
 }
-
Index: /trunk/src/VBox/Additions/x11/VBoxClient/display-svga-x11.cpp
===================================================================
--- /trunk/src/VBox/Additions/x11/VBoxClient/display-svga-x11.cpp	(revision 85961)
+++ /trunk/src/VBox/Additions/x11/VBoxClient/display-svga-x11.cpp	(revision 85962)
@@ -678,9 +678,30 @@
 }
 
+/**
+ * We start VBoxDRMClient from VBoxService in case  some guest property is set.
+ * We check the same guest property here and dont start this service in case
+ * it (guest property) is set.
+ */
+static bool checkDRMClient()
+{
+    return false;
+    // uint32_t uGuestPropSvcClientID;
+    // int rc = VbglR3GuestPropConnect(&uGuestPropSvcClientID);
+    // if (RT_SUCCESS(rc))
+    // {
+    //     rc = VGSvcCheckPropExist(uGuestPropSvcClientID, "/VirtualBox/GuestAdd/DRMResize");
+    //     if (RT_SUCCESS(rc))
+    //         return true;
+    // }
+    // return false;
+}
+
 static bool init()
 {
+    /* If DRM client is already running don't start this service. */
+    if (checkDRMClient())
+        return false;
     if (isXwayland())
     {
-        VBClLogInfo("The parent session seems to be running on Wayland. Starting DRM client\n");
         char* argv[] = {NULL};
         char* env[] = {NULL};
@@ -1255,15 +1276,14 @@
 {
     RT_NOREF(ppInterface, fDaemonised);
-    int rc;
-    uint32_t events;
+    if (!init())
+        return VERR_NOT_AVAILABLE;
+
     /* Do not acknowledge the first event we query for to pick up old events,
      * e.g. from before a guest reboot. */
     bool fAck = false;
     bool fFirstRun = true;
-    if (!init())
-        return VERR_NOT_AVAILABLE;
     static struct VMMDevDisplayDef aMonitors[VMW_MAX_HEADS];
 
-    rc = VbglR3CtlFilterMask(VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST, 0);
+    int rc = VbglR3CtlFilterMask(VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST, 0);
     if (RT_FAILURE(rc))
         VBClLogFatalError("Failed to request display change events, rc=%Rrc\n", rc);
@@ -1338,4 +1358,5 @@
             }
         }
+        uint32_t events;
         do
         {
