diff --git a/src/spice-gtk-session.c b/src/spice-gtk-session.c
index 3d8973e109c1db245f144f912d7387311fc33dae..4b5f7a288694189514c5175f3b44ebec06ce0812 100644
--- a/src/spice-gtk-session.c
+++ b/src/spice-gtk-session.c
@@ -120,8 +120,7 @@ static guint32 get_keyboard_lock_modifiers(void)
 {
     guint32 modifiers = 0;
 /* Ignore GLib's too-new warnings */
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
-    GdkKeymap *keyboard = gdk_keymap_get_default();
+    GdkKeymap *keyboard = gdk_keymap_get_for_display(gdk_display_get_default());
 
     if (gdk_keymap_get_caps_lock_state(keyboard)) {
         modifiers |= SPICE_INPUTS_CAPS_LOCK;
@@ -134,7 +133,6 @@ G_GNUC_BEGIN_IGNORE_DEPRECATIONS
     if (gdk_keymap_get_scroll_lock_state(keyboard)) {
         modifiers |= SPICE_INPUTS_SCROLL_LOCK;
     }
-G_GNUC_END_IGNORE_DEPRECATIONS
     return modifiers;
 }
 
@@ -178,7 +176,7 @@ static void guest_modifiers_changed(SpiceInputsChannel *inputs, gpointer data)
 static void spice_gtk_session_init(SpiceGtkSession *self)
 {
     SpiceGtkSessionPrivate *s;
-    GdkKeymap *keymap = gdk_keymap_get_default();
+    GdkKeymap *keymap = gdk_keymap_get_for_display(gdk_display_get_default());
 
     s = self->priv = spice_gtk_session_get_instance_private(self);
 
diff --git a/src/spice-widget.c b/src/spice-widget.c
index 8d933848c23e2a1ad9f00cd575d2ae2f87b0fdb4..ce123bd41cb5218c70a2aa147b2cd278c0ec5154 100644
--- a/src/spice-widget.c
+++ b/src/spice-widget.c
@@ -1699,9 +1699,9 @@ static guint get_scancode_from_keyval(SpiceDisplay *display, guint keyval)
     guint keycode = 0;
     GdkKeymapKey *keys = NULL;
     gint n_keys = 0;
+    GdkKeymap *keymap = gdk_keymap_get_for_display(gdk_display_get_default());
 
-    if (gdk_keymap_get_entries_for_keyval(gdk_keymap_get_default(),
-                                          keyval, &keys, &n_keys)) {
+    if (gdk_keymap_get_entries_for_keyval(keymap, keyval, &keys, &n_keys)) {
         /* FIXME what about levels? */
         keycode = keys[0].keycode;
         g_free(keys);
diff --git a/src/vncdisplaykeymap.c b/src/vncdisplaykeymap.c
index 86cc6bde07daaaf98e86264f74a44f8a1e7f17bc..e1a16aa170f98c12e269628d99f7ad45c18728b6 100644
--- a/src/vncdisplaykeymap.c
+++ b/src/vncdisplaykeymap.c
@@ -258,9 +258,11 @@ guint16 vnc_display_keymap_gdk2xtkbd(const guint16 *keycode_map,
 void vnc_display_keyval_set_entries(void)
 {
 	size_t i;
+	GdkKeymap *keymap = gdk_keymap_get_for_display(gdk_display_get_default());
+
 	if (ref_count_for_untranslated_keys == 0)
 		for (i = 0; i < sizeof(untranslated_keys) / sizeof(untranslated_keys[0]); i++)
-			gdk_keymap_get_entries_for_keyval(gdk_keymap_get_default(),
+			gdk_keymap_get_entries_for_keyval(keymap,
 							  untranslated_keys[i].keyval,
 							  &untranslated_keys[i].keys,
 							  &untranslated_keys[i].n_keys);