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 pukkamustard@*
Copyright @copyright{} 2021 Alice Brenon@*
Copyright @copyright{} 2021 Josselin Poiret@*
Permission is granted to copy, distribute and/or modify this document
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
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
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
handles graphical user logins. Its value must be a @code{gdm-configuration}
(see below).
@cindex session types (X11)
@cindex X11 session types
@cindex session types
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
a session from the log-in screen. Packages such as @code{gnome}, @code{xfce},
and @code{i3} provide @file{.desktop} files; adding them to the system-wide
set of packages automatically makes them available at the log-in screen.
@file{/run/current-system/profile/share/xsessions} (for X11 sessions) and
@file{/run/current-system/profile/share/wayland-sessions} (for Wayland
sessions) and allows users to choose a session from 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,
@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})
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 deftp
@ -19526,11 +19537,12 @@ expected.
The desktop environments in Guix use the Xorg display server by
default. If you'd like to use the newer display server protocol
called Wayland, you need to use the @code{sddm-service} instead of
GDM as the graphical login manager. You should then
select the ``GNOME (Wayland)'' session in SDDM@. Alternatively you can
also try starting GNOME on Wayland manually from a TTY with the
command ``XDG_SESSION_TYPE=wayland exec dbus-run-session
called Wayland, you need to enable Wayland support in GDM
(@pxref{wayland-gdm}). Another solution is to use the
@code{sddm-service} instead of GDM as the graphical login manager.
You should then select the ``GNOME (Wayland)'' session in SDDM@.
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.
@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/gdm-default-session.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/genimage-signedness.patch \
%D%/packages/patches/geoclue-config.patch \

View file

@ -63,6 +63,7 @@
;;; Copyright © 2021 Guillaume Le Vaillant <glv@posteo.net>
;;; Copyright © 2021 Felix Gruber <felgru@posteo.net>
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
;;; Copyright © 2021 Josselin Poiret <josselin.poiret@protonmail.ch>
;;;
;;; This file is part of GNU Guix.
;;;
@ -8148,7 +8149,8 @@ (define-public gdm
(patches
(search-patches
"gdm-default-session.patch"
"gdm-elogind-support.patch"))))
"gdm-elogind-support.patch"
"gdm-remove-hardcoded-xwayland-path.patch"))))
(build-system meson-build-system)
(arguments
`(#: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 © 2021 Brice Waegeneire <brice@waegenei.re>
;;; Copyright © 2021 Oleg Pykhalov <go.wigust@gmail.com>
;;; Copyright © 2021 Josselin Poiret <josselin.poiret@protonmail.ch>
;;;
;;; This file is part of GNU Guix.
;;;
@ -883,7 +884,8 @@ (define-record-type* <gdm-configuration>
(xorg-configuration gdm-configuration-xorg
(default (xorg-configuration)))
(x-session gdm-configuration-x-session
(default (xinitrc))))
(default (xinitrc)))
(wayland? gdm-configuration-wayland? (default #f)))
(define (gdm-configuration-file config)
(mixed-text-file "gdm-custom.conf"
@ -909,8 +911,9 @@ (define (gdm-configuration-file config)
;; See also
;; <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=39281>.
"InitialSetupEnable=false\n"
;; Enable me once X is working.
"WaylandEnable=false\n"
"WaylandEnable=" (if (gdm-configuration-wayland? config)
"true"
"false") "\n"
"\n"
"[debug]\n"
"Enable=" (if (gdm-configuration-debug? config)
@ -976,7 +979,11 @@ (define (gdm-shepherd-service config)
;; can depend on GNOME Shell directly.
(cons #$gnome-shell
'#$(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))
(respawn? #t))))