diff --git a/gnu/local.mk b/gnu/local.mk
index 8e7abc8a47..802f4be4fe 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -2303,6 +2303,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/wordnet-CVE-2008-3908-pt2.patch			\
   %D%/packages/patches/wpa-supplicant-dbus-group-policy.patch		\
   %D%/packages/patches/x265-arm-flags.patch			\
+  %D%/packages/patches/xdg-desktop-portal-disable-portal-tests.patch\
   %D%/packages/patches/xdg-desktop-portal-wlr-harcoded-length.patch\
   %D%/packages/patches/xen-docs-use-predictable-ordering.patch	\
   %D%/packages/patches/xen-remove-config.gz-timestamp.patch	\
diff --git a/gnu/packages/freedesktop.scm b/gnu/packages/freedesktop.scm
index 993bb84ec6..46199bac00 100644
--- a/gnu/packages/freedesktop.scm
+++ b/gnu/packages/freedesktop.scm
@@ -39,6 +39,7 @@
 ;;; Copyright © 2024 aurtzy <aurtzy@gmail.com>
 ;;; Copyright © 2024 Dariqq <dariqq@posteo.net>
 ;;; Copyright © 2024 Wilko Meyer <w@wmeyer.eu>
+;;; Copyright © 2024 dan <i@dan.games>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -136,6 +137,7 @@ (define-module (gnu packages freedesktop)
   #:use-module (gnu packages tls)
   #:use-module (gnu packages valgrind)
   #:use-module (gnu packages video)
+  #:use-module (gnu packages virtualization)
   #:use-module (gnu packages w3m)
   #:use-module (gnu packages web)
   #:use-module (gnu packages xdisorg)
@@ -2986,7 +2988,7 @@ (define-public libportal
 (define-public xdg-desktop-portal
   (package
     (name "xdg-desktop-portal")
-    (version "1.16.0")
+    (version "1.18.4")
     (source
      (origin
        (method url-fetch)
@@ -2995,18 +2997,21 @@ (define-public xdg-desktop-portal
              version "/xdg-desktop-portal-" version ".tar.xz"))
        (sha256
         (base32
-         "06cczlh39kc41rvav06v37sad827y61rffy3v29i918ibj8sahav"))))
-    (build-system gnu-build-system)
+         "0r8y8qmzcfj7b7brqcxr9lg8pavfds815ffvj0kqc378fhgaln5q"))
+       ;; disable portal tests since they try to use fuse
+       (patches (search-patches "xdg-desktop-portal-disable-portal-tests.patch"))))
+    (build-system meson-build-system)
     (native-inputs
      `(("pkg-config" ,pkg-config)
-       ("autoconf" ,autoconf)
-       ("automake" ,automake)
-       ("libtool" ,libtool)
        ("glib:bin" ,glib "bin")
-       ("which" ,which)
-       ("gettext" ,gettext-minimal)))
+       ("gettext" ,gettext-minimal)
+       ("python" ,python)
+       ("python-dbusmock" ,python-dbusmock)
+       ("python-pytest" ,python-pytest)
+       ("python-pytest-xdist" ,python-pytest-xdist)))
     (inputs
-     `(("gdk-pixbuf" ,gdk-pixbuf)
+     `(("bubblewrap" ,bubblewrap)
+       ("gdk-pixbuf" ,gdk-pixbuf)
        ("glib" ,glib)
        ("flatpak" ,flatpak)
        ("fontconfig" ,fontconfig)
@@ -3018,7 +3023,7 @@ (define-public xdg-desktop-portal
        ("fuse" ,fuse)))
     (arguments
      `(#:configure-flags
-       (list "--with-systemd=no")
+       (list "-Dsystemd=disabled")
        #:phases
        (modify-phases %standard-phases
          (add-after 'unpack 'po-chmod
diff --git a/gnu/packages/patches/xdg-desktop-portal-disable-portal-tests.patch b/gnu/packages/patches/xdg-desktop-portal-disable-portal-tests.patch
new file mode 100644
index 0000000000..5e13493613
--- /dev/null
+++ b/gnu/packages/patches/xdg-desktop-portal-disable-portal-tests.patch
@@ -0,0 +1,56 @@
+From b7750fa99c31c5f28ac2053fa154bef4038b5cc0 Mon Sep 17 00:00:00 2001
+From: dan <i@dan.games>
+Date: Tue, 2 Jul 2024 19:37:38 +0800
+Subject: [PATCH] tests: remove portal tests.
+
+---
+ tests/meson.build | 24 ------------------------
+ 1 file changed, 24 deletions(-)
+
+diff --git a/tests/meson.build b/tests/meson.build
+index a2dafee..bcd87be 100644
+--- a/tests/meson.build
++++ b/tests/meson.build
+@@ -181,18 +181,6 @@ portal_tests = [
+ 
+ test_env = env_tests
+ test_env.set('XDG_CURRENT_DESKTOP', 'test')
+-foreach p : portal_tests
+-    test(
+-      'test-portals-@0@'.format(p),
+-      test_portals,
+-      args: ['--verbose', '--keep-going', '--tap', '-p', '/portal/@0@'.format(p)],
+-      depends: [test_backends, test_portals],
+-      env: test_env,
+-      is_parallel: false,
+-      protocol: test_protocol,
+-      suite: 'portals',
+-    )
+-endforeach
+ 
+ # Split the portal tests into one test per portal, this makes debugging a lot
+ # easier.
+@@ -204,18 +192,6 @@ portal_limited = [
+ 
+ limited_env = env_tests
+ limited_env.set('XDG_CURRENT_DESKTOP', 'limited')
+-foreach p : portal_limited
+-    test(
+-      'limited-portals-@0@'.format(p),
+-      limited_portals,
+-      args: ['--verbose', '--keep-going', '--tap', '-p', '/limited/@0@'.format(p)],
+-      depends: [test_backends, limited_portals],
+-      env: limited_env,
+-      is_parallel: false,
+-      protocol: test_protocol,
+-      suite: 'portals',
+-    )
+-endforeach
+ 
+ if enable_installed_tests
+   install_data(
+
+base-commit: 11c8a96b147aeae70e3f770313f93b367d53fedd
+-- 
+2.41.0
+
