gnu: Add Wayland support for GDM.

Add the optional flag `wayland?` in `gdm-configuration` to launch GDM with
Wayland, enabling the use of Wayland sessions with GDM.

* gnu/packages/patches/gdm-remove-hardcoded-xwayland-path.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/gnome.scm (gdm): Use it.
* gnu/services/xorg.scm (<gdm-configuration>)[wayland?]: New field.
(gdm-configuration): Honor it.
(gdm-shepherd-service): Add the XCURSOR_PATH environment variable.
* doc/guix.texi (X Window): Document it

Signed-off-by: Mathieu Othacehe <othacehe@gnu.org>
This commit is contained in:
Josselin Poiret 2021-09-13 07:45:06 +00:00 committed by Mathieu Othacehe
parent fc24bcb86f
commit 5c3f0c3e03
No known key found for this signature in database
GPG key ID: 8354763531769CA6
5 changed files with 60 additions and 16 deletions

View file

@ -96,6 +96,7 @@ Copyright @copyright{} 2021 Domagoj Stolfa@*
Copyright @copyright{} 2021 Hui Lu@* Copyright @copyright{} 2021 Hui Lu@*
Copyright @copyright{} 2021 pukkamustard@* Copyright @copyright{} 2021 pukkamustard@*
Copyright @copyright{} 2021 Alice Brenon@* Copyright @copyright{} 2021 Alice Brenon@*
Copyright @copyright{} 2021 Josselin Poiret@*
Permission is granted to copy, distribute and/or modify this document Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or under the terms of the GNU Free Documentation License, Version 1.3 or
@ -18253,19 +18254,26 @@ example the @code{windowmaker} or @code{openbox} packages---preferably
by adding it to the @code{packages} field of your operating system by adding it to the @code{packages} field of your operating system
definition (@pxref{operating-system Reference, system-wide packages}). definition (@pxref{operating-system Reference, system-wide packages}).
@anchor{wayland-gdm}
GDM also supports Wayland: it can itself use Wayland instead of X11 for
its user interface, and it can also start Wayland sessions. The former is
required for the latter, to enable, set @code{wayland?} to @code{#t} in
@code{gdm-configuration}.
@defvr {Scheme Variable} gdm-service-type @defvr {Scheme Variable} gdm-service-type
This is the type for the @uref{https://wiki.gnome.org/Projects/GDM/, GNOME This is the type for the @uref{https://wiki.gnome.org/Projects/GDM/, GNOME
Desktop Manager} (GDM), a program that manages graphical display servers and Desktop Manager} (GDM), a program that manages graphical display servers and
handles graphical user logins. Its value must be a @code{gdm-configuration} handles graphical user logins. Its value must be a @code{gdm-configuration}
(see below). (see below).
@cindex session types (X11) @cindex session types
@cindex X11 session types
GDM looks for @dfn{session types} described by the @file{.desktop} files in GDM looks for @dfn{session types} described by the @file{.desktop} files in
@file{/run/current-system/profile/share/xsessions} and allows users to choose @file{/run/current-system/profile/share/xsessions} (for X11 sessions) and
a session from the log-in screen. Packages such as @code{gnome}, @code{xfce}, @file{/run/current-system/profile/share/wayland-sessions} (for Wayland
and @code{i3} provide @file{.desktop} files; adding them to the system-wide sessions) and allows users to choose a session from the log-in screen.
set of packages automatically makes them available at the log-in screen. Packages such as @code{gnome}, @code{xfce}, @code{i3} and @code{sway} provide
@file{.desktop} files; adding them to the system-wide set of packages
automatically makes them available at the log-in screen.
In addition, @file{~/.xsession} files are honored. When available, In addition, @file{~/.xsession} files are honored. When available,
@file{~/.xsession} must be an executable that starts a window manager @file{~/.xsession} must be an executable that starts a window manager
@ -18298,6 +18306,9 @@ File name of the @code{dbus-daemon} executable.
@item @code{gdm} (default: @code{gdm}) @item @code{gdm} (default: @code{gdm})
The GDM package to use. The GDM package to use.
@item @code{wayland?} (default: @code{#f})
When true, enables Wayland in GDM, necessary to use Wayland sessions.
@end table @end table
@end deftp @end deftp
@ -19526,11 +19537,12 @@ expected.
The desktop environments in Guix use the Xorg display server by The desktop environments in Guix use the Xorg display server by
default. If you'd like to use the newer display server protocol default. If you'd like to use the newer display server protocol
called Wayland, you need to use the @code{sddm-service} instead of called Wayland, you need to enable Wayland support in GDM
GDM as the graphical login manager. You should then (@pxref{wayland-gdm}). Another solution is to use the
select the ``GNOME (Wayland)'' session in SDDM@. Alternatively you can @code{sddm-service} instead of GDM as the graphical login manager.
also try starting GNOME on Wayland manually from a TTY with the You should then select the ``GNOME (Wayland)'' session in SDDM@.
command ``XDG_SESSION_TYPE=wayland exec dbus-run-session Alternatively you can also try starting GNOME on Wayland manually from a
TTY with the command ``XDG_SESSION_TYPE=wayland exec dbus-run-session
gnome-session``. Currently only GNOME has support for Wayland. gnome-session``. Currently only GNOME has support for Wayland.
@defvr {Scheme Variable} gnome-desktop-service-type @defvr {Scheme Variable} gnome-desktop-service-type

View file

@ -1101,6 +1101,7 @@ dist_patch_DATA = \
%D%/packages/patches/gd-Revert-fix-303-gdlib.pc-use-Requires-instead-of-Libs.patch \ %D%/packages/patches/gd-Revert-fix-303-gdlib.pc-use-Requires-instead-of-Libs.patch \
%D%/packages/patches/gdm-default-session.patch \ %D%/packages/patches/gdm-default-session.patch \
%D%/packages/patches/gdm-elogind-support.patch \ %D%/packages/patches/gdm-elogind-support.patch \
%D%/packages/patches/gdm-remove-hardcoded-xwayland-path.patch \
%D%/packages/patches/geary-CVE-2020-24661.patch \ %D%/packages/patches/geary-CVE-2020-24661.patch \
%D%/packages/patches/genimage-signedness.patch \ %D%/packages/patches/genimage-signedness.patch \
%D%/packages/patches/geoclue-config.patch \ %D%/packages/patches/geoclue-config.patch \

View file

@ -63,6 +63,7 @@
;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net> ;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
;;; Copyright © 2021 Felix Gruber <felgru@posteo.net> ;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be> ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
;;; Copyright © 2021 Josselin Poiret <josselin.poiret@protonmail.ch>
;;; ;;;
;;; This file is part of GNU Guix. ;;; This file is part of GNU Guix.
;;; ;;;
@ -8148,7 +8149,8 @@ (define-public gdm
(patches (patches
(search-patches (search-patches
"gdm-default-session.patch" "gdm-default-session.patch"
"gdm-elogind-support.patch")))) "gdm-elogind-support.patch"
"gdm-remove-hardcoded-xwayland-path.patch"))))
(build-system meson-build-system) (build-system meson-build-system)
(arguments (arguments
`(#:glib-or-gtk? #t `(#:glib-or-gtk? #t

View file

@ -0,0 +1,22 @@
Remove check for hardcoded Xwayland path in gdm.
---
daemon/gdm-local-display-factory.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/daemon/gdm-local-display-factory.c b/daemon/gdm-local-display-factory.c
index da1093bb..37355c06 100644
--- a/daemon/gdm-local-display-factory.c
+++ b/daemon/gdm-local-display-factory.c
@@ -203,7 +203,7 @@ gdm_local_display_factory_use_wayland (void)
#ifdef ENABLE_WAYLAND_SUPPORT
gboolean wayland_enabled = FALSE;
if (gdm_settings_direct_get_boolean (GDM_KEY_WAYLAND_ENABLE, &wayland_enabled)) {
- if (wayland_enabled && g_file_test ("/usr/bin/Xwayland", G_FILE_TEST_IS_EXECUTABLE) )
+ if (wayland_enabled)
return TRUE;
}
#endif
--
2.33.0

View file

@ -10,6 +10,7 @@
;;; Copyright © 2020 Alex Griffin <a@ajgrf.com> ;;; Copyright © 2020 Alex Griffin <a@ajgrf.com>
;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re> ;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
;;; Copyright © 2021 Oleg Pykhalov <go.wigust@gmail.com> ;;; Copyright © 2021 Oleg Pykhalov <go.wigust@gmail.com>
;;; Copyright © 2021 Josselin Poiret <josselin.poiret@protonmail.ch>
;;; ;;;
;;; This file is part of GNU Guix. ;;; This file is part of GNU Guix.
;;; ;;;
@ -883,7 +884,8 @@ (define-record-type* <gdm-configuration>
(xorg-configuration gdm-configuration-xorg (xorg-configuration gdm-configuration-xorg
(default (xorg-configuration))) (default (xorg-configuration)))
(x-session gdm-configuration-x-session (x-session gdm-configuration-x-session
(default (xinitrc)))) (default (xinitrc)))
(wayland? gdm-configuration-wayland? (default #f)))
(define (gdm-configuration-file config) (define (gdm-configuration-file config)
(mixed-text-file "gdm-custom.conf" (mixed-text-file "gdm-custom.conf"
@ -909,8 +911,9 @@ (define (gdm-configuration-file config)
;; See also ;; See also
;; <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=39281>. ;; <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=39281>.
"InitialSetupEnable=false\n" "InitialSetupEnable=false\n"
;; Enable me once X is working. "WaylandEnable=" (if (gdm-configuration-wayland? config)
"WaylandEnable=false\n" "true"
"false") "\n"
"\n" "\n"
"[debug]\n" "[debug]\n"
"Enable=" (if (gdm-configuration-debug? config) "Enable=" (if (gdm-configuration-debug? config)
@ -976,7 +979,11 @@ (define (gdm-shepherd-service config)
;; can depend on GNOME Shell directly. ;; can depend on GNOME Shell directly.
(cons #$gnome-shell (cons #$gnome-shell
'#$(gdm-configuration-gnome-shell-assets '#$(gdm-configuration-gnome-shell-assets
config))))))))) config)))))
;; Add XCURSOR_PATH so that mutter can find its
;; cursors. gdm doesn't login so doesn't source
;; the corresponding line in /etc/profile.
"XCURSOR_PATH=/run/current-system/profile/share/icons"))))
(stop #~(make-kill-destructor)) (stop #~(make-kill-destructor))
(respawn? #t)))) (respawn? #t))))