diff --git a/gnu/local.mk b/gnu/local.mk
index 153f6ee8d7..0599df8968 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1830,7 +1830,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/xplanet-1.3.1-libdisplay_DisplayOutput.cpp.patch	\
   %D%/packages/patches/xplanet-1.3.1-libimage_gif.c.patch	\
   %D%/packages/patches/xplanet-1.3.1-xpUtil-Add2017LeapSecond.cpp.patch	\
-  %D%/packages/patches/xpra-4.0.1-systemd-run.patch	\
+  %D%/packages/patches/xpra-4.2-systemd-run.patch		\
   %D%/packages/patches/xsane-fix-memory-leak.patch		\
   %D%/packages/patches/xsane-fix-pdf-floats.patch		\
   %D%/packages/patches/xsane-fix-snprintf-buffer-length.patch	\
diff --git a/gnu/packages/patches/xpra-4.0.1-systemd-run.patch b/gnu/packages/patches/xpra-4.0.1-systemd-run.patch
deleted file mode 100644
index 1ea11830a5..0000000000
--- a/gnu/packages/patches/xpra-4.0.1-systemd-run.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-Disable systemd-run if the command is not found.
-
-diff -Naur xpra-4.0.1/xpra/scripts/main.py xpra-4.0.1.patched/xpra/scripts/main.py
---- xpra-4.0.1/xpra/scripts/main.py	2020-05-17 18:12:15.000000000 +0200
-+++ xpra-4.0.1.patched/xpra/scripts/main.py	2020-06-01 12:12:18.500257507 +0200
-@@ -312,16 +312,18 @@
-     if not is_systemd_pid1():
-         return False
-     #test it:
--    cmd = ["systemd-run", "--quiet", "--user", "--scope", "--", "true"]
--    proc = Popen(cmd, stdin=None, stdout=None, stderr=None, shell=False)
--    r = pollwait(proc, timeout=1)
--    if r is None:
--        try:
--            proc.terminate()
--        except Exception:
--            pass
--    return r==0
--
-+    try:
-+        cmd = ["systemd-run", "--quiet", "--user", "--scope", "--", "true"]
-+        proc = Popen(cmd, stdin=None, stdout=None, stderr=None, shell=False)
-+        r = pollwait(proc, timeout=1)
-+        if r is None:
-+            try:
-+                proc.terminate()
-+            except Exception:
-+                pass
-+        return r==0
-+    except FileNotFoundError:
-+        return False
- 
- def run_mode(script_file, error_cb, options, args, mode, defaults):
-     #configure default logging handler:
diff --git a/gnu/packages/patches/xpra-4.2-systemd-run.patch b/gnu/packages/patches/xpra-4.2-systemd-run.patch
new file mode 100644
index 0000000000..8dfd9c82f0
--- /dev/null
+++ b/gnu/packages/patches/xpra-4.2-systemd-run.patch
@@ -0,0 +1,45 @@
+Disable systemd-run if the command is not found.
+
+diff -ru xpra-4.2~/xpra/scripts/main.py xpra-4.2/xpra/scripts/main.py
+--- xpra-4.2~/xpra/scripts/main.py	2021-06-06 08:51:13.756815842 -0700
++++ xpra-4.2/xpra/scripts/main.py	2021-06-06 16:07:13.371024486 -0700
+@@ -331,23 +331,26 @@
+     if not is_systemd_pid1():
+         return False    # pragma: no cover
+     #test it:
+-    cmd = ["systemd-run", "--quiet", "--user", "--scope", "--", "true"]
+-    proc = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=False)
+     try:
+-        proc.communicate(timeout=2)
+-        r = proc.returncode
+-    except TimeoutExpired:  # pragma: no cover
+-        r = None
+-    if r is None:
++        cmd = ["systemd-run", "--quiet", "--user", "--scope", "--", "true"]
++        proc = Popen(cmd, stdout=PIPE, stderr=PIPE, shell=False)
+         try:
+-            proc.terminate()
+-        except Exception:
+-            pass
+-        try:
+-            proc.communicate(timeout=1)
++            proc.communicate(timeout=2)
++            r = proc.returncode
+         except TimeoutExpired:  # pragma: no cover
+             r = None
+-    return r==0
++        if r is None:
++            try:
++                proc.terminate()
++            except Exception:
++                pass
++            try:
++                proc.communicate(timeout=1)
++            except TimeoutExpired:  # pragma: no cover
++                r = None
++        return r==0
++    except FileNotFoundError:
++        return False
+ 
+ 
+ def run_mode(script_file, error_cb, options, args, mode, defaults):
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index 9156fb3163..e123c6f9ce 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -69,6 +69,7 @@
   #:use-module (gnu packages gnupg)
   #:use-module (gnu packages gperf)
   #:use-module (gnu packages gtk)
+  #:use-module (gnu packages haskell-xyz)
   #:use-module (gnu packages inkscape)
   #:use-module (gnu packages image)
   #:use-module (gnu packages imagemagick)
@@ -6300,15 +6301,15 @@ basic eye-candy effects.")
 (define-public xpra
   (package
     (name "xpra")
-    (version "4.0.6")
+    (version "4.2")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://www.xpra.org/src/xpra-"
-                           version ".tar.xz"))
+                           version ".tar.gz"))
        (sha256
-        (base32 "1s49y2s75a8a70vj0micnmpic5zv1n32yjxy8fkxsqa6j5njyrww"))
-       (patches (search-patches "xpra-4.0.1-systemd-run.patch"))))
+        (base32 "1yg9asi3i3wf73ibc006xv3g77axvbyp81lyinwq27syabh30i1a"))
+       (patches (search-patches "xpra-4.2-systemd-run.patch"))))
     (build-system python-build-system)
     ;; see also http://xpra.org/trac/wiki/Dependencies
     (inputs `(
@@ -6337,6 +6338,7 @@ basic eye-candy effects.")
               ("libx264" ,libx264)
               ("x265" ,x265)
               ("libvpx" ,libvpx)
+              ("pandoc" ,pandoc)
               ("python-rencode" ,python-rencode) ; For speed.
               ("python-numpy" ,python-numpy)
               ("python-pyopengl" ,python-pyopengl) ; Drawing acceleration.
@@ -6383,7 +6385,7 @@ basic eye-candy effects.")
                  (close-port file)))
              ;; Add Xorg module paths.
              (append-to-file
-              "etc/xpra/xorg.conf"
+              "fs/etc/xpra/xorg.conf"
               (string-append "\nSection \"Files\"\nModulePath \""
                              (assoc-ref inputs "xf86-video-dummy") "/lib/xorg/modules,"
                              (assoc-ref inputs "xf86-input-mouse") "/lib/xorg/modules,"
@@ -6391,8 +6393,8 @@ basic eye-candy effects.")
                              (assoc-ref inputs "xorg-server") "/lib/xorg/modules\"\n"
                              "EndSection\n\n"))
              (substitute* '("xpra/scripts/config.py"
-                            "etc/xpra/conf.d/60_server.conf.in"
-                            "unittests/unit/server/mixins/notification_test.py")
+                            "fs/etc/xpra/conf.d/60_server.conf.in"
+                            "tests/unittests/unit/server/mixins/notification_test.py")
                ;; The trailing -- is intentional, so we only replace it inside
                ;; a command line.
                (("dbus-launch --")
