diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 7889fac877..62e53c7789 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -7764,7 +7764,7 @@ (define-public file-roller
 (define-public gnome-session
   (package
     (name "gnome-session")
-    (version "44.0")
+    (version "46.0")
     (source (origin
               (method url-fetch)
               (uri (string-append "mirror://gnome/sources/" name "/"
@@ -7773,23 +7773,22 @@ (define-public gnome-session
               (patches (search-patches "gnome-session-support-elogind.patch"))
               (sha256
                (base32
-                "1ipjvcjabifqgmrz65m3vwmhk99nbm8jcxcikyg5w4r6cnljky6c"))))
+                "0m4sgfzpkrhpy9bpmjiig3h8sypsmdl25zlil7hw82q9yr565qf6"))))
     (arguments
-     `(#:glib-or-gtk? #t
-       #:phases
-       (modify-phases %standard-phases
-         (add-after 'install 'wrap-gnome-session
-           (lambda* (#:key native-inputs inputs outputs #:allow-other-keys)
-             ;; Make sure 'gnome-session' finds the 'gsettings' program.
-             (wrap-program (search-input-file outputs "bin/gnome-session")
-               `("PATH" ":" prefix
-                 (,(dirname (search-input-file (or native-inputs inputs)
-                                               "bin/gdbus"))))))))
-       #:configure-flags
-       '("-Delogind=true"
-         "-Dsystemd=false"
-         "-Dsystemd_session=disable"
-         "-Dsystemd_journal=false")))
+     (list
+      #:glib-or-gtk? #t
+      #:configure-flags
+      #~(list (string-append "-Dsystemduserunitdir="
+                             #$output "/share/systemd"))
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'install 'wrap-gnome-session
+            (lambda* (#:key native-inputs inputs outputs #:allow-other-keys)
+              ;; Make sure 'gnome-session' finds the 'gsettings' program.
+              (wrap-program (search-input-file outputs "bin/gnome-session")
+                `("PATH" ":" prefix
+                  (,(dirname (search-input-file (or native-inputs inputs)
+                                                "bin/gdbus"))))))))))
     (build-system meson-build-system)
     (native-inputs
      (list docbook-xml-4.1.2
diff --git a/gnu/packages/patches/gnome-session-support-elogind.patch b/gnu/packages/patches/gnome-session-support-elogind.patch
index b52b4c6855..9b9fef3168 100644
--- a/gnu/packages/patches/gnome-session-support-elogind.patch
+++ b/gnu/packages/patches/gnome-session-support-elogind.patch
@@ -1,73 +1,23 @@
 This patch, borrowed from Gentoo, allows configuring gnome-sesssion with
 elogind support.
 
-https://gitweb.gentoo.org/repo/gentoo.git/plain/gnome-base/gnome-session/files/gnome-session-3.38.0-meson-Support-elogind.patch?id=5f7fe88af5f888aff58fa0c069c3fe07973c7cd2
+https://gitweb.gentoo.org/repo/gentoo.git/plain/gnome-base/gnome-session/files/gnome-session-46.0-meson-Support-elogind.patch?id=47aae21c1beeef930aa7e2125d93e52bf237d2b9
 
-From 4454f2a63394b69fba2c900151165ad8b5742f31 Mon Sep 17 00:00:00 2001
-From: Mart Raudsepp <leio@gentoo.org>
-Date: Sun, 15 Mar 2020 14:34:39 +0200
-Subject: [PATCH] meson: Support elogind
-
----
- meson.build       | 12 +++++++++---
- meson_options.txt |  1 +
- 2 files changed, 10 insertions(+), 3 deletions(-)
-
-diff --git a/meson.build b/meson.build
-index ef5132c6..7f68aaae 100644
---- a/meson.build
-+++ b/meson.build
-@@ -124,8 +124,10 @@ enable_systemd = get_option('systemd')
- enable_systemd_session = get_option('systemd_session') != 'disable'
- use_systemd_session = get_option('systemd_session') == 'default'
- enable_systemd_journal = get_option('systemd_journal')
-+enable_elogind = get_option('elogind')
- enable_consolekit = get_option('consolekit')
--if enable_systemd or enable_consolekit
-+assert(not (enable_systemd and enable_elogind), 'Can not support systemd and elogind at once')
-+if enable_systemd or enable_elogind or enable_consolekit
-   session_bin_deps += dependency('gio-unix-2.0', version: glib_req_version)
- 
-   # Check for systemd
-@@ -152,6 +154,10 @@ if enable_systemd or enable_consolekit
-     endif
- 
-     session_tracking = 'systemd'
-+  elif enable_elogind
-+    libelogind_dep = dependency('libelogind', version: '>= 239.4')
-+    session_bin_deps += libelogind_dep
-+    session_tracking = 'elogind'
-   endif
- 
-   # Check for ConsoleKit
-@@ -161,7 +167,7 @@ if enable_systemd or enable_consolekit
+--- a/meson.build	2024-07-29 16:43:01.812864903 +0200
++++ b/meson.build	2024-07-29 16:54:16.654741387 +0200
+@@ -113,8 +113,13 @@
+                                                  pkgconfig_define: ['prefix', session_prefix])
+ endif
  
-     session_bin_deps += dbus_glib_dep
+-libsystemd_dep = dependency('libsystemd', version: '>= 209', required: true)
+-session_bin_deps += libsystemd_dep
++libsystemd_dep = dependency('libsystemd', version: '>= 209', required: false)
++if libsystemd_dep.found()
++  session_bin_deps += libsystemd_dep
++else
++  elogind_dep = dependency('libelogind', version: '>=209', required: true)
++  session_bin_deps += elogind_dep
++endif
  
--    if enable_systemd
-+    if enable_systemd or enable_elogind
-       session_tracking += ' (with fallback to ConsoleKit)'
-     else
-       session_tracking = 'ConsoleKit'
-@@ -171,7 +177,7 @@ endif
- if enable_systemd_session
-   assert(enable_systemd, 'Systemd support must be enabled when using systemd session management')
- endif
--config_h.set('HAVE_SYSTEMD', enable_systemd)
-+config_h.set('HAVE_SYSTEMD', enable_systemd or enable_elogind)
- config_h.set('ENABLE_SYSTEMD_SESSION', enable_systemd_session)
- config_h.set('ENABLE_SYSTEMD_JOURNAL', enable_systemd_journal)
- config_h.set('HAVE_CONSOLEKIT', enable_consolekit)
-diff --git a/meson_options.txt b/meson_options.txt
-index 4c05dc6e..512d1528 100644
---- a/meson_options.txt
-+++ b/meson_options.txt
-@@ -1,4 +1,5 @@
- option('deprecation_flags', type: 'boolean', value: false, description: 'use *_DISABLE_DEPRECATED flags')
-+option('elogind', type: 'boolean', value: true, description: 'Use elogind')
- option('session_selector', type: 'boolean', value: false, description: 'enable building a custom session selector dialog')
- option('systemd', type: 'boolean', value: true, description: 'Use systemd')
- option('systemd_session', type: 'combo', choices: ['disable', 'enable', 'default'], value: 'default', description: 'Whether to include systemd session support and use it by default')
--- 
-2.26.2
-
+ configure_file(
+   output: 'config.h',
\ No newline at end of file
