Index: /trunk/src/VBox/Additions/x11/VBoxClient/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Additions/x11/VBoxClient/Makefile.kmk	(revision 49876)
+++ /trunk/src/VBox/Additions/x11/VBoxClient/Makefile.kmk	(revision 49877)
@@ -30,4 +30,7 @@
 endif
 VBoxClient_DEFS.linux += _GNU_SOURCE
+ifdef VBOX_WITH_GUEST_KMS_DRIVER
+ VBoxClient_DEFS += VBOX_WITH_GUEST_KMS_DRIVER
+endif
 VBoxClient_SOURCES = \
 	main.cpp
Index: /trunk/src/VBox/Additions/x11/VBoxClient/display.cpp
===================================================================
--- /trunk/src/VBox/Additions/x11/VBoxClient/display.cpp	(revision 49876)
+++ /trunk/src/VBox/Additions/x11/VBoxClient/display.cpp	(revision 49877)
@@ -48,5 +48,11 @@
         rc = VERR_NOT_SUPPORTED;
     if (RT_SUCCESS(rc))
+    {
         rc = VbglR3CtlFilterMask(VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST, 0);
+#ifdef VBOX_WITH_GUEST_KMS_DRIVER
+        if (RT_SUCCESS(rc))
+            VbglR3SetGuestCaps(VMMDEV_GUEST_SUPPORTS_GRAPHICS, 0);
+#endif
+    }
     else
         VbglR3CtlFilterMask(0, VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST);
@@ -68,5 +74,9 @@
     if (RT_FAILURE(rc))
     {
-        VbglR3CtlFilterMask(0, VMMDEV_EVENT_MOUSE_CAPABILITIES_CHANGED);
+        VbglR3CtlFilterMask(0,   VMMDEV_EVENT_MOUSE_CAPABILITIES_CHANGED
+                               | VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST);
+#ifdef VBOX_WITH_GUEST_KMS_DRIVER
+        VbglR3SetGuestCaps(0, VMMDEV_GUEST_SUPPORTS_GRAPHICS);
+#endif
         VbglR3SetMouseStatus(  fMouseFeatures
                              | VMMDEV_MOUSE_GUEST_NEEDS_HOST_CURSOR);
@@ -82,4 +92,7 @@
     VbglR3CtlFilterMask(0,   VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST
                            | VMMDEV_EVENT_MOUSE_CAPABILITIES_CHANGED);
+#ifdef VBOX_WITH_GUEST_KMS_DRIVER
+    VbglR3SetGuestCaps(0, VMMDEV_GUEST_SUPPORTS_GRAPHICS);
+#endif
     int rc = VbglR3GetMouseStatus(&fMouseFeatures, NULL, NULL);
     if (RT_SUCCESS(rc))
@@ -223,6 +236,7 @@
                             {
                                 RTStrPrintf(szCommand, sizeof(szCommand),
-                                            "%s --output VBOX%u --set VBOX_MODE %dx%d",
-                                            pcszXrandr, iDisplay, cx, cy);
+                                            "%s --output VGA-%u --set VBOX_MODE %d",
+                                            pcszXrandr, iDisplay,
+                                            (cx & 0xffff) << 16 | (cy & 0xffff));
                                 system(szCommand);
                             }
@@ -231,10 +245,10 @@
                             {
                                 RTStrPrintf(szCommand, sizeof(szCommand),
-                                            "%s --output VBOX%u --auto --pos %dx%d",
+                                            "%s --output VGA-%u --auto --pos %dx%d",
                                             pcszXrandr, iDisplay, cxOrg, cyOrg);
                                 system(szCommand);
                             }
                             RTStrPrintf(szCommand, sizeof(szCommand),
-                                        "%s --output VBOX%u --preferred",
+                                        "%s --output VGA-%u --preferred",
                                         pcszXrandr, iDisplay);
                             system(szCommand);
@@ -243,5 +257,5 @@
                         {
                             RTStrPrintf(szCommand, sizeof(szCommand),
-                                        "%s --output VBOX%u --off",
+                                        "%s --output VGA-%u --off",
                                          pcszXrandr, iDisplay);
                             system(szCommand);
@@ -253,9 +267,10 @@
                         {
                             RTStrPrintf(szCommand, sizeof(szCommand),
-                                        "%s --output VBOX%u --set VBOX_MODE %dx%d",
-                                        pcszXrandr, iDisplay, cx, cy);
+                                        "%s --output VGA-%u --set VBOX_MODE %d",
+                                        pcszXrandr, iDisplay,
+                                        (cx & 0xffff) << 16 | (cy & 0xffff));
                             system(szCommand);
                             RTStrPrintf(szCommand, sizeof(szCommand),
-                                        "%s --output VBOX%u --preferred",
+                                        "%s --output VGA-%u --preferred",
                                         pcszXrandr, iDisplay);
                             system(szCommand);
Index: /trunk/src/VBox/Additions/x11/vboxvideo/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Additions/x11/vboxvideo/Makefile.kmk	(revision 49876)
+++ /trunk/src/VBox/Additions/x11/vboxvideo/Makefile.kmk	(revision 49877)
@@ -30,4 +30,7 @@
 ifeq ($(KBUILD_TARGET),solaris) # don't use .solaris or anything here.
  vboxvideo_70_DEFS += __EXTENSIONS__  ## @todo Why this?
+endif
+ifdef VBOX_WITH_GUEST_KMS_DRIVER
+ vboxvideo_70_DEFS += VBOX_WITH_GUEST_KMS_DRIVER
 endif
 vboxvideo_13_DEFS := $(vboxvideo_70_DEFS) VBOXVIDEO_13
@@ -77,4 +80,7 @@
 	IN_MODULE XFree86Module IN_XF86_MODULE IN_RT_STATIC
 vboxvideo_drv_DEFS += memset=xf86memset memcpy=xf86memcpy
+ifdef VBOX_WITH_GUEST_KMS_DRIVER
+ vboxvideo_drv_DEFS += VBOX_WITH_GUEST_KMS_DRIVER
+endif
 vboxvideo_drv_INCS = \
 	$(VBOX_PATH_X11_XFREE_4_3)/include \
Index: /trunk/src/VBox/Additions/x11/vboxvideo/setmode.c
===================================================================
--- /trunk/src/VBox/Additions/x11/vboxvideo/setmode.c	(revision 49876)
+++ /trunk/src/VBox/Additions/x11/vboxvideo/setmode.c	(revision 49877)
@@ -122,6 +122,8 @@
                                   vboxBPP(pScrn), 0, x, y);
     /* Tell the host we support graphics */
+#ifndef VBOX_WITH_GUEST_KMS_DRIVER
     if (vbox_device_available(pVBox))
         vboxEnableGraphicsCap(pVBox);
+#endif
     if (pVBox->fHaveHGSMI)
     {
Index: /trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.c
===================================================================
--- /trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.c	(revision 49876)
+++ /trunk/src/VBox/Additions/x11/vboxvideo/vboxvideo.c	(revision 49877)
@@ -520,19 +520,18 @@
     ScrnInfoPtr pScrn = output->scrn;
     VBOXPtr pVBox = VBOXGetRec(pScrn);
-    TRACE_LOG("property=%d, value->type=%d, value->format=%d, value->size=%ld\n",
-              (int)property, (int)value->type, value->format, value->size);
+    TRACE_LOG("property=%d, value->type=%d, value->format=%d, value->size=%d\n",
+              (int)property, (int)value->type, (int)value->format, (int)value->size);
     if (property == vboxAtomVBoxMode())
     {
         uint32_t cDisplay = (uintptr_t)output->driver_private;
-        char sz[256] = { 0 };
         int w, h;
 
-        if (   value->type != XA_STRING
-            || (unsigned) value->size > (sizeof(sz) - 1))
+        if (   value->type != XA_INTEGER
+            || value->format != 32
+            || value->size != 1)
             return FALSE;
-        strncpy(sz, value->data, value->size);
-        TRACE_LOG("screen=%u, property value=%s\n", cDisplay, sz);
-        if (sscanf(sz, "%dx%d", &w, &h) != 2)
-            return FALSE;
+        w = (*(uint32_t *)value->data) >> 16;
+        h = (*(uint32_t *)value->data) & 0xffff;
+        TRACE_LOG("screen=%u, property value=%dx%d\n", cDisplay, w, h);
         pVBox->aPreferredSize[cDisplay].cx = w;
         pVBox->aPreferredSize[cDisplay].cy = h;
@@ -1054,5 +1053,7 @@
     if (vbox_open (pScrn, pScreen, pVBox)) {
         vboxEnableVbva(pScrn);
+#ifndef VBOX_WITH_GUEST_KMS_DRIVER
         vboxEnableGraphicsCap(pVBox);
+#endif
     }
 
@@ -1073,5 +1074,5 @@
 
             /* Set up our virtual outputs. */
-            snprintf(szOutput, sizeof(szOutput), "VBOX%u", i);
+            snprintf(szOutput, sizeof(szOutput), "VGA-%u", i);
             pVBox->paOutputs[i] = xf86OutputCreate(pScrn, &VBOXOutputFuncs,
                                                    szOutput);
@@ -1112,8 +1113,8 @@
         for (i = 0; i < pVBox->cScreens; ++i)
         {
-            char csz[] = "0x0";
+            INT32 value = 0;
             RRChangeOutputProperty(pVBox->paOutputs[i]->randr_output,
-                                   vboxAtomVBoxMode(), XA_STRING, 8,
-                                   PropModeReplace, sizeof(csz), csz, TRUE,
+                                   vboxAtomVBoxMode(), XA_INTEGER, 32,
+                                   PropModeReplace, 1, &value, TRUE,
                                    FALSE);
 
@@ -1222,5 +1223,7 @@
         vboxDisableVbva(pScrn);
     vboxClearVRAM(pScrn, 0, 0);
+#ifndef VBOX_WITH_GUEST_KMS_DRIVER
     vboxDisableGraphicsCap(pVBox);
+#endif
 #ifdef VBOX_DRI_OLD
     if (pVBox->useDRI)
@@ -1245,6 +1248,8 @@
         if (pVBox->fHaveHGSMI)
             vboxDisableVbva(pScrn);
+#ifndef VBOX_WITH_GUEST_KMS_DRIVER
         if (pScrn->vtSema)
             vboxDisableGraphicsCap(pVBox);
+#endif
         vboxClearVRAM(pScrn, 0, 0);
     }
