unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#45680] [PATCH] Allow customised xkeyboard-config package in initrd
@ 2021-01-05 21:37 Maxime Devos
  2021-01-05 23:27 ` henkjan gersen
  0 siblings, 1 reply; 2+ messages in thread
From: Maxime Devos @ 2021-01-05 21:37 UTC (permalink / raw)
  To: 45680


[-- Attachment #1.1: Type: text/plain, Size: 467 bytes --]

Hi Guix!

This patch *should* allow using a custom xkeyboard-config
package the initrd. (moesasji was interested in such a thing
on January the fourth on #guix)
‘make check’ doesn't give any error messages. However, I don't
have any custom xkeyboard-config package to test this with,
so I'll leave that to interested people.
-- 
Maxime Devos <maximedevos@telenet.be>
PGP Key: C1F3 3EE2 0C52 8FDB 7DD7  011F 49E3 EE22 1917 25EE
Freenode handle: mdevos

[-- Attachment #1.2: Type: text/x-patch, Size: 6900 bytes --]

From 85d509121b95d4da7048b045d41d57a2e71efc8f Mon Sep 17 00:00:00 2001
From: Maxime Devos <maximedevos@telenet.be>
Date: Tue, 5 Jan 2021 22:20:42 +0100
Subject: [PATCH] gnu: Allow custom xkeyboard-config package in initrd

* gnu/system/linux-initrd.scm (raw-initrd): New argument xkeyboard-config.
* gnu/system/linux-initrd.scm (base-initrd): Likewise.
* doc/contributing.texi (raw-initrd): Document new argument.
* doc/contributing.texi (base-initrd): Likewise.
---
 doc/guix.texi               | 13 ++++++++++---
 gnu/system/linux-initrd.scm | 17 +++++++++++++++--
 2 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 1081ed26a3..e410ccb141 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -86,6 +86,7 @@ Copyright @copyright{} 2020 raingloom@*
 Copyright @copyright{} 2020 Daniel Brooks@*
 Copyright @copyright{} 2020 John Soo@*
 Copyright @copyright{} 2020 Jonathan Brielmaier@*
+Copyright @copyright{} 2021 Maxime Devos@*
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -30631,7 +30632,7 @@ here is how to use it and customize it further.
 @cindex initial RAM disk
 @deffn {Scheme Procedure} raw-initrd @var{file-systems} @
        [#:linux-modules '()] [#:mapped-devices '()] @
-       [#:keyboard-layout #f] @
+       [#:keyboard-layout #f] [#:xkeyboard-config xkeyboard-config] @
        [#:helper-packages '()] [#:qemu-networking? #f] [#:volatile-root? #f]
 Return a derivation that builds a raw initrd.  @var{file-systems} is
 a list of file systems to be mounted by the initrd, possibly in addition to
@@ -30649,6 +30650,9 @@ are set up and before @var{file-systems} are mounted such that, should the
 user need to enter a passphrase or use the REPL, this happens using the
 intended keyboard layout.
 
+When @var{xkeyboard-config} is set, it is the @code{xkeyboard-config} package
+where @var{keyboard-layout} will be searched for.
+
 When @var{qemu-networking?} is true, set up networking with the standard QEMU
 parameters.  When @var{virtio?} is true, load additional modules so that the
 initrd can be used as a QEMU guest with para-virtualized I/O drivers.
@@ -30659,8 +30663,8 @@ to it are lost.
 
 @deffn {Scheme Procedure} base-initrd @var{file-systems} @
        [#:mapped-devices '()] [#:keyboard-layout #f] @
-       [#:qemu-networking? #f] [#:volatile-root? #f] @
-       [#:linux-modules '()]
+       [#:xkeyboard-config xkeyboard-config] [#:qemu-networking? #f] @
+       [#:volatile-root? #f] [#:linux-modules '()]
 Return as a file-like object a generic initrd, with kernel
 modules taken from @var{linux}.  @var{file-systems} is a list of file-systems to be
 mounted by the initrd, possibly in addition to the root file system specified
@@ -30673,6 +30677,9 @@ are set up and before @var{file-systems} are mounted such that, should the
 user need to enter a passphrase or use the REPL, this happens using the
 intended keyboard layout.
 
+When @var{xkeyboard-config} is set, it is the @code{xkeyboard-config} package
+where @var{keyboard-layout} will be searched for.
+
 @var{qemu-networking?} and @var{volatile-root?} behaves as in @code{raw-initrd}.
 
 The initrd is automatically populated with all the kernel modules necessary
diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm
index c6ba9bb560..64305e5fa6 100644
--- a/gnu/system/linux-initrd.scm
+++ b/gnu/system/linux-initrd.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2017, 2019 Mathieu Othacehe <m.othacehe@gmail.com>
 ;;; Copyright © 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -175,6 +176,7 @@ MODULES and taken from LINUX."
                       (mapped-devices '())
                       (keyboard-layout #f)
                       (helper-packages '())
+                      (xkeyboard-config xkeyboard-config)
                       qemu-networking?
                       volatile-root?
                       (on-error 'debug))
@@ -192,6 +194,9 @@ console keyboard layout.  This is done before MAPPED-DEVICES are set up and
 before FILE-SYSTEMS are mounted such that, should the user need to enter a
 passphrase or use the REPL, this happens using the intended keyboard layout.
 
+When XKEYBOARD-CONFIG is set, it is the xkeyboard-config package where
+the KEYBOARD-LAYOUT will be searched for.
+
 When QEMU-NETWORKING? is true, set up networking with the standard QEMU
 parameters.
 
@@ -213,6 +218,10 @@ upon error."
   (define kodir
     (flat-linux-module-directory linux linux-modules))
 
+  (define keymap-file
+    (and keyboard-layout
+         (keyboard-layout->console-keymap
+          keyboard-layout #:xkeyboard-config xkeyboard-config)))
   (expression->initrd
    (with-imported-modules (source-module-closure
                            '((gnu build linux-boot)
@@ -248,8 +257,7 @@ upon error."
                                       (and #$@device-mapping-commands))
                         #:linux-modules '#$linux-modules
                         #:linux-module-directory '#$kodir
-                        #:keymap-file #+(and=> keyboard-layout
-                                               keyboard-layout->console-keymap)
+                        #:keymap-file #+keymap-file
                         #:qemu-guest-networking? #$qemu-networking?
                         #:volatile-root? '#$volatile-root?
                         #:on-error '#$on-error))))
@@ -349,6 +357,7 @@ FILE-SYSTEMS."
                       (linux linux-libre)
                       (linux-modules '())
                       (mapped-devices '())
+                      (xkeyboard-config xkeyboard-config)
                       (keyboard-layout #f)
                       qemu-networking?
                       volatile-root?
@@ -365,6 +374,9 @@ console keyboard layout.  This is done before MAPPED-DEVICES are set up and
 before FILE-SYSTEMS are mounted such that, should the user need to enter a
 passphrase or use the REPL, this happens using the intended keyboard layout.
 
+When XKEYBOARD-CONFIG is set, it is the xkeyboard-config package where
+the KEYBOARD-LAYOUT will be searched for.
+
 QEMU-NETWORKING? and VOLATILE-ROOT? behaves as in raw-initrd.
 
 The initrd is automatically populated with all the kernel modules necessary
@@ -392,6 +404,7 @@ loaded at boot time in the order in which they appear."
               #:linux-modules linux-modules*
               #:mapped-devices mapped-devices
               #:helper-packages helper-packages
+              #:xkeyboard-config xkeyboard-config
               #:keyboard-layout keyboard-layout
               #:qemu-networking? qemu-networking?
               #:volatile-root? volatile-root?
-- 
2.29.2


[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 260 bytes --]

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [bug#45680] [PATCH] Allow customised xkeyboard-config package in initrd
  2021-01-05 21:37 [bug#45680] [PATCH] Allow customised xkeyboard-config package in initrd Maxime Devos
@ 2021-01-05 23:27 ` henkjan gersen
  0 siblings, 0 replies; 2+ messages in thread
From: henkjan gersen @ 2021-01-05 23:27 UTC (permalink / raw)
  To: maximedevos; +Cc: 45680

As I triggered this patch with my question on the chat....

Looking at the patch I don't think it does what is intended as the
keymaps defined in xkeyboard-config are in an xkb format and need to
be converted to the correct format to allow them to be loaded in an
initrd. For the console keymap layout ckbcomp is used in keyboard.scm
to do this conversion that is then loaded by loadkeys, which is a
pretty elegant approach. I actually don't know how the keymaps used in
an initrd are defined or whether it is even needed to add them as they
wouldn't help for the disk decryption password.

Note that my original question was how I could replace
xkeyboard-config for a patched version that has my own customized
keyboard layout included; this does mean that any patch that adds
keyboard layouts to initrd can be tested using the standard keyboard
layouts that are available in the "standard" xkeyboard-config. If it
works for existing layouts included it should also work for additional
keyboard layouts I add to my version of xkeyboard-config.




^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-01-06  0:05 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-05 21:37 [bug#45680] [PATCH] Allow customised xkeyboard-config package in initrd Maxime Devos
2021-01-05 23:27 ` henkjan gersen

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).