--- gnome-settings-daemon-2.30.1.orig/plugins/keyboard/gsd-keyboard-manager.c 2010-06-01 13:50:01.142545455 +0200 +++ gnome-settings-daemon-2.30.1/plugins/keyboard/gsd-keyboard-manager.c 2010-06-01 13:56:20.487582147 +0200 @@ -384,6 +384,18 @@ } static gboolean +is_xserver_xsun (void) { + int dontcare; + Display *dpy = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()); + + if ((strcmp(ServerVendor(dpy), "Sun Microsystems, Inc.") == 0) &&\ + XQueryExtension (dpy, "SUN_ALLPLANES", &dontcare, &dontcare, &dontcare)) + return TRUE; + + return FALSE; +} + +static gboolean start_keyboard_idle_cb (GsdKeyboardManager *manager) { GConfClient *client; @@ -398,8 +410,11 @@ gconf_client_add_dir (client, GSD_KEYBOARD_KEY, GCONF_CLIENT_PRELOAD_RECURSIVE, NULL); /* Essential - xkb initialization should happen before */ - gsd_keyboard_xkb_set_post_activation_callback ((PostActivationCallback) gsd_load_modmap_files, NULL); - gsd_keyboard_xkb_init (client, manager); + /* disables the XKB layout support for Gnome when running Xsun */ + if (!is_xserver_xsun ()) { + gsd_keyboard_xkb_set_post_activation_callback ((PostActivationCallback) gsd_load_modmap_files, NULL); + gsd_keyboard_xkb_init (client, manager); + } #ifdef HAVE_X11_EXTENSIONS_XKB_H numlock_xkb_init (manager);