[PATCH 0/3] Simpler Xorg keyboard layout config, updated doc

  • Done
  • quality assurance status badge
Details
One participant
  • Ludovic Courtès
Owner
unassigned
Submitted by
Ludovic Courtès
Severity
normal
L
L
Ludovic Courtès wrote on 3 Apr 2019 14:36
(address . guix-patches@gnu.org)(name . Ludovic Courtès)(address . ludo@gnu.org)
20190403123626.29711-1-ludo@gnu.org
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
L
L
Ludovic Courtès wrote on 3 Apr 2019 14:39
[PATCH 1/3] services: xorg: Add 'set-xorg-configuration'.
(address . 35120@debbugs.gnu.org)(name . Ludovic Courtès)(address . ludo@gnu.org)
20190403123953.29853-1-ludo@gnu.org
* 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(-)

Toggle diff (144 lines)
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
L
L
Ludovic Courtès wrote on 3 Apr 2019 14:39
[PATCH 2/3] doc: Explain how to change the keyboard layout at run time.
(address . 35120@debbugs.gnu.org)(name . Ludovic Courtès)(address . ludo@gnu.org)
20190403123953.29853-2-ludo@gnu.org
* doc/guix.texi (Keyboard Layout): Mention GNOME's "Region & Language",
setxkbmap, and loadkeys.
---
doc/guix.texi | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)

Toggle diff (50 lines)
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
L
L
Ludovic Courtès wrote on 3 Apr 2019 14:39
[PATCH 3/3] services: console-keymap: Deprecate.
(address . 35120@debbugs.gnu.org)(name . Ludovic Courtès)(address . ludo@gnu.org)
20190403123953.29853-3-ludo@gnu.org
* 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(-)

Toggle diff (50 lines)
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
L
L
Ludovic Courtès wrote on 5 Apr 2019 15:48
Re: [bug#35120] [PATCH 0/3] Simpler Xorg keyboard layout config, updated doc
(address . 35120-done@debbugs.gnu.org)
87r2agtvew.fsf@gnu.org
Ludovic Courtès <ludo@gnu.org> skribis:

Toggle quote (4 lines)
> 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’.
Closed
?