GNU bug report logs - #35120
[PATCH 0/3] Simpler Xorg keyboard layout config, updated doc

Previous Next

Package: guix-patches;

Reported by: Ludovic Courtès <ludo <at> gnu.org>

Date: Wed, 3 Apr 2019 12:37:02 UTC

Severity: normal

Tags: patch

Done: Ludovic Courtès <ludo <at> gnu.org>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 35120 in the body.
You can then email your comments to 35120 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#35120; Package guix-patches. (Wed, 03 Apr 2019 12:37:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Ludovic Courtès <ludo <at> gnu.org>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Wed, 03 Apr 2019 12:37:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: guix-patches <at> gnu.org
Cc: Ludovic Courtès <ludo <at> gnu.org>
Subject: [PATCH 0/3] Simpler Xorg keyboard layout config, updated doc
Date: Wed,  3 Apr 2019 14:36:26 +0200
Hi,

Here are patches to simplify Xorg keyboard layout configuration a bit
and to update documentation.

Thoughts?

Ludo’.

Ludovic Courtès (3):
  services: xorg: Add 'set-xorg-configuration'.
  doc: Explain how to change the keyboard layout at run time.
  services: console-keymap: Deprecate.

 doc/guix.texi                    | 77 +++++++++++++++++++-------------
 gnu/services/base.scm            |  3 +-
 gnu/services/xorg.scm            | 22 ++++++++-
 gnu/system/examples/desktop.tmpl | 14 ++++--
 4 files changed, 81 insertions(+), 35 deletions(-)

-- 
2.21.0





Information forwarded to guix-patches <at> gnu.org:
bug#35120; Package guix-patches. (Wed, 03 Apr 2019 12:41:01 GMT) Full text and rfc822 format available.

Message #8 received at 35120 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: 35120 <at> debbugs.gnu.org
Cc: Ludovic Courtès <ludo <at> gnu.org>
Subject: [PATCH 1/3] services: xorg: Add 'set-xorg-configuration'.
Date: Wed,  3 Apr 2019 14:39:51 +0200
* gnu/services/xorg.scm (gdm-service-type)[compose, extend]: New fields.
(set-xorg-configuration): New procedure.
* doc/guix.texi (Keyboard Layout): Use it.
(X Window): Document it.
* gnu/system/examples/desktop.tmpl: Add 'keyboard-layout' fields.
---
 doc/guix.texi                    | 24 +++++++++++++++++-------
 gnu/services/xorg.scm            | 22 +++++++++++++++++++++-
 gnu/system/examples/desktop.tmpl | 14 +++++++++++---
 3 files changed, 49 insertions(+), 11 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 616c2ef305..96755a6cce 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -11077,6 +11077,7 @@ Let's say you want your system to use the Turkish keyboard layout throughout
 your system---bootloader, console, and Xorg.  Here's what your system
 configuration would look like:
 
+@findex set-xorg-configuration
 @lisp
 ;; Using the Turkish layout for the bootloader, the console,
 ;; and for Xorg.
@@ -11088,18 +11089,17 @@ configuration would look like:
                 (bootloader grub-efi-bootloader)
                 (target "/boot/efi")
                 (keyboard-layout keyboard-layout))) ;for GRUB
-  (services (modify-services %desktop-services
-              (gdm-service-type config =>
-                (gdm-configuration
-                  (inherit config)
-                  (xorg-configuration
+  (services (cons (set-xorg-configuration
                     (xorg-configuration             ;for Xorg
-                      (keyboard-layout keyboard-layout))))))))
+                      (keyboard-layout keyboard-layout)))
+                  %desktop-services)))
 @end lisp
 
 In the example above, for GRUB and for Xorg, we just refer to the
 @code{keyboard-layout} field defined above, but we could just as well refer to
-a different layout.
+a different layout.  The @code{set-xorg-configuration} procedure communicates
+the desired Xorg configuration to the graphical log-in manager, by default
+GDM.
 
 @node Locales
 @section Locales
@@ -13566,6 +13566,16 @@ default is @code{-nolisten tcp}.
 @end table
 @end deftp
 
+@deffn {Scheme Procedure} set-xorg-configuration @var{config} @
+  [@var{login-manager-service-type}]
+Tell the log-in manager (of type @var{login-manager-service-type}) to use
+@var{config}, an <xorg-configuration> record.
+
+Since the Xorg configuration is embedded in the log-in manager's
+configuration---e.g., @code{gdm-configuration}---this procedure provides a
+shorthand to set the Xorg configuration.
+@end deffn
+
 @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
diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm
index 7745f9a3cc..26ca0d4f1f 100644
--- a/gnu/services/xorg.scm
+++ b/gnu/services/xorg.scm
@@ -99,7 +99,8 @@
 
             gdm-configuration
             gdm-service-type
-            gdm-service))
+            gdm-service
+            set-xorg-configuration))
 
 ;;; Commentary:
 ;;;
@@ -875,6 +876,15 @@ the GNOME desktop environment.")
                                            xorg-configuration-keyboard-layout
                                            gdm-configuration-xorg))))
 
+                ;; For convenience, this service can be extended with an
+                ;; <xorg-configuration> record.  Take the first one that
+                ;; comes.
+                (compose first)
+                (extend (lambda (config xorg-configuration)
+                          (gdm-configuration
+                           (inherit config)
+                           (xorg-configuration xorg-configuration))))
+
                 (default-value (gdm-configuration))
                 (description
                  "Run the GNOME Desktop Manager (GDM), a program that allows
@@ -908,4 +918,14 @@ password."
             (gdm gdm)
             (allow-empty-passwords? allow-empty-passwords?))))
 
+(define* (set-xorg-configuration config
+                                 #:optional
+                                 (login-manager-service-type
+                                  gdm-service-type))
+  "Tell the log-in manager (of type @var{login-manager-service-type}) to use
+@var{config}, an <xorg-configuration> record."
+  (simple-service 'set-xorg-configuration
+                  login-manager-service-type
+                  config))
+
 ;;; xorg.scm ends here
diff --git a/gnu/system/examples/desktop.tmpl b/gnu/system/examples/desktop.tmpl
index ff4c12b24a..baeb5e2d77 100644
--- a/gnu/system/examples/desktop.tmpl
+++ b/gnu/system/examples/desktop.tmpl
@@ -3,7 +3,7 @@
 ;; root partition is encrypted with LUKS.
 
 (use-modules (gnu) (gnu system nss))
-(use-service-modules desktop)
+(use-service-modules desktop xorg)
 (use-package-modules certs gnome)
 
 (operating-system
@@ -11,11 +11,16 @@
   (timezone "Europe/Paris")
   (locale "en_US.utf8")
 
+  ;; Choose US English keyboard layout.  The "altgr-intl"
+  ;; variant provides dead keys for accented characters.
+  (keyboard-layout (keyboard-layout "us" "altgr-intl"))
+
   ;; Use the UEFI variant of GRUB with the EFI System
   ;; Partition mounted on /boot/efi.
   (bootloader (bootloader-configuration
                 (bootloader grub-efi-bootloader)
-                (target "/boot/efi")))
+                (target "/boot/efi")
+                (keyboard-layout keyboard-layout)))
 
   ;; Specify a mapped device for the encrypted root partition.
   ;; The UUID is that returned by 'cryptsetup luksUUID'.
@@ -58,7 +63,10 @@
   ;; include the X11 log-in service, networking with
   ;; NetworkManager, and more.
   (services (append (list (service gnome-desktop-service-type)
-                          (service xfce-desktop-service-type))
+                          (service xfce-desktop-service-type)
+                          (set-xorg-configuration
+                           (xorg-configuration
+                            (keyboard-layout keyboard-layout))))
                     %desktop-services))
 
   ;; Allow resolution of '.local' host names with mDNS.
-- 
2.21.0





Information forwarded to guix-patches <at> gnu.org:
bug#35120; Package guix-patches. (Wed, 03 Apr 2019 12:41:02 GMT) Full text and rfc822 format available.

Message #11 received at 35120 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: 35120 <at> debbugs.gnu.org
Cc: Ludovic Courtès <ludo <at> gnu.org>
Subject: [PATCH 2/3] doc: Explain how to change the keyboard layout at run
 time.
Date: Wed,  3 Apr 2019 14:39:52 +0200
* doc/guix.texi (Keyboard Layout): Mention GNOME's "Region & Language",
setxkbmap, and loadkeys.
---
 doc/guix.texi | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/doc/guix.texi b/doc/guix.texi
index 96755a6cce..1b0bd1de58 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -11002,6 +11002,8 @@ special-case and is automatically added whether or not it is specified.
 @node Keyboard Layout
 @section Keyboard Layout
 
+@cindex keyboard layout
+@cindex keymap
 To specify what each key of your keyboard does, you need to tell the operating
 system what @dfn{keyboard layout} you want to use.  The default, when nothing
 is specified, is the US English QWERTY layout for 105-key PC keyboards.
@@ -11101,6 +11103,34 @@ a different layout.  The @code{set-xorg-configuration} procedure communicates
 the desired Xorg configuration to the graphical log-in manager, by default
 GDM.
 
+We've discussed how to specify the @emph{default} keyboard layout of your
+system when it starts, but you can also adjust it at run time:
+
+@itemize
+@item
+If you're using GNOME, its settings panel has a ``Region & Language'' entry
+where you can select one or more keyboard layouts.
+
+@item
+Under Xorg, the @command{setxkbmap} command (from the same-named package)
+allows you to change the current layout.  For example, this is how you would
+change the layout to US Dvorak:
+
+@example
+setxkbmap us dvorak
+@end example
+
+@item
+The @code{loadkeys} command changes the keyboard layout in effect in the Linux
+console.  However, note that @code{loadkeys} does @emph{not} use the XKB
+keyboard layout categorization described above.  The command below loads the
+French bépo layout:
+
+@example
+loadkeys fr-bepo
+@end example
+@end itemize
+
 @node Locales
 @section Locales
 
-- 
2.21.0





Information forwarded to guix-patches <at> gnu.org:
bug#35120; Package guix-patches. (Wed, 03 Apr 2019 12:41:02 GMT) Full text and rfc822 format available.

Message #14 received at 35120 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: 35120 <at> debbugs.gnu.org
Cc: Ludovic Courtès <ludo <at> gnu.org>
Subject: [PATCH 3/3] services: console-keymap: Deprecate.
Date: Wed,  3 Apr 2019 14:39:53 +0200
* gnu/services/base.scm (console-keymap-service): Mark as deprecated.
* doc/guix.texi (Base Services): Remove its documentation.
---
 doc/guix.texi         | 23 -----------------------
 gnu/services/base.scm |  3 ++-
 2 files changed, 2 insertions(+), 24 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 1b0bd1de58..1c82579afc 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -12023,29 +12023,6 @@ This is the name of the file where some random bytes are saved by
 It defaults to @file{/var/lib/random-seed}.
 @end defvr
 
-@cindex keymap
-@cindex keyboard
-@deffn {Scheme Procedure} console-keymap-service @var{files} ...
-@cindex keyboard layout
-Return a service to load console keymaps from @var{files} using
-@command{loadkeys} command.  Most likely, you want to load some default
-keymap, which can be done like this:
-
-@example
-(console-keymap-service "dvorak")
-@end example
-
-Or, for example, for a Swedish keyboard, you may need to combine
-the following keymaps:
-@example
-(console-keymap-service "se-lat6" "se-fi-lat6")
-@end example
-
-Also you can specify a full file name (or file names) of your keymap(s).
-See @code{man loadkeys} for details.
-
-@end deffn
-
 @cindex mouse
 @cindex gpm
 @defvr {Scheme Variable} gpm-service-type
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index 04b123b833..bf8510a71d 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -719,7 +719,8 @@ to add @var{device} to the kernel's entropy pool.  The service will fail if
                                  #$@files))))
       (respawn? #f)))))
 
-(define (console-keymap-service . files)
+(define-deprecated (console-keymap-service #:rest files)
+  #f
   "Return a service to load console keymaps from @var{files}."
   (service console-keymap-service-type files))
 
-- 
2.21.0





Reply sent to Ludovic Courtès <ludo <at> gnu.org>:
You have taken responsibility. (Fri, 05 Apr 2019 13:49:02 GMT) Full text and rfc822 format available.

Notification sent to Ludovic Courtès <ludo <at> gnu.org>:
bug acknowledged by developer. (Fri, 05 Apr 2019 13:49:02 GMT) Full text and rfc822 format available.

Message #19 received at 35120-done <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: 35120-done <at> debbugs.gnu.org
Subject: Re: [bug#35120] [PATCH 0/3] Simpler Xorg keyboard layout config,
 updated doc
Date: Fri, 05 Apr 2019 15:48:39 +0200
Ludovic Courtès <ludo <at> gnu.org> skribis:

>   services: xorg: Add 'set-xorg-configuration'.
>   doc: Explain how to change the keyboard layout at run time.
>   services: console-keymap: Deprecate.

Pushed!

As Julien noted on IRC, ‘set-xorg-configuration’ only works for
‘gdm-service-type’ right now.  It’d be great to do the same for SLiM and
co.  Help welcome.  :-)

Ludo’.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Sat, 04 May 2019 11:24:08 GMT) Full text and rfc822 format available.

This bug report was last modified 4 years and 358 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.