Index: gdm-3.29.90/libgdm/gdm-sessions.c =================================================================== --- gdm-3.29.90.orig/libgdm/gdm-sessions.c 2018-06-26 19:59:06.000000000 +0200 +++ gdm-3.29.90/libgdm/gdm-sessions.c 2018-08-04 00:34:12.709684550 +0200 @@ -212,6 +212,34 @@ collect_sessions_from_directory (const c g_dir_close (dir); } +static gboolean +find_translated_name (const char *id, + GdmSessionFile *session, + char *translated_name) +{ + if (g_str_equal (id, "default")) + return FALSE; + + return g_str_equal (session->translated_name, translated_name) ? TRUE : FALSE; +} + +static void +remove_duplicated_session_name (void) +{ + GdmSessionFile *session; + char *translated_name = NULL; + + session = g_hash_table_lookup (gdm_available_sessions_map, "default"); + if (session) + translated_name = session->translated_name; + + if (translated_name) { + session = g_hash_table_find (gdm_available_sessions_map, (GHRFunc)find_translated_name, translated_name); + if (session) + g_hash_table_remove (gdm_available_sessions_map, session->id); + } +} + static void collect_sessions (void) { @@ -269,6 +269,7 @@ collect_sessions (void) #ifdef ENABLE_USER_DISPLAY_SERVER if (g_getenv ("WAYLAND_DISPLAY") == NULL && g_getenv ("RUNNING_UNDER_GDM") != NULL) { g_array_free (wayland_search_array, TRUE); + remove_duplicated_session_name(); return; } #endif @@ -279,6 +280,8 @@ collect_sessions (void) g_array_free (wayland_search_array, TRUE); #endif + + remove_duplicated_session_name(); } /**