diff mbox series

[bug#47994] services: kmscon: Add xkb-layout and xkb-options fields.

Message ID YIYgR5cxD9NQWq46@thinkpad-x230-luhui
State Accepted
Headers show
Series [bug#47994] services: kmscon: Add xkb-layout and xkb-options fields. | expand

Checks

Context Check Description
cbaines/applying patch fail View Laminar job
cbaines/issue success View issue

Commit Message

luhui April 26, 2021, 2:07 a.m. UTC
OK,Re-written the code according to your suggestion.

new patch:
From 49450d3f87bebb0eeb5a2d4a161151b33d413c15 Mon Sep 17 00:00:00 2001
From: luhui <luhuins@163.com>
Date: Sat, 24 Apr 2021 10:56:03 +0800
Subject: [PATCH] services: kmscon: Add keyboard-layout fields.

* gnu/services/base.scm (<kmscon-configuration>): Add keyboard-layout fields.
* doc/guix.texi (Base Services): Document it.
---
 doc/guix.texi         |  9 +++++++++
 gnu/services/base.scm | 21 +++++++++++++++++++--
 2 files changed, 28 insertions(+), 2 deletions(-)

Comments

M April 26, 2021, 7:23 p.m. UTC | #1
luhui schreef op ma 26-04-2021 om 10:07 [+0800]:
> OK,Re-written the code according to your suggestion.
> 
> new patch:

The new patch looks good to me, but I haven't tested it.

Greetings,
Maxime.
luhui May 4, 2021, 11:32 a.m. UTC | #2
On Mon, Apr 26, 2021 at 09:23:00PM +0200, Maxime Devos wrote:
> luhui schreef op ma 26-04-2021 om 10:07 [+0800]:
> > OK,Re-written the code according to your suggestion.
> > 
> > new patch:
> 
> The new patch looks good to me, but I haven't tested it.


write it in a vm configuration

test code:

#+BEGIN_SRC scheme

;; need delete getty service (tty3,tty4,tty5,tty6)

(dbus-service)
(syslog-service)
;; default
(service kmscon-service-type
 (kmscon-configuration
  (virtual-terminal "tty3")))
;; us
(service kmscon-service-type
 (kmscon-configuration
  (virtual-terminal "tty4")
   (keyboard-layout (keyboard-layout "us"))))
;; us with ctrl:nocaps options
(service kmscon-service-type
 (kmscon-configuration
  (virtual-terminal "tty5")
   (keyboard-layout
    (keyboard-layout "us" #:options '("ctrl:nocaps")))))
;; with all args
(service kmscon-service-type
 (kmscon-configuration
  (virtual-terminal "tty6")
   (keyboard-layout
    (keyboard-layout "us" "intl" #:model "macbook78" #:options
     '("ctrl:nocaps" "compose:menu")))))

#+END_SRC

then

guix system vm vm-configuration.scm

xxxxxxxxxx-vm.sh # need graphic 

in vm:

herd status # ensure services is running

# test
Ctrl + Alt + F3 # ensure it is us keyboard layout
Ctrl + Alt + F4 # ensure it is us keyboard layout
Ctrl + Alt + F5 # ensure Caps Locks is Ctrl
...
Mathieu Othacehe June 4, 2021, 12:40 p.m. UTC | #3
Hello,

> +                       ,@(if variant `("--xkb-layout" ,variant) '())

This is supposed to be "--xkb-variant" here, right?

Otherwise, it looks good to me.

Thanks,

Mathieu
diff mbox series

Patch

diff --git a/doc/guix.texi b/doc/guix.texi
index b9019d5550..74e9ceaf5e 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -88,6 +88,7 @@  Copyright @copyright{} 2020 John Soo@*
 Copyright @copyright{} 2020 Jonathan Brielmaier@*
 Copyright @copyright{} 2020 Edgar Vincent@*
 Copyright @copyright{} 2021 Maxime Devos@*
+Copyright @copyright{} 2021 lu hui@*
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -15254,6 +15255,14 @@  Font engine used in Kmscon.
 @item @code{font-size} (default: @code{12})
 Font size used in Kmscon.
 
+@item @code{keyboard-layout} (default: @code{#f})
+If this is @code{#f}, Kmscon 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. @xref{Keyboard Layout}, for more information on how to specify the
+keyboard layout.
+
 @item @code{kmscon} (default: @var{kmscon})
 The Kmscon package to use.
 
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index 24b3ea785b..0878746fa8 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -14,6 +14,7 @@ 
 ;;; Copyright © 2020 Florian Pelz <pelzflorian@pelzflorian.de>
 ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
 ;;; Copyright © 2021 qblade <qblade@protonmail.com>
+;;; Copyright © 2021 luhui <luhuins@163.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -41,6 +42,7 @@ 
   #:use-module (gnu system shadow)                ; 'user-account', etc.
   #:use-module (gnu system uuid)
   #:use-module (gnu system file-systems)          ; 'file-system', etc.
+  #:use-module (gnu system keyboard)
   #:use-module (gnu system mapped-devices)
   #:use-module ((gnu system linux-initrd)
                 #:select (file-system-packages))
@@ -2313,7 +2315,9 @@  This service is not part of @var{%base-services}."
   (font-engine             kmscon-configuration-font-engine
                            (default "pango"))
   (font-size               kmscon-configuration-font-size
-                           (default 12)))
+                           (default 12))
+  (keyboard-layout         kmscon-configuration-keyboard-layout
+                           (default #f))) ; #f | <keyboard-layout>
 
 (define kmscon-service-type
   (shepherd-service-type
@@ -2326,7 +2330,8 @@  This service is not part of @var{%base-services}."
            (auto-login (kmscon-configuration-auto-login config))
            (hardware-acceleration? (kmscon-configuration-hardware-acceleration? config))
            (font-engine (kmscon-configuration-font-engine config))
-           (font-size (kmscon-configuration-font-size config)))
+           (font-size (kmscon-configuration-font-size config))
+           (keyboard-layout (kmscon-configuration-keyboard-layout config)))
 
        (define kmscon-command
          #~(list
@@ -2335,6 +2340,18 @@  This service is not part of @var{%base-services}."
             "--no-switchvt" ;Prevent a switch to the virtual terminal.
             "--font-engine" #$font-engine
             "--font-size" #$(number->string font-size)
+            #$@(if keyboard-layout
+                   (let* ((layout (keyboard-layout-name keyboard-layout))
+                          (variant (keyboard-layout-variant keyboard-layout))
+                          (model (keyboard-layout-model keyboard-layout))
+                          (options (keyboard-layout-options keyboard-layout)))
+                     `("--xkb-layout" ,layout
+                       ,@(if variant `("--xkb-layout" ,variant) '())
+                       ,@(if model   `("--xkb-model" ,model) '())
+                       ,@(if (null? options)
+                             '()
+                             `("--xkb-options" ,(string-join options ",")))))
+                   '())
             #$@(if hardware-acceleration? '("--hwaccel") '())
             "--login" "--"
             #$login-program #$@login-arguments