summaryrefslogtreecommitdiff
path: root/gnu/packages/xorg.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/xorg.scm')
-rw-r--r--gnu/packages/xorg.scm256
1 files changed, 254 insertions, 2 deletions
diff --git a/gnu/packages/xorg.scm b/gnu/packages/xorg.scm
index d1678fa2f8..4de513599d 100644
--- a/gnu/packages/xorg.scm
+++ b/gnu/packages/xorg.scm
@@ -14,17 +14,18 @@
;;; Copyright © 2017-2022 Marius Bakke <marius@gnu.org>
;;; Copyright © 2017, 2018, 2019 Rutger Helling <rhelling@mykolab.com>
;;; Copyright © 2017, 2020 Arun Isaac <arunisaac@systemreboot.net>
-;;; Copyright © 2018–2022 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2018–2022, 2024 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2018 Kei Kebreau <kkebreau@posteo.net>
;;; Copyright © 2018, 2020, 2022 Oleg Pykhalov <go.wigust@gmail.com>
;;; Copyright © 2018 Benjamin Slade <slade@jnanam.net>
;;; Copyright © 2019 nee <nee@cock.li>
;;; Copyright © 2019 Yoshinori Arai <kumagusu08@gmail.com>
;;; Copyright © 2019 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2019 Todor Kondić <tk.code@protonmail.com>
;;; Copyright © 2020 Liliana Marie Prikler <liliana.prikler@gmail.com>
;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de>
;;; Copyright © 2020, 2021 Michael Rohleder <mike@rohleder.de>
-;;; Copyright © 2020, 2021, 2022, 2023 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2020-2023, 2025 Maxim Cournoyer <maxim@guixotic.coop>
;;; Copyright © 2020 Jean-Baptiste Note <jean-baptiste.note@m4x.org>
;;; Copyright © 2021 Matthew James Kraai <kraai@ftbfs.org>
;;; Copyright © 2021 Nicolò Balzarotti <nicolo@nixo.xyz>
@@ -65,6 +66,7 @@
#:use-module (guix packages)
#:use-module (guix download)
#:use-module (guix git-download)
+ #:use-module (guix build-system cmake)
#:use-module (guix build-system copy)
#:use-module (guix build-system gnu)
#:use-module (guix build-system haskell)
@@ -81,11 +83,13 @@
#:use-module (gnu packages bash)
#:use-module (gnu packages bison)
#:use-module (gnu packages check)
+ #:use-module (gnu packages cmake)
#:use-module (gnu packages cups)
#:use-module (gnu packages compression)
#:use-module (gnu packages digest)
#:use-module (gnu packages emacs)
#:use-module (gnu packages flex)
+ #:use-module (gnu packages fltk)
#:use-module (gnu packages fonts)
#:use-module (gnu packages fontutils)
#:use-module (gnu packages freedesktop)
@@ -95,6 +99,7 @@
#:use-module (gnu packages gnupg)
#:use-module (gnu packages gperf)
#:use-module (gnu packages gtk)
+ #:use-module (gnu packages guile)
#:use-module (gnu packages haskell)
#:use-module (gnu packages haskell-apps)
#:use-module (gnu packages haskell-check)
@@ -108,6 +113,7 @@
#:use-module (gnu packages llvm)
#:use-module (gnu packages m4)
#:use-module (gnu packages ncurses)
+ #:use-module (gnu packages nettle)
#:use-module (gnu packages onc-rpc)
#:use-module (gnu packages pciutils)
#:use-module (gnu packages perl)
@@ -121,7 +127,9 @@
#:use-module (gnu packages python-xyz)
#:use-module (gnu packages qt)
#:use-module (gnu packages spice)
+ #:use-module (gnu packages tls)
#:use-module (gnu packages video)
+ #:use-module (gnu packages vnc)
#:use-module (gnu packages xiph)
#:use-module (gnu packages xml)
#:use-module (gnu packages xdisorg))
@@ -5363,6 +5371,250 @@ draggable titlebars and borders.")
(package
(inherit xorg-server))))
+;;; XXX: Not really at home, but unless we break the inheritance between
+;;; tigervnc-server and xorg-server, it must live here to avoid cyclic module
+;;; dependencies.
+(define-public tigervnc-client
+ ;; The latest version doesn't build with GCC 14 when enabling ffmpeg
+ ;; support; pick the latest commit from the master branch.
+ (let ((commit "83e9c55d4c6a4a989d056a6ed9613bde74bcc50b")
+ (revision "0"))
+ (package
+ (name "tigervnc-client")
+ (version (git-version "1.15.0" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/TigerVNC/tigervnc")
+ (commit commit)))
+ (sha256
+ (base32 "1gqa5lbin4qb2k6iapd4hjxk85byaj6zs8vx0az30i7v18jib1c6"))
+ (file-name (git-file-name name version))))
+ (build-system cmake-build-system)
+ (arguments
+ (list
+ #:phases
+ #~(modify-phases %standard-phases
+ (replace 'check
+ (lambda* (#:key parallel-tests? tests? #:allow-other-keys)
+ (when tests?
+ (invoke "ctest" "-j" (if parallel-tests?
+ (number->string (parallel-job-count))
+ "1")
+ "--test-dir" "tests/unit/"))))
+ (replace 'install
+ (lambda _
+ (with-directory-excursion "vncviewer"
+ (invoke "make" "install")))))))
+ (native-inputs (list appstream gettext-minimal googletest))
+ (inputs
+ (list ffmpeg
+ fltk-1.3
+ gnutls
+ libjpeg-turbo
+ libx11
+ libxdamage
+ libxext
+ libxrandr
+ libxtst
+ linux-pam
+ nettle
+ pixman
+ zlib))
+ (home-page "https://tigervnc.org/")
+ (synopsis "High-performance VNC remote desktop client")
+ (description "TigerVNC implements a @acronym{VNC, Virtual Network Computing}
+client and server. @dfn{VNC} is a remote display system that lets you view and
+interact with a virtual desktop environment running on another computer on the
+network. Client and server may be running on different operating systems and
+architectures.
+
+TigerVNC uses a variant of Tight encoding that is greatly accelerated by the use
+of the libjpeg-turbo JPEG codec and performs fast enough to run even 3D or video
+applications. It also provides extensions for advanced authentication methods
+and @acronym{TLS, Transport-Level Security} encryption.
+
+This package installs only the VNC client (@command{vncviewer}), the application
+used to connect to VNC servers such as the tigervnc-server package.")
+ (license license:gpl2+))))
+
+(define %tigervnc-client-source (package-source tigervnc-client))
+
+;; A VNC server is, in fact, an X server so it seems like a good idea to build
+;; on the work already done for xorg-server package. This is not entirely
+;; compatible with the recommendation in BUILDING.txt where the client is
+;; built first, then the source code of the X server is copied into a subdir
+;; of the build directory, patched with VNC additions and then build and
+;; installed as Xvnc. The procedure was turned around, where TigerVNC code is
+;; downloaded and built inside the Guix X server build dir. Also, the VNC
+;; patching process for the X server is automated in a straightforward manner.
+(define-public tigervnc-server
+ (package
+ (inherit xorg-server)
+ (name "tigervnc-server")
+ (version (package-version tigervnc-client))
+ (source
+ (origin
+ (inherit (package-source xorg-server))
+ (modules '((guix build utils)))
+ (snippet
+ #~(begin
+ ;; Copy the VNC extension into the xorg-server sources.
+ (copy-recursively #$(file-append %tigervnc-client-source
+ "/unix/xserver")
+ ".")
+ ;; Include a full copy of tigervnc-client sources, so that the
+ ;; complete sources involved are available and can be edited during
+ ;; the build.
+ (copy-recursively #$%tigervnc-client-source "tigervnc-client")
+ ;; Adjust the VNC extension build system files so that it refers
+ ;; to it.
+ (substitute* "hw/vnc/Makefile.am"
+ (("(TIGERVNC_SRCDIR=).*" _ head)
+ (string-append head "$(CURDIR)/../../tigervnc-client\n"))
+ (("(TIGERVNC_BUILDDIR=).*" _ head)
+ (string-append head
+ "$(CURDIR)/../../tigervnc-client/build\n")))
+ ;; Ensure the Autotools build system gets re-bootstrapped.
+ (delete-file "configure")))
+ ;; Patch the xorg-server build system so that it builds the VNC
+ ;; extension.
+ (patches (cons (file-append %tigervnc-client-source
+ "/unix/xserver21.patch")
+ (origin-patches (package-source xorg-server))))
+ (file-name (string-append name "-" version ".tar.xz"))))
+ (arguments
+ (substitute-keyword-arguments
+ (package-arguments xorg-server)
+ ((#:tests? #f #f)
+ #f)
+ ((#:configure-flags flags)
+ #~(cons* "--with-pic" ; taken from BUILDING.txt
+ "--without-dtrace"
+ "--disable-static"
+ "--disable-dri2"
+ "--disable-xinerama"
+ "--disable-xvfb"
+ "--disable-xnest"
+ "--disable-xorg"
+ "--disable-dmx"
+ "--disable-xwin"
+ "--disable-xephyr"
+ "--disable-kdrive"
+ "--disable-config-hal"
+ "--disable-config-udev"
+ "--disable-dri2"
+ "--enable-glx"
+ (delete "--enable-xephyr" #$flags)))
+ ((#:modules modules)
+ `(append '((ice-9 ftw)
+ (ice-9 match)
+ (guix build utils)
+ (guix build gnu-build-system))
+ modules))
+ ((#:phases phases)
+ #~(modify-phases #$phases
+ (add-after 'unpack 'adjust-pam-config
+ (lambda _
+ (substitute* "tigervnc-client/unix/vncserver/tigervnc.pam"
+ (("pam_systemd.so")
+ "pam_elogind.so"))))
+ (add-after 'unpack 'patch-paths
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* "tigervnc-client/unix/vncserver/vncserver.in"
+ (("`mcookie`")
+ (format #f "`~a`" (search-input-file inputs "bin/mcookie")))
+ ;; Adjust the places where the vncserver script looks for
+ ;; X11 fonts.
+ (("'/usr/share/X11/fonts'" all)
+ (format #f "'~a', '~a', ~a"
+ "/run/current-system/profile/share/fonts/X11"
+ (string-append #$(this-package-input "font-alias")
+ "share/fonts/X11")
+ all))
+ ;; Adjust the location where .desktop files will be saved.
+ (("/usr/share/xsessions")
+ "/run/current-system/profile/share/xsessions")
+ ;; Do not require a system-provided Xsession shell script.
+ ;; Guix System has none, causing the for loop to iterate
+ ;; over an empty list.
+ (("\"/etc/X11/xinit/Xsession\", \"/etc/X11/Xsession\"")
+ "()")
+ (("if \\(not defined \\$Xsession)")
+ "if (0)")
+ (("@cmd, \\$Xsession,")
+ "@cmd,"))))
+ (add-before 'build 'build-tigervnc
+ (lambda* (#:key parallel-build? #:allow-other-keys)
+ (mkdir-p "tigervnc-client/build")
+ (with-directory-excursion "tigervnc-client/build"
+ (invoke "cmake" "-G" "Unix Makefiles"
+ (string-append "-DCMAKE_INSTALL_PREFIX=" #$output)
+ "..")
+ (invoke "make" "-j" (number->string (if parallel-build?
+ (parallel-job-count)
+ 1))))))
+ (replace 'build
+ (lambda* (#:key parallel-build? #:allow-other-keys)
+ (invoke "make" "-j" (number->string (if parallel-build?
+ (parallel-job-count)
+ 1)))))
+ (add-before 'install 'install-tigervnc-aux
+ (lambda _
+ (invoke "make" "-C" "tigervnc-client/build/unix" "install")))
+ (replace 'install
+ (lambda _
+ (invoke "make" "install")))
+ (add-after 'install 'wrap-vncserver
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (wrap-script (search-input-file outputs "libexec/vncserver")
+ (list "PATH" 'prefix
+ (map (lambda (p)
+ (dirname (search-input-file inputs p)))
+ '("bin/uname"
+ "bin/xauth"
+ "bin/xinit"))))))))))
+ (native-inputs
+ (modify-inputs (append (package-native-inputs xorg-server)
+ (package-native-inputs tigervnc-client))
+ (append (package-source tigervnc-client)
+ autoconf
+ automake
+ libtool
+ gettext-minimal
+ font-util
+ cmake
+ perl)))
+ (inputs
+ (modify-inputs (append (package-inputs xorg-server)
+ (package-inputs tigervnc-client))
+ (prepend coreutils
+ font-alias
+ guile-3.0
+ perl
+ util-linux
+ xauth
+ xinit)))
+ (propagated-inputs
+ (modify-inputs (package-propagated-inputs xorg-server)
+ (prepend xauth)))
+ (synopsis "High-performance VNC remote desktop server based on Xorg")
+ (description "TigerVNC implements a @acronym{VNC, Virtual Network Computing}
+client and server. @dfn{VNC} is a remote display system that lets you view and
+interact with a virtual desktop environment running on another computer on the
+network. Client and server may be running on different operating systems and
+architectures.
+
+TigerVNC uses a variant of Tight encoding that is greatly accelerated by the use
+of the libjpeg-turbo JPEG codec and performs fast enough to run even 3D or video
+applications. It also provides extensions for advanced authentication methods
+and @acronym{TLS, Transport-Level Security} encryption.
+
+This package installs the VNC server. Permitted users can log into a graphical
+session on the machine where the server is running, using a VNC client such as
+the tigervnc-client package.")))
+
(define-public eglexternalplatform
(package
(name "eglexternalplatform")