diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 7341f58547..5e6a6df44c 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -8729,7 +8729,7 @@ (define-public libxml++-2
 (define-public gdm
   (package
     (name "gdm")
-    (version "42.0")
+    (version "44.1")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -8737,7 +8737,7 @@ (define-public gdm
                                   name "-" version ".tar.xz"))
               (sha256
                (base32
-                "0m9qmm3vm81jmqlc30a1fb79hsr4l4lpiw0zjxww3gipd6bsqa53"))
+                "03avvkrm2jd0731ggh9cjnkhrfysqp4slrq0km3gqa3xpqx6n9k8"))
               (patches
                (search-patches
                 "gdm-default-session.patch"
@@ -8930,6 +8930,7 @@ (define-public gdm
      (list accountsservice
            check                        ;for testing
            dbus
+           egl-wayland
            elogind
            eudev
            gnome-session
diff --git a/gnu/packages/patches/gdm-elogind-support.patch b/gnu/packages/patches/gdm-elogind-support.patch
index 5c8e3bd610..b27e000585 100644
--- a/gnu/packages/patches/gdm-elogind-support.patch
+++ b/gnu/packages/patches/gdm-elogind-support.patch
@@ -18,10 +18,10 @@ system and user units.
  meson_options.txt                        |  5 +-
  6 files changed, 66 insertions(+), 42 deletions(-)
 
-diff --git a/common/meson.build b/common/meson.build
-index 074dd92e..bca58f7c 100644
---- a/common/meson.build
-+++ b/common/meson.build
+Index: gdm-44.1/common/meson.build
+===================================================================
+--- gdm-44.1.orig/common/meson.build
++++ gdm-44.1/common/meson.build
 @@ -11,7 +11,7 @@ libgdmcommon_src = files(
  )
  
@@ -31,10 +31,10 @@ index 074dd92e..bca58f7c 100644
    gobject_dep,
    gio_dep,
    gio_unix_dep,
-diff --git a/data/meson.build b/data/meson.build
-index 2dec4c23..c3452e1c 100644
---- a/data/meson.build
-+++ b/data/meson.build
+Index: gdm-44.1/data/meson.build
+===================================================================
+--- gdm-44.1.orig/data/meson.build
++++ gdm-44.1/data/meson.build
 @@ -164,41 +164,53 @@ else
    service_config.set('PLYMOUTH_QUIT_SERVICE', '')
  endif
@@ -114,10 +114,10 @@ index 2dec4c23..c3452e1c 100644
  
  # XSession
  if get_option('gdm-xsession')
-diff --git a/libgdm/meson.build b/libgdm/meson.build
-index 3f8cafbb..83e95151 100644
---- a/libgdm/meson.build
-+++ b/libgdm/meson.build
+Index: gdm-44.1/libgdm/meson.build
+===================================================================
+--- gdm-44.1.orig/libgdm/meson.build
++++ gdm-44.1/libgdm/meson.build
 @@ -56,7 +56,7 @@ libgdm_deps = [
    glib_dep,
    gio_dep,
@@ -127,55 +127,46 @@ index 3f8cafbb..83e95151 100644
    libgdmcommon_dep,
  ]
  
-diff --git a/meson.build b/meson.build
-index 845f673e..d0ca41ef 100644
---- a/meson.build
-+++ b/meson.build
-@@ -96,21 +96,30 @@ xdmcp_dep = cc.find_library('Xdmcp', required: get_option('xdmcp'))
- if xdmcp_dep.found() and get_option('tcp-wrappers')
+Index: gdm-44.1/meson.build
+===================================================================
+--- gdm-44.1.orig/meson.build
++++ gdm-44.1/meson.build
+@@ -100,16 +100,24 @@ if xdmcp_dep.found() and get_option('tcp
    libwrap_dep = cc.find_library('wrap')
  endif
--# systemd
+ # systemd
 -systemd_dep = dependency('systemd')
 -libsystemd_dep = dependency('libsystemd')
--if meson.version().version_compare('>= 0.53')
--  systemd_multiseat_x = find_program('systemd-multi-seat-x',
--    required: false,
--    dirs: [
--      systemd_dep.get_pkgconfig_variable('systemdutildir'),
--      '/lib/systemd',
--      '/usr/lib/systemd',
--    ])
-+
+-systemd_multiseat_x = find_program('systemd-multi-seat-x',
+-  required: false,
+-  dirs: [
+-    systemd_dep.get_pkgconfig_variable('systemdutildir'),
+-    '/lib/systemd',
+-    '/usr/lib/systemd',
+-  ])
+-systemd_x_server = systemd_multiseat_x.found()? systemd_multiseat_x.path() : '/lib/systemd/systemd-multi-seat-x'
 +logind_provider = get_option('logind-provider')
 +systemd_dep = dependency('systemd', required: false)
 +if logind_provider == 'systemd'
 +  libsystemd_dep = dependency('libsystemd')
 +  logind_dep = libsystemd_dep
-+  if meson.version().version_compare('>= 0.53')
-+    systemd_multiseat_x = find_program('systemd-multi-seat-x',
-+      required: false,
-+      dirs: [
-+        systemd_dep.get_pkgconfig_variable('systemdutildir'),
-+        '/lib/systemd',
-+        '/usr/lib/systemd',
-+      ])
-+  else
-+    systemd_multiseat_x = find_program('systemd-multi-seat-x', required: false)
-+  endif
++  systemd_multiseat_x = find_program('systemd-multi-seat-x',
++    required: false,
++    dirs: [
++      systemd_dep.get_pkgconfig_variable('systemdutildir'),
++      '/lib/systemd',
++      '/usr/lib/systemd',
++    ])
 +  systemd_x_server = systemd_multiseat_x.found()? systemd_multiseat_x.path() : '/lib/systemd/systemd-multi-seat-x'
- else
--  systemd_multiseat_x = find_program('systemd-multi-seat-x', required: false)
++else
 +  elogind_dep = dependency('libelogind')
 +  logind_dep = elogind_dep
 +  systemd_x_server = 'disabled'
- endif
--systemd_x_server = systemd_multiseat_x.found()? systemd_multiseat_x.path() : '/lib/systemd/systemd-multi-seat-x'
-+
++endif
  # Plymouth
  plymouth_dep = dependency('ply-boot-client', required: get_option('plymouth'))
  # Check for Solaris auditing API (ADT)
-@@ -319,6 +328,7 @@ summary({
+@@ -319,6 +327,7 @@ summary({
      'PAM Syslog': have_pam_syslog,
      'Supports PAM Extensions': pam_extensions_supported,
      'SeLinux': libselinux_dep.found(),
@@ -183,11 +174,11 @@ index 845f673e..d0ca41ef 100644
      'Use GDM Xsession': get_option('gdm-xsession'),
      'Use UserDisplayServer': get_option('user-display-server'),
      'Use SystemdJournal': get_option('systemd-journal'),
-diff --git a/meson_options.txt b/meson_options.txt
-index 14e0b908..5135d7d6 100644
---- a/meson_options.txt
-+++ b/meson_options.txt
-@@ -12,6 +12,7 @@ option('initial-vt', type: 'integer', value: 1, description: 'Initial virtual te
+Index: gdm-44.1/meson_options.txt
+===================================================================
+--- gdm-44.1.orig/meson_options.txt
++++ gdm-44.1/meson_options.txt
+@@ -12,6 +12,7 @@ option('initial-vt', type: 'integer', va
  option('ipv6', type: 'boolean', value: false, description: 'Enables compilation of IPv6 code.')
  option('lang-file', type: 'string', value: '', description: 'File containing default language settings.')
  option('libaudit', type: 'feature', value: 'auto', description: 'Add Linux audit support.')
@@ -195,7 +186,7 @@ index 14e0b908..5135d7d6 100644
  option('log-dir', type: 'string', value: '/var/log/gdm', description: 'Log directory.')
  option('pam-mod-dir', type: 'string', value: '', description: 'Directory to install PAM modules in.')
  option('pam-prefix', type: 'string', value: '', description: 'Specify where PAM files go.')
-@@ -27,8 +28,8 @@ option('solaris', type: 'boolean', value: false, description: 'Build for Solaris
+@@ -27,8 +28,8 @@ option('solaris', type: 'boolean', value
  option('split-authentication', type: 'boolean', value: true, description: 'Enable multiple simultaneous PAM conversations during login.')
  option('sysconfsubdir', type: 'string', value: 'gdm', description: 'Directory name used under sysconfdir.')
  option('systemd-journal', type: 'boolean', value: true, description: 'Use journald support.')
