View Issue Details

IDProjectCategoryView StatusLast Update
0000613AlmaLinux-10Generalpublic2026-03-16 17:59
Reporterpunisherhd Assigned To 
PrioritynormalSeverityminorReproducibilityalways
Status newResolutionopen 
Platformx86_64OSAlmaLinuxOS Version10.1
Summary0000613: gnome-remote-desktop not working depending on networking configuration
DescriptionHello, I'm using gnome-remote-desktop in AlmaLinux 10.1 (gnome 47).
I've applied the following instructions: https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/administering_rhel_by_using_the_gnome_desktop_environment/remotely-accessing-the-desktop
I'm using the "headless multiuser" scenario. (chapter 1.5)

It probably works for majority of people, but I've found that it fails every time when using isolated network, static ip address, no default gateway.


Steps To ReproduceOn your server, setup gnome-remote-desktop using redhat instructions (see above).
Login to the server via RDP: it shows the GDM banner screen: OK

Remove default gateway from your NetworkManager connection on server, e.g.
# nmcli con modify eth0 ipv4.gateway ''
# nmcli con up eth0
Login to the server via RDP: the client seems to connect, but nothing appears, then disconnects after 60 seconds.

Manually configure a default gateway on the server, even if it does not exist, e.g:
# nmcli con modify eth0 ipv4.gateway 192.168.0.254
# nmcli con up eth0
Login to the server via RDP: the client connects to GDM as expected
Additional InformationApparently this is a bug in "gnome-settings-daemon".
I've reported to gnome here: https://gitlab.gnome.org/GNOME/gnome-remote-desktop/-/issues/308
But it is in fact duplicate of https://gitlab.gnome.org/GNOME/gnome-settings-daemon/-/issues/822
Fixed in Gnome 50: https://gitlab.gnome.org/GNOME/gnome-settings-daemon/-/merge_requests/446

If someone is interested, I have backported the patch from Gnome 50 to Gnome 47 (see attached file)

After rebuiding the gnome-settings-daemon package with the patch, it makes gnome-remote-desktop work as expected on alma 10.1, even on isolated network.
TagsNo tags attached.
Attached Files
gnome-settings-daemon-47.2-fix_networkmanager_detect.patch (9,815 bytes)   
diff --git a/plugins/sharing/gsd-sharing-manager.c b/plugins/sharing/gsd-sharing-manager.c
index 8b818c4..73da2c7 100644
--- a/plugins/sharing/gsd-sharing-manager.c
+++ b/plugins/sharing/gsd-sharing-manager.c
@@ -134,6 +134,7 @@ static const char * const configurable_services[] = {
 
 /* Services that are delegated to the user session by a system service
  */
+#if HAVE_SYSTEMD_LIB
 static AssignedService assigned_services[] = {
         {
                 .system_bus_name = "org.gnome.RemoteDesktop",
@@ -143,6 +144,7 @@ static AssignedService assigned_services[] = {
                 .remote_session_classes = { "user", "greeter", NULL }
         }
 };
+#endif
 
 static void
 handle_unit_cb (GObject      *source_object,
@@ -265,8 +267,6 @@ gsd_sharing_manager_sync_configurable_services (GsdSharingManager *manager)
         g_list_free (services);
 }
 
-
-#if HAVE_SYSTEMD_LIB
 static void
 on_assigned_service_finished (GPid     pid,
                               int      exit_status,
@@ -301,9 +301,6 @@ start_assigned_service (GsdSharingManager   *manager,
 {
         AssignedService *service;
 
-        if (manager->sharing_status == GSD_SHARING_STATUS_OFFLINE)
-                return;
-
         if (!info->system_service_running)
                 return;
 
@@ -407,34 +404,6 @@ stop_assigned_service_after_timeout (GsdSharingManager   *manager,
                               timeout_source,
                               G_SOURCE_FUNC (on_timeout_reached));
 }
-#endif
-
-static void
-gsd_sharing_manager_sync_assigned_services (GsdSharingManager *manager)
-{
-#if HAVE_SYSTEMD_LIB
-        GList *services, *l;
-
-        services = g_hash_table_get_values (manager->assigned_services);
-
-        for (l = services; l != NULL; l = l->next) {
-                AssignedServiceInfo *info = l->data;
-
-                if (manager->sharing_status == GSD_SHARING_STATUS_OFFLINE)
-                        stop_assigned_service (manager, info);
-                else
-                        start_assigned_service (manager, info);
-        }
-        g_list_free (services);
-#endif
-}
-
-static void
-gsd_sharing_manager_sync_services (GsdSharingManager *manager)
-{
-        gsd_sharing_manager_sync_configurable_services (manager);
-        gsd_sharing_manager_sync_assigned_services (manager);
-}
 
 #if HAVE_NETWORK_MANAGER
 static void
@@ -761,6 +730,98 @@ static const GDBusInterfaceVTable interface_vtable =
         NULL
 };
 
+static void
+on_system_bus_name_appeared (GDBusConnection   *connection,
+                             const char        *system_bus_name,
+                             const char        *system_bus_name_owner,
+                             gpointer           user_data)
+{
+        GsdSharingManager *manager = user_data;
+        AssignedServiceInfo *info;
+
+        info = g_hash_table_lookup (manager->assigned_services, system_bus_name);
+
+        if (info == NULL)
+                return;
+
+        if (info->system_service_running)
+                return;
+
+        info->system_service_running = TRUE;
+
+        start_assigned_service (manager, info);
+}
+
+static void
+on_system_bus_name_vanished (GDBusConnection   *connection,
+                             const char        *system_bus_name,
+                             gpointer           user_data)
+{
+        GsdSharingManager *manager = user_data;
+        AssignedServiceInfo *info;
+
+        info = g_hash_table_lookup (manager->assigned_services, system_bus_name);
+
+        if (info == NULL)
+                return;
+
+        if (!info->system_service_running)
+                return;
+
+        info->system_service_running = FALSE;
+
+        stop_assigned_service_after_timeout (manager, info);
+}
+
+static void
+gsd_sharing_manager_start_assigned_services (GsdSharingManager *manager)
+{
+        GHashTableIter iter;
+        gpointer key, value;
+
+        g_hash_table_iter_init (&iter, manager->assigned_services);
+        while (g_hash_table_iter_next (&iter, &key, &value)) {
+                AssignedServiceInfo *info = value;
+                AssignedService *service = info->service;
+
+                info->system_bus_name_watch = g_bus_watch_name (G_BUS_TYPE_SYSTEM,
+                                                                service->system_bus_name,
+                                                                G_BUS_NAME_WATCHER_FLAGS_NONE,
+                                                                on_system_bus_name_appeared,
+                                                                on_system_bus_name_vanished,
+                                                                manager,
+                                                                NULL);
+        }
+}
+
+static void
+cancel_pending_wait_tasks (GsdSharingManager *manager)
+{
+        GHashTableIter iter;
+        gpointer key, value;
+
+        g_hash_table_iter_init (&iter, manager->assigned_services);
+        while (g_hash_table_iter_next (&iter, &key, &value)) {
+                AssignedServiceInfo *info = value;
+                g_cancellable_cancel (info->cancellable);
+        }
+}
+
+static void
+gsd_sharing_manager_stop_assigned_services (GsdSharingManager *manager)
+{
+        GList *services, *l;
+
+        cancel_pending_wait_tasks (manager);
+
+        services = g_hash_table_get_values (manager->assigned_services);
+        for (l = services; l != NULL; l = l->next) {
+                AssignedServiceInfo *info = l->data;
+                stop_assigned_service (manager, info);
+        }
+        g_list_free (services);
+}
+
 static void
 on_bus_gotten (GObject               *source_object,
                GAsyncResult          *res,
@@ -793,6 +854,8 @@ on_bus_gotten (GObject               *source_object,
                                                                NULL,
                                                                NULL,
                                                                NULL);
+
+        gsd_sharing_manager_start_assigned_services (manager);
 }
 
 #if HAVE_NETWORK_MANAGER
@@ -846,7 +909,7 @@ primary_connection_changed (GObject    *gobject,
         g_debug ("status: %d", manager->sharing_status);
 
         properties_changed (manager);
-        gsd_sharing_manager_sync_services (manager);
+        gsd_sharing_manager_sync_configurable_services (manager);
 }
 
 static void
@@ -931,19 +994,6 @@ gsd_sharing_manager_start (GsdSharingManager *manager,
         return TRUE;
 }
 
-static void
-cancel_pending_wait_tasks (GsdSharingManager *manager)
-{
-        GHashTableIter iter;
-        gpointer key, value;
-
-        g_hash_table_iter_init (&iter, manager->assigned_services);
-        while (g_hash_table_iter_next (&iter, &key, &value)) {
-                AssignedServiceInfo *info = value;
-                g_cancellable_cancel (info->cancellable);
-        }
-}
-
 void
 gsd_sharing_manager_stop (GsdSharingManager *manager)
 {
@@ -954,7 +1004,7 @@ gsd_sharing_manager_stop (GsdSharingManager *manager)
         if (manager->sharing_status == GSD_SHARING_STATUS_AVAILABLE &&
             manager->connection != NULL) {
                 manager->sharing_status = GSD_SHARING_STATUS_OFFLINE;
-                gsd_sharing_manager_sync_services (manager);
+                gsd_sharing_manager_sync_configurable_services (manager);
         }
 
         if (manager->cancellable) {
@@ -1008,51 +1058,6 @@ assigned_service_free (gpointer pointer)
         g_free (info);
 }
 
-#if HAVE_SYSTEMD_LIB
-static void
-on_system_bus_name_appeared (GDBusConnection   *connection,
-                             const char        *system_bus_name,
-                             const char        *system_bus_name_owner,
-                             gpointer           user_data)
-{
-        GsdSharingManager *manager = user_data;
-        AssignedServiceInfo *info;
-
-        info = g_hash_table_lookup (manager->assigned_services, system_bus_name);
-
-        if (info == NULL)
-                return;
-
-        if (info->system_service_running)
-                return;
-
-        info->system_service_running = TRUE;
-
-        start_assigned_service (manager, info);
-}
-
-static void
-on_system_bus_name_vanished (GDBusConnection   *connection,
-                             const char        *system_bus_name,
-                             gpointer           user_data)
-{
-        GsdSharingManager *manager = user_data;
-        AssignedServiceInfo *info;
-
-        info = g_hash_table_lookup (manager->assigned_services, system_bus_name);
-
-        if (info == NULL)
-                return;
-
-        if (!info->system_service_running)
-                return;
-
-        info->system_service_running = FALSE;
-
-        stop_assigned_service_after_timeout (manager, info);
-}
-#endif
-
 static void
 manage_configurable_services (GsdSharingManager *manager)
 {
@@ -1126,14 +1131,6 @@ manage_assigned_services (GsdSharingManager *manager)
                 info = g_new0 (AssignedServiceInfo, 1);
                 info->service = service;
 
-                info->system_bus_name_watch = g_bus_watch_name(G_BUS_TYPE_SYSTEM,
-                                                               service->system_bus_name,
-                                                               G_BUS_NAME_WATCHER_FLAGS_NONE,
-                                                               on_system_bus_name_appeared,
-                                                               on_system_bus_name_vanished,
-                                                               manager,
-                                                               NULL);
-
                 g_hash_table_insert (manager->assigned_services, (gpointer) service->system_bus_name, info);
         }
 #endif

Activities

Issue History

Date Modified Username Field Change
2026-03-16 17:59 punisherhd New Issue
2026-03-16 17:59 punisherhd File Added: gnome-settings-daemon-47.2-fix_networkmanager_detect.patch