Index: /trunk/src/VBox/Frontends/VirtualBox/src/X11/XKeyboard-new.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/X11/XKeyboard-new.cpp	(revision 32874)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/X11/XKeyboard-new.cpp	(revision 32875)
@@ -30,4 +30,5 @@
 static unsigned gfByLayoutOK = 1;
 static unsigned gfByTypeOK = 1;
+static unsigned gfByXkbOK = 1;
 
 /**
@@ -188,5 +189,6 @@
 bool initXKeyboard(Display *dpy, int (*remapScancodes)[2])
 {
-    X11DRV_InitKeyboard(dpy, &gfByLayoutOK, &gfByTypeOK, remapScancodes);
+    X11DRV_InitKeyboard(dpy, &gfByLayoutOK, &gfByTypeOK, &gfByXkbOK,
+                        remapScancodes);
     /* It will almost always work to some extent */
     return true;
@@ -198,9 +200,9 @@
 void doXKeyboardLogging(Display *dpy)
 {
-    if ((gfByLayoutOK != 1) && (1 == gfByTypeOK))
+    if (((1 == gfByTypeOK) || (1 == gfByXkbOK)) && (gfByLayoutOK != 1))
         dumpLayout(dpy);
-    if ((1 == gfByLayoutOK) && (gfByTypeOK != 1))
+    if (((1 == gfByLayoutOK) || (1 == gfByXkbOK)) && (gfByTypeOK != 1))
         dumpType(dpy);
-    if ((gfByLayoutOK != 1) && (gfByTypeOK != 1))
+    if ((gfByLayoutOK != 1) && (gfByTypeOK != 1) && (gfByXkbOK != 1))
     {
         LogRel(("Failed to recognize the keyboard mapping or to guess it based on\n"
