From 956607e34095e99235706e94b61376a4c7c497bf Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Mon, 18 Mar 2019 21:52:18 +0100 Subject: services: xorg: Remove unused #:guile parameter. * gnu/services/xorg.scm (xorg-wrapper): Remove #:guile, which was unused. (xorg-start-command): Likewise. (xinitrc): Likewise. --- gnu/services/xorg.scm | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) (limited to 'gnu/services/xorg.scm') diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm index f2a3c28c90..8381a7ed04 100644 --- a/gnu/services/xorg.scm +++ b/gnu/services/xorg.scm @@ -261,7 +261,6 @@ in @var{modules}." #t)))) (define* (xorg-wrapper #:key - (guile (canonical-package guile-2.0)) (modules %default-xorg-modules) (configuration-file (xorg-configuration-file #:modules modules)) @@ -287,7 +286,6 @@ in place of @code{/usr/bin/X}." (program-file "X-wrapper" exp)) (define* (xorg-start-command #:key - (guile (canonical-package guile-2.0)) (modules %default-xorg-modules) (fonts %default-xorg-fonts) (configuration-file @@ -300,8 +298,7 @@ packages, and @var{fonts}, a list of X font directories, are available. See @code{xorg-wrapper} for more details on the arguments. The result should be used in place of @code{startx}." (define X - (xorg-wrapper #:guile guile - #:configuration-file configuration-file + (xorg-wrapper #:configuration-file configuration-file #:modules modules #:xorg-server xorg-server)) (define exp @@ -312,9 +309,7 @@ used in place of @code{startx}." (program-file "startx" exp)) -(define* (xinitrc #:key - (guile (canonical-package guile-2.0)) - fallback-session) +(define* (xinitrc #:key fallback-session) "Return a system-wide xinitrc script that starts the specified X session, which should be passed to this script as the first argument. If not, the @var{fallback-session} will be used or, if @var{fallback-session} is false, a -- cgit 1.4.1 From b2e564515a811c75ed9bd30969bc48ac4eadebfb Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Mon, 18 Mar 2019 22:56:13 +0100 Subject: services: xorg: Define an record type. * gnu/services/xorg.scm (): New record type. (xorg-configuration-file): Remove. (xorg-wrapper): Remove #:modules, #:configuration-file, and #:xorg-server; add optional 'config' parameter instead. Adjust accordingly. (xorg-start-command): Likewise. * doc/guix.texi (X Window): Document 'xorg-configuration'. Update 'xorg-start-command' documentation. Remove 'xorg-configuration-file' documentation. --- doc/guix.texi | 118 +++++++++++++++---------------------------------- gnu/services/xorg.scm | 119 +++++++++++++++++++++++++------------------------- 2 files changed, 95 insertions(+), 142 deletions(-) (limited to 'gnu/services/xorg.scm') diff --git a/doc/guix.texi b/doc/guix.texi index 5789b3b99b..b49f651562 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -13352,99 +13352,53 @@ type @code{}. @end example @end deffn -@deffn {Scheme Procedure} xorg-start-command @ - [#:modules %default-xorg-modules] @ - [#:fonts %default-xorg-fonts] @ - [#:configuration-file (xorg-configuration-file @dots{})] @ - [#:xorg-server @var{xorg-server}] - [#:xserver-arguments '("-nolisten" "tcp")] -Return a @code{startx} script in which @var{modules}, a list of X module -packages, and @var{fonts}, a list of X font directories, are available. See -@code{xorg-wrapper} for more details on the arguments. The result should be -used in place of @code{startx}. +@cindex Xorg, configuration +@deftp {Data Type} xorg-configuration +This data type represents the configuration of the Xorg graphical display +server. Note that there is not Xorg service; instead, the X server is started +by a ``display manager'' such as GDM, SDDM, and SLiM. Thus, the configuration +of these display managers aggregates an @code{xorg-configuration} record. -Usually the X server is started by a login manager. -@end deffn +@table @asis +@item @code{modules} (default: @code{%default-xorg-modules}) +This is a list of @dfn{module packages} loaded by the Xorg +server---e.g., @code{xf86-video-vesa}, @code{xf86-input-keyboard}, and so on. -@cindex @code{-listen tcp}, for X11. -This procedure is useful to override command line options for the X server, -such as having it listen to over TCP: +@item @code{fonts} (default: @code{%default-xorg-fonts}) +This is a list of font directories to add to the server's @dfn{font path}. -@example -(operating-system - ... - (services - (modify-services %desktop-services - (slim-service-type config => - (slim-configuration - (inherit config) - (startx (xorg-start-command - #:xserver-arguments '("-listen" "tcp")))))))) -@end example - -@deffn {Scheme Procedure} xorg-configuration-file @ - [#:modules %default-xorg-modules] @ - [#:fonts %default-xorg-fonts] @ - [#:drivers '()] [#:resolutions '()] [#:extra-config '()] -Return a configuration file for the Xorg server containing search paths for -all the common drivers. - -@var{modules} must be a list of @dfn{module packages} loaded by the Xorg -server---e.g., @code{xf86-video-vesa}, @code{xf86-input-keyboard}, and so on. -@var{fonts} must be a list of font directories to add to the server's -@dfn{font path}. +@item @code{drivers} (default: @code{'()}) +This must be either the empty list, in which case Xorg chooses a graphics +driver automatically, or a list of driver names that will be tried in this +order---e.g., @code{("modesetting" "vesa")}. -@var{drivers} must be either the empty list, in which case Xorg chooses a -graphics driver automatically, or a list of driver names that will be tried in -this order---e.g., @code{("modesetting" "vesa")}. +@item @code{resolutions} (default: @code{'()}) +When @code{resolutions} is the empty list, Xorg chooses an appropriate screen +resolution. Otherwise, it must be a list of resolutions---e.g., @code{((1024 +768) (640 480))}. -Likewise, when @var{resolutions} is the empty list, Xorg chooses an -appropriate screen resolution; otherwise, it must be a list of -resolutions---e.g., @code{((1024 768) (640 480))}. +@item @code{extra-config} (default: @code{'()}) +This is a list of strings or objects appended to the configuration file. It +is used to pass extra text to be added verbatim to the configuration file. -Last, @var{extra-config} is a list of strings or objects appended to the -configuration file. It is used to pass extra text to be -added verbatim to the configuration file. +@item @code{server} (default: @code{xorg-server}) +This is the package providing the Xorg server. -@cindex keymap -@cindex keyboard layout -This procedure is especially useful to configure a different keyboard layout -than the default US keymap. For instance, to use the ``bépo'' keymap by -default on the display manager: +@item @code{server-arguments} (default: @code{%default-xorg-server-arguments}) +This is the list of command-line arguments to pass to the X server. The +default is @code{-nolisten tcp}. +@end table +@end deftp -@example -(define bepo-evdev - "Section \"InputClass\" - Identifier \"evdev keyboard catchall\" - Driver \"evdev\" - MatchIsKeyboard \"on\" - Option \"xkb_layout\" \"fr\" - Option \"xkb_variant\" \"bepo\" -EndSection") +@deffn {Scheme Procedure} xorg-start-command [@var{config}] +Return a @code{startx} script in which the modules, fonts, etc. specified +in @var{config}, are available. The result should be used in place of +@code{startx}. -(operating-system - ... - (services - (modify-services %desktop-services - (slim-service-type config => - (slim-configuration - (inherit config) - (startx (xorg-start-command - #:configuration-file - (xorg-configuration-file - #:extra-config - (list bepo-evdev))))))))) -@end example - -The @code{MatchIsKeyboard} line specifies that we only apply the configuration -to keyboards. Without this line, other devices such as touchpad may not work -correctly because they will be attached to the wrong driver. In this example, -the user typically used @code{setxkbmap fr bepo} to set their favorite keymap -once logged in. The first argument corresponds to the layout, while the second -argument corresponds to the variant. The @code{xkb_variant} line can be omitted -to select the default variant. +Usually the X server is started by a login manager. @end deffn + @deffn {Scheme Procedure} screen-locker-service @var{package} [@var{program}] Add @var{package}, a package for a screen locker or screen saver whose command is @var{program}, to the set of setuid programs and add a PAM entry diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm index 8381a7ed04..3c547c1303 100644 --- a/gnu/services/xorg.scm +++ b/gnu/services/xorg.scm @@ -48,7 +48,16 @@ #:use-module (srfi srfi-9) #:use-module (srfi srfi-26) #:use-module (ice-9 match) - #:export (xorg-configuration-file + #:export (xorg-configuration + xorg-configuration? + xorg-configuration-modules + xorg-configuration-fonts + xorg-configuration-drivers + xorg-configuration-resolutions + xorg-configuration-extra-config + xorg-configuration-server + xorg-configuration-server-arguments + %default-xorg-modules %default-xorg-fonts xorg-wrapper @@ -122,33 +131,36 @@ "/share/fonts/X11/misc") (file-append font-adobe75dpi "/share/fonts/X11/75dpi"))) -(define* (xorg-configuration-file #:key - (modules %default-xorg-modules) - (fonts %default-xorg-fonts) - (drivers '()) (resolutions '()) - (extra-config '())) - "Return a configuration file for the Xorg server containing search paths for -all the common drivers. - -@var{modules} must be a list of @dfn{module packages} loaded by the Xorg -server---e.g., @code{xf86-video-vesa}, @code{xf86-input-keyboard}, and so on. -@var{fonts} must be a list of font directories to add to the server's -@dfn{font path}. - -@var{drivers} must be either the empty list, in which case Xorg chooses a -graphics driver automatically, or a list of driver names that will be tried in -this order---e.g., @code{(\"modesetting\" \"vesa\")}. - -Likewise, when @var{resolutions} is the empty list, Xorg chooses an -appropriate screen resolution; otherwise, it must be a list of -resolutions---e.g., @code{((1024 768) (640 480))}. - -Last, @var{extra-config} is a list of strings or objects appended to the -configuration file. It is used to pass extra text to be -added verbatim to the configuration file." +(define %default-xorg-server-arguments + ;; Default command-line arguments for X. + '("-nolisten" "tcp")) + +;; Configuration of an Xorg server. +(define-record-type* + xorg-configuration make-xorg-configuration + xorg-configuration? + (modules xorg-configuration-modules ;list of packages + (default %default-xorg-modules)) + (fonts xorg-configuration-fonts ;list of packges + (default %default-xorg-fonts)) + (drivers xorg-configuration-drivers ;list of strings + (default '())) + (resolutions xorg-configuration-resolutions ;list of tuples + (default '())) + (extra-config xorg-configuration-extra-config ;list of strings + (default '())) + (server xorg-configuration-server ;package + (default xorg-server)) + (server-arguments xorg-configuration-server-arguments ;list of strings + (default %default-xorg-server-arguments))) + +(define (xorg-configuration->file config) + "Compute an Xorg configuration file corresponding to CONFIG, an + record." (define all-modules ;; 'xorg-server' provides 'fbdevhw.so' etc. - (append modules (list xorg-server))) + (append (xorg-configuration-modules config) + (list xorg-server))) (define build #~(begin @@ -159,7 +171,7 @@ added verbatim to the configuration file." (call-with-output-file #$output (lambda (port) (define drivers - '#$drivers) + '#$(xorg-configuration-drivers config)) (define (device-section driver) (string-append " @@ -201,7 +213,7 @@ EndSection")) (display "Section \"Files\"\n" port) (for-each (lambda (font) (format port " FontPath \"~a\"~%" font)) - '#$fonts) + '#$(xorg-configuration-fonts config)) (for-each (lambda (module) (format port " ModulePath \"~a\"~%" @@ -221,7 +233,8 @@ EndSection\n" port) port) (newline port) (display (string-join - (map (cut screen-section <> '#$resolutions) + (map (cut screen-section <> + '#$(xorg-configuration-resolutions config)) drivers) "\n") port) @@ -229,11 +242,10 @@ EndSection\n" port) (for-each (lambda (config) (display config port)) - '#$extra-config))))) + '#$(xorg-configuration-extra-config config)))))) (computed-file "xserver.conf" build)) - (define (xorg-configuration-directory modules) "Return a directory that contains the @code{.conf} files for X.org that includes the @code{share/X11/xorg.conf.d} directories of each package listed @@ -260,51 +272,38 @@ in @var{modules}." files) #t)))) -(define* (xorg-wrapper #:key - (modules %default-xorg-modules) - (configuration-file (xorg-configuration-file - #:modules modules)) - (xorg-server xorg-server)) - "Return a derivation that builds a @var{guile} script to start the X server -from @var{xorg-server}. @var{configuration-file} is the server configuration -file or a derivation that builds it; when omitted, the result of -@code{xorg-configuration-file} is used. The resulting script should be used -in place of @code{/usr/bin/X}." +(define* (xorg-wrapper #:optional (config (xorg-configuration))) + "Return a derivation that builds a script to start the X server with the +given @var{config}. The resulting script should be used in place of +@code{/usr/bin/X}." (define exp ;; Write a small wrapper around the X server. #~(begin (setenv "XORG_DRI_DRIVER_PATH" (string-append #$mesa "/lib/dri")) (setenv "XKB_BINDIR" (string-append #$xkbcomp "/bin")) - (let ((X (string-append #$xorg-server "/bin/X"))) + (let ((X (string-append #$(xorg-configuration-server config) "/bin/X"))) (apply execl X X "-xkbdir" (string-append #$xkeyboard-config "/share/X11/xkb") - "-config" #$configuration-file - "-configdir" #$(xorg-configuration-directory modules) + "-config" #$(xorg-configuration->file config) + "-configdir" #$(xorg-configuration-directory + (xorg-configuration-modules config)) (cdr (command-line)))))) (program-file "X-wrapper" exp)) -(define* (xorg-start-command #:key - (modules %default-xorg-modules) - (fonts %default-xorg-fonts) - (configuration-file - (xorg-configuration-file #:modules modules - #:fonts fonts)) - (xorg-server xorg-server) - (xserver-arguments '("-nolisten" "tcp"))) - "Return a @code{startx} script in which @var{modules}, a list of X module -packages, and @var{fonts}, a list of X font directories, are available. See -@code{xorg-wrapper} for more details on the arguments. The result should be -used in place of @code{startx}." +(define* (xorg-start-command #:optional (config (xorg-configuration))) + "Return a @code{startx} script in which the modules, fonts, etc. specified +in @var{config}, are available. The result should be used in place of +@code{startx}." (define X - (xorg-wrapper #:configuration-file configuration-file - #:modules modules - #:xorg-server xorg-server)) + (xorg-wrapper config)) + (define exp ;; Write a small wrapper around the X server. #~(apply execl #$X #$X ;; Second #$X is for argv[0]. - "-logverbose" "-verbose" "-terminate" #$@xserver-arguments + "-logverbose" "-verbose" "-terminate" + #$@(xorg-configuration-server-arguments config) (cdr (command-line)))) (program-file "startx" exp)) -- cgit 1.4.1 From 554b8607396785dcde6eb391f75f98a07ec582fd Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Tue, 19 Mar 2019 21:26:33 +0100 Subject: services: sddm, slim, gdm: Take an record. * gnu/services/sddm.scm ()[xorg-server-path] [xserver-arguments]: Remove. [xorg-configuration]: New field. (sddm-configuration-file): Adjust accordingly. * gnu/services/xorg.scm ()[startx]: Remove. [xorg-configuration]: New field. (slim-shepherd-service, slim-service): Adjust accordingly. ()[x-server]: Remove. [xorg-configuration]: New field. (gdm-shepherd-service, gdm-service): Adjust accordingly. * doc/guix.texi (X Window): Update accordingly. --- doc/guix.texi | 11 ++++------- gnu/services/sddm.scm | 14 ++++++++------ gnu/services/xorg.scm | 19 +++++++++---------- 3 files changed, 21 insertions(+), 23 deletions(-) (limited to 'gnu/services/xorg.scm') diff --git a/doc/guix.texi b/doc/guix.texi index b49f651562..5511aaaf57 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -13223,8 +13223,8 @@ your user profile. Failing to do that, if @code{auto-login-session} is false, you will be unable to log in. @end quotation -@item @code{startx} (default: @code{(xorg-start-command)}) -The command used to start the X11 graphical server. +@item @code{xorg-configuration} (default @code{(xorg-configuration)}) +Configuration of the Xorg graphical server. @item @code{xauth} (default: @code{xauth}) The XAuth package to use. @@ -13300,8 +13300,8 @@ Script to run before starting a wayland session. @item @code{sessions-directory} (default "/run/current-system/profile/share/wayland-sessions") Directory to look for desktop files starting wayland sessions. -@item @code{xorg-server-path} (default @code{xorg-start-command}) -Path to xorg-server. +@item @code{xorg-configuration} (default @code{(xorg-configuration)}) +Configuration of the Xorg graphical server. @item @code{xauth-path} (default @code{#~(string-append #$xauth "/bin/xauth")}) Path to xauth. @@ -13324,9 +13324,6 @@ Directory to look for desktop files starting X sessions. @item @code{minimum-vt} (default: 7) Minimum VT to use. -@item @code{xserver-arguments} (default "-nolisten tcp") -Arguments to pass to xorg-server. - @item @code{auto-login-user} (default "") User to use for auto-login. diff --git a/gnu/services/sddm.scm b/gnu/services/sddm.scm index 2ebfe22016..a33eb39c43 100644 --- a/gnu/services/sddm.scm +++ b/gnu/services/sddm.scm @@ -1,5 +1,6 @@ ;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2016 David Craven +;;; Copyright © 2019 Ludovic Courtès ;;; ;;; This file is part of GNU Guix. ;;; @@ -83,8 +84,8 @@ (sessions-directory sddm-configuration-sessions-directory (default "/run/current-system/profile/share/wayland-sessions")) ;; [X11] - (xorg-server-path sddm-configuration-xorg-server-path - (default (xorg-start-command))) + (xorg-configuration sddm-configuration-xorg + (default (xorg-configuration))) (xauth-path sddm-configuration-xauth-path (default (file-append xauth "/bin/xauth"))) (xephyr-path sddm-configuration-xephyr-path @@ -99,8 +100,6 @@ (default "/run/current-system/profile/share/xsessions")) (minimum-vt sddm-configuration-minimum-vt (default 7)) - (xserver-arguments sddm-configuration-xserver-arguments - (default "-nolisten tcp")) ;; [Autologin] (auto-login-user sddm-configuration-auto-login-user @@ -140,7 +139,8 @@ SessionCommand=" (sddm-configuration-session-command config) " SessionDir=" (sddm-configuration-sessions-directory config) " [X11] -ServerPath=" (sddm-configuration-xorg-server-path config) " +ServerPath=" (xorg-configuration-server + (sddm-configuration-xorg config)) " XauthPath=" (sddm-configuration-xauth-path config) " XephyrPath=" (sddm-configuration-xephyr-path config) " DisplayCommand=" (sddm-configuration-xdisplay-start config) " @@ -148,7 +148,9 @@ DisplayStopCommand=" (sddm-configuration-xdisplay-stop config) " SessionCommand=" (sddm-configuration-xsession-command config) " SessionDir=" (sddm-configuration-xsessions-directory config) " MinimumVT=" (number->string (sddm-configuration-minimum-vt config)) " -ServerArguments=" (sddm-configuration-xserver-arguments config) " +ServerArguments=" (string-join + (xorg-configuration-server-arguments + (sddm-configuration-xorg config))) " [Autologin] User=" (sddm-configuration-auto-login-user config) " diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm index 3c547c1303..a3a4d769d7 100644 --- a/gnu/services/xorg.scm +++ b/gnu/services/xorg.scm @@ -436,8 +436,8 @@ desktop session from the system or user profile will be used." (default shepherd)) (auto-login-session slim-configuration-auto-login-session (default #f)) - (startx slim-configuration-startx - (default (xorg-start-command))) + (xorg-configuration slim-configuration-xorg + (default (xorg-configuration))) (sessreg slim-configuration-sessreg (default sessreg))) @@ -454,7 +454,7 @@ desktop session from the system or user profile will be used." (slim-configuration-auto-login-session config))) (slim (slim-configuration-slim config)) (xauth (slim-configuration-xauth config)) - (startx (slim-configuration-startx config)) + (startx (xorg-start-command (slim-configuration-xorg config))) (shepherd (slim-configuration-shepherd config)) (theme-name (slim-configuration-theme-name config)) (sessreg (slim-configuration-sessreg config))) @@ -561,8 +561,7 @@ theme." (auto-login? auto-login?) (default-user default-user) (theme theme) (theme-name theme-name) (xauth xauth) (shepherd shepherd) - (auto-login-session auto-login-session) - (startx startx)))) + (auto-login-session auto-login-session)))) ;;; @@ -641,8 +640,8 @@ makes the good ol' XlockMore usable." (default-user gdm-configuration-default-user (default #f)) (gnome-shell-assets gdm-configuration-gnome-shell-assets (default (list adwaita-icon-theme font-cantarell))) - (x-server gdm-configuration-x-server - (default (xorg-wrapper))) + (xorg-configuration gdm-configuration-xorg + (default (xorg-configuration))) (x-session gdm-configuration-x-session (default (xinitrc)))) @@ -714,7 +713,8 @@ makes the good ol' XlockMore usable." #$(gdm-configuration-dbus-daemon config)) (string-append "GDM_X_SERVER=" - #$(gdm-configuration-x-server config)) + #$(xorg-wrapper + (gdm-configuration-xorg config))) (string-append "GDM_X_SESSION=" #$(gdm-configuration-x-session config)) @@ -779,7 +779,6 @@ password." (service gdm-service-type (gdm-configuration (gdm gdm) - (allow-empty-passwords? allow-empty-passwords?) - (x-server x-server)))) + (allow-empty-passwords? allow-empty-passwords?)))) ;;; xorg.scm ends here -- cgit 1.4.1 From 598757e038ab5dea3b59c9c248a2ad860c41fe62 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Tue, 19 Mar 2019 21:34:02 +0100 Subject: services: xorg: Add a 'keyboard-layout' field in . * gnu/services/xorg.scm ()[keyboard-layout]: New field. (xorg-configuration->file)[input-class-section]: New procedure. Use it. * doc/guix.texi (X Window): Document 'keyboard-layout' field. Co-authored-by: nee --- doc/guix.texi | 9 +++++++++ gnu/services/xorg.scm | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) (limited to 'gnu/services/xorg.scm') diff --git a/doc/guix.texi b/doc/guix.texi index 5511aaaf57..4a8b66703d 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -13374,6 +13374,15 @@ When @code{resolutions} is the empty list, Xorg chooses an appropriate screen resolution. Otherwise, it must be a list of resolutions---e.g., @code{((1024 768) (640 480))}. +@cindex keyboard layout, for Xorg +@cindex keymap, for Xorg +@item @code{keyboard-layout} (default: @code{#f}) +If this is @code{#f}, Xorg uses the default keyboard layout---usually US +English (``qwerty'') for a 105-key PC keyboard. + +Otherwise this must be a @code{keyboard-layout} object specifying the keyboard +layout in use when Xorg is running. + @item @code{extra-config} (default: @code{'()}) This is a list of strings or objects appended to the configuration file. It is used to pass extra text to be added verbatim to the configuration file. diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm index a3a4d769d7..05465f3bdf 100644 --- a/gnu/services/xorg.scm +++ b/gnu/services/xorg.scm @@ -25,6 +25,7 @@ #:use-module (gnu services) #:use-module (gnu services shepherd) #:use-module (gnu system pam) + #:use-module (gnu system keyboard) #:use-module (gnu services dbus) #:use-module ((gnu packages base) #:select (canonical-package)) #:use-module (gnu packages guile) @@ -147,6 +148,8 @@ (default '())) (resolutions xorg-configuration-resolutions ;list of tuples (default '())) + (keyboard-layout xorg-configuration-keyboard-layout ;#f | + (default #f)) (extra-config xorg-configuration-extra-config ;list of strings (default '())) (server xorg-configuration-server ;package @@ -195,6 +198,31 @@ Section \"Screen\" EndSubSection EndSection")) + (define (input-class-section layout variant model options) + (string-append " +Section \"InputClass\" + Identifier \"evdev keyboard catchall\" + MatchIsKeyboard \"on\" + Option \"XkbLayout\" " (object->string layout) + (if variant + (string-append " Option \"XkbVariant\" \"" + variant "\"") + "") + (if model + (string-append " Option \"XkbModel\" \"" + model "\"") + "") + (match options + (() + "") + (_ + (string-append " Option \"XkbOptions\" \"" + (string-join options ",") "\""))) " + + MatchDevicePath \"/dev/input/event*\" + Driver \"evdev\" +EndSection\n")) + (define (expand modules) ;; Append to MODULES the relevant /lib/xorg/modules ;; sub-directories. @@ -240,6 +268,19 @@ EndSection\n" port) port) (newline port) + (let ((layout #$(and=> (xorg-configuration-keyboard-layout config) + keyboard-layout-name)) + (variant #$(and=> (xorg-configuration-keyboard-layout config) + keyboard-layout-variant)) + (model #$(and=> (xorg-configuration-keyboard-layout config) + keyboard-layout-model)) + (options '#$(keyboard-layout-options + (xorg-configuration-keyboard-layout config)))) + (when layout + (display (input-class-section layout variant model options) + port) + (newline port))) + (for-each (lambda (config) (display config port)) '#$(xorg-configuration-extra-config config)))))) -- cgit 1.4.1 From 70bb83b7b29ba9d5eb151aa2748717f182a25534 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Mon, 25 Mar 2019 00:20:42 +0100 Subject: services: xorg: Fix cases where 'keyboard-layout' is #f. This is a followup to 598757e038ab5dea3b59c9c248a2ad860c41fe62. * gnu/services/xorg.scm (xorg-configuration->file): Check whether 'xorg-configuration-keyboard-layout' returns #f before calling 'keyboard-layout-options'. --- gnu/services/xorg.scm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'gnu/services/xorg.scm') diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm index 05465f3bdf..f047b8a043 100644 --- a/gnu/services/xorg.scm +++ b/gnu/services/xorg.scm @@ -274,8 +274,8 @@ EndSection\n" port) keyboard-layout-variant)) (model #$(and=> (xorg-configuration-keyboard-layout config) keyboard-layout-model)) - (options '#$(keyboard-layout-options - (xorg-configuration-keyboard-layout config)))) + (options '#$(and=> (xorg-configuration-keyboard-layout config) + keyboard-layout-options))) (when layout (display (input-class-section layout variant model options) port) -- cgit 1.4.1 From 631a6e63777dd2e08fe5bdc75908e6c030abcd1f Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Sun, 31 Mar 2019 23:13:51 +0200 Subject: doc: Document 'gdm-service-type'. * doc/guix.texi (X Window): Document 'gdm-service-type' and 'gdm-configuration'. Take description of '.desktop' files from the 'slim-service-type' description. * gnu/services/xorg.scm (gdm-service): Remove outdated comment. --- doc/guix.texi | 52 +++++++++++++++++++++++++++++++++++++++++++-------- gnu/services/xorg.scm | 3 --- 2 files changed, 44 insertions(+), 11 deletions(-) (limited to 'gnu/services/xorg.scm') diff --git a/doc/guix.texi b/doc/guix.texi index 527f9bcd10..616970b505 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -13304,23 +13304,59 @@ 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}). -@defvr {Scheme Variable} slim-service-type -This is the type for the SLiM graphical login manager for X11. +@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 -SLiM 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 using @kbd{F1}. Packages such -as @code{xfce}, @code{sawfish}, and @code{ratpoison} provide -@file{.desktop} files; adding them to the system-wide set of packages -automatically makes them available at the log-in screen. +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. In addition, @file{~/.xsession} files are honored. When available, @file{~/.xsession} must be an executable that starts a window manager and/or other X clients. @end defvr +@deftp {Data Type} gdm-configuration +@table @asis +@item @code{auto-login?} (default: @code{#f}) +@itemx @code{default-user} (default: @code{#f}) +When @code{auto-login?} is false, GDM presents a log-in screen. + +When @code{auto-login?} is true, GDM logs in directly as +@code{default-user}. + +@item @code{gnome-shell-assets} (default: ...) +List of GNOME Shell assets needed by GDM: icon theme, fonts, etc. + +@item @code{xorg-configuration} (default: @code{(xorg-configuration)}) +Configuration of the Xorg graphical server. + +@item @code{xsession} (default: @code{(xinitrc)}) +Script to run before starting a X session. + +@item @code{dbus-daemon} (default: @code{dbus-daemon-wrapper}) +File name of the @code{dbus-daemon} executable. + +@item @code{gdm} (default: @code{gdm}) +The GDM package to use. +@end table +@end deftp + +@defvr {Scheme Variable} slim-service-type +This is the type for the SLiM graphical login manager for X11. + +Like GDM, SLiM looks for session types described by @file{.desktop} files and +allows users to choose a session from the log-in screen using @kbd{F1}. It +also honors @file{~/.xsession} files. +@end defvr + @deftp {Data Type} slim-configuration Data type representing the configuration of @code{slim-service-type}. diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm index f047b8a043..6cbd1fd722 100644 --- a/gnu/services/xorg.scm +++ b/gnu/services/xorg.scm @@ -791,9 +791,6 @@ makes the good ol' XlockMore usable." "Run the GNOME Desktop Manager (GDM), a program that allows you to log in in a graphical session, whether or not you use GNOME."))) -;; This service isn't working yet; it gets as far as starting to run the -;; greeter from gnome-shell but doesn't get any further. It is here because -;; it doesn't hurt anyone and perhaps it inspires someone to fix it :) (define-deprecated (gdm-service #:key (gdm gdm) (allow-empty-passwords? #t) (x-server (xorg-wrapper))) -- cgit 1.4.1 From bab7a49558e28388d064063ae674117ca4a964df Mon Sep 17 00:00:00 2001 From: Tim Gesthuizen Date: Tue, 26 Mar 2019 20:52:50 +0100 Subject: services: slim-configuration: Adapt exported getter methods. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Commit 554b8607396785dcde6eb391f75f98a07ec582fd introduces changes to the slim-configuration record without updating the exported methods. * gnu/services/xorg.scm: Export slim-configuration-xorg and slim-configuration-sessreg. Signed-off-by: Ludovic Courtès --- gnu/services/xorg.scm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'gnu/services/xorg.scm') diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm index 6cbd1fd722..29c7f30013 100644 --- a/gnu/services/xorg.scm +++ b/gnu/services/xorg.scm @@ -4,6 +4,7 @@ ;;; Copyright © 2015 Sou Bunnbu ;;; Copyright © 2018, 2019 Timothy Sample ;;; Copyright © 2019 Jan (janneke) Nieuwenhuizen +;;; Copyright © 2019 Tim Gesthuizen ;;; ;;; This file is part of GNU Guix. ;;; @@ -79,7 +80,8 @@ slim-configuration-xauth slim-configuration-shepherd slim-configuration-auto-login-session - slim-configuration-startx + slim-configuration-xorg + slim-configuration-sessreg slim-service-type slim-service -- cgit 1.4.1