View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0000613 | AlmaLinux-10 | General | public | 2026-03-16 17:59 | 2026-03-16 17:59 |
| Reporter | punisherhd | Assigned To | |||
| Priority | normal | Severity | minor | Reproducibility | always |
| Status | new | Resolution | open | ||
| Platform | x86_64 | OS | AlmaLinux | OS Version | 10.1 |
| Summary | 0000613: gnome-remote-desktop not working depending on networking configuration | ||||
| Description | Hello, 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 Reproduce | On 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 Information | Apparently 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. | ||||
| Tags | No 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
| ||||
| 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 |