From: fgndevelop <fgndevelop@posteo.org>
To: grub-devel@gnu.org
Subject: Patch for German keyboard layout for the at_keyboard input
Date: Sun, 15 May 2016 20:19:29 +0200 [thread overview]
Message-ID: <5738BDB1.2070005@posteo.org> (raw)
[-- Attachment #1: Type: text/plain, Size: 1714 bytes --]
Dear team at grub-devel,
First of all I would like to thank you for the Grand boot loader, your work is very
much appreciated.
Recently I downloaded the current grub-2.02-beta3 and started experimenting with it.
I am am making use of the luks module in GRUB to provide my clients with fully encrypted
harddrives. Since my clients are German, and I keep telling them that strong passwords
should contain special characters, I ended up modifying the default keyboard layout
for the at_keyboard.c input driver. I provided the diff in keylayouts.c.diff, if you want
to make use of it. The support for German keys is only partial, since some of the German
keys are non-ASCII.
Also I patched at_keyboard.c. It has a minor typo, in line 91 both scancode 0x52 and
0x53 are mapped to the same GRUB_KEYBOARD_KEY_NUMDOT. This is wrong, scancode 0x52
has to be mapped to GRUB_KEYBOARD_KEY_NUM0 (as that's what it is).
Last but not least, parsing through include/grub/keyboard_layouts.h, I realized that the
enumeration of GRUB_KEYBOARD_KEY_* is skipping value 0x31:
> GRUB_KEYBOARD_KEY_RBRACKET = 0x30,
> GRUB_KEYBOARD_KEY_BACKSLASH = 0x32,
I do not know why this is the case, but from my point of view this probably lead to the
following comment ( in grub-core/commands/keylayouts.c ):
> /* According to usage table 0x31 should be mapped to '/'
> but testing with real keyboard shows that 0x32 is remapped to '/'.
> Map 0x31 to 0.
Cleaning up the enumeration would do some good, I guess.
Find attached both aformentioned patches. I'll be glad help out if you deem it appropriate
to, e.g. make the support for German at_keyboard layout a configurable option.
Regards, Frank
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: keylayouts.c.diff --]
[-- Type: text/x-patch; name="keylayouts.c.diff", Size: 5910 bytes --]
--- keylayouts.c.orig 2016-05-15 18:37:53.748056892 +0200
+++ keylayouts.c 2016-05-15 19:41:45.187943685 +0200
@@ -30,7 +30,7 @@
GRUB_MOD_LICENSE ("GPLv3+");
-static struct grub_keyboard_layout layout_us = {
+static struct grub_keyboard_layout layout_de = {
.keyboard_map = {
/* Keyboard errors. Handled by driver. */
/* 0x00 */ 0, 0, 0, 0,
@@ -38,16 +38,16 @@
/* 0x04 */ 'a', 'b', 'c', 'd',
/* 0x08 */ 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
/* 0x10 */ 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
- /* 0x18 */ 'u', 'v', 'w', 'x', 'y', 'z', '1', '2',
+ /* 0x18 */ 'u', 'v', 'w', 'x', 'z', 'y', '1', '2',
/* 0x20 */ '3', '4', '5', '6', '7', '8', '9', '0',
- /* 0x28 */ '\n', '\e', '\b', '\t', ' ', '-', '=', '[',
+ /* 0x28 */ '\n', '\e', '\b', '\t', ' ', 's', '\'', 'u', /* s = ß, ' = ´, u = ü */
/* According to usage table 0x31 should be mapped to '/'
but testing with real keyboard shows that 0x32 is remapped to '/'.
Map 0x31 to 0.
*/
- /* 0x30 */ ']', 0, '\\', ';', '\'', '`', ',', '.',
+ /* 0x30 */ '+', 0, '#', 'o', 'a', '^', ',', '.', /* o = ö, a = ä */
/* 0x39 is CapsLock. Handled by driver. */
- /* 0x38 */ '/', 0, GRUB_TERM_KEY_F1, GRUB_TERM_KEY_F2,
+ /* 0x38 */ '-', 0, GRUB_TERM_KEY_F1, GRUB_TERM_KEY_F2,
/* 0x3c */ GRUB_TERM_KEY_F3, GRUB_TERM_KEY_F4,
/* 0x3e */ GRUB_TERM_KEY_F5, GRUB_TERM_KEY_F6,
/* 0x40 */ GRUB_TERM_KEY_F7, GRUB_TERM_KEY_F8,
@@ -71,7 +71,7 @@
/* 0x5e */ GRUB_TERM_KEY_RIGHT, GRUB_TERM_KEY_HOME,
/* 0x60 */ GRUB_TERM_KEY_UP, GRUB_TERM_KEY_PPAGE,
/* 0x62 */ GRUB_TERM_KEY_INSERT, GRUB_TERM_KEY_DC,
- /* 0x64 */ '\\'
+ /* 0x64 */ '<'
},
.keyboard_map_shift = {
/* Keyboard errors. Handled by driver. */
@@ -80,18 +80,18 @@
/* 0x04 */ 'A', 'B', 'C', 'D',
/* 0x08 */ 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
/* 0x10 */ 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
- /* 0x18 */ 'U', 'V', 'W', 'X', 'Y', 'Z', '!', '@',
- /* 0x20 */ '#', '$', '%', '^', '&', '*', '(', ')',
+ /* 0x18 */ 'U', 'V', 'W', 'X', 'Z', 'Y', '!', '\"',
+ /* 0x20 */ 'P', '$', '%', '&', '/', '(', ')', '=', /* P = § */
/* 0x28 */ '\n' | GRUB_TERM_SHIFT, '\e' | GRUB_TERM_SHIFT,
/* 0x2a */ '\b' | GRUB_TERM_SHIFT, '\t' | GRUB_TERM_SHIFT,
- /* 0x2c */ ' ' | GRUB_TERM_SHIFT, '_', '+', '{',
+ /* 0x2c */ ' ' | GRUB_TERM_SHIFT, '?', '`', 'U', /* U = Ü */
/* According to usage table 0x31 should be mapped to '/'
but testing with real keyboard shows that 0x32 is remapped to '/'.
Map 0x31 to 0.
*/
- /* 0x30 */ '}', 0, '|', ':', '"', '~', '<', '>',
+ /* 0x30 */ '*', 0, '\'', 'O', 'A', '^', ';', ':', /* O = Ö, ^ = ° */
/* 0x39 is CapsLock. Handled by driver. */
- /* 0x38 */ '?', 0,
+ /* 0x38 */ '_', 0,
/* 0x3a */ GRUB_TERM_KEY_F1 | GRUB_TERM_SHIFT,
/* 0x3b */ GRUB_TERM_KEY_F2 | GRUB_TERM_SHIFT,
/* 0x3c */ GRUB_TERM_KEY_F3 | GRUB_TERM_SHIFT,
@@ -121,11 +121,59 @@
/* 0x54 */ '/', '*',
/* 0x56 */ '-', '+',
/* 0x58 */ '\n' | GRUB_TERM_SHIFT, '1', '2', '3', '4', '5','6', '7',
- /* 0x60 */ '8', '9', '0', '.', '|'
+ /* 0x60 */ '8', '9', '0', ',', '>'
+ },
+ .keyboard_map_l3 = {
+ /* Keyboard errors. Handled by driver. */
+ /* 0x00 */ 0, 0, 0, 0,
+
+ /* 0x04 */ 0, 0, 0, 0,
+ /* 0x08 */ 'e', 0, 0, 0, 0, 0, 0, 0, /* e = € */
+ /* 0x10 */ 0, 0, 0, 0, '@', 0, 0, 0,
+ /* 0x18 */ 0, 0, 0, 0, 0, 0, 0, '2', /* 2 = ² */
+ /* 0x20 */ 3, 0, 0, 0, '{', '[', ']', '}', /* 3 = ³ */
+ /* 0x28 */ 0, 0, 0, 0, 0, '\\',
+ /* 0x2e */ 0, 0,
+ /* According to usage table 0x31 should be mapped to '/'
+ but testing with real keyboard shows that 0x32 is remapped to '/'.
+ Map 0x31 to 0.
+ */
+ /* 0x30 */ '~', 0, 0, 0, 0, 0, 0, 0,
+ /* 0x39 is CapsLock. Handled by driver. */
+ /* 0x38 */ 0, 0,
+ /* 0x3a */ GRUB_TERM_KEY_F1 | GRUB_TERM_ALT,
+ /* 0x3b */ GRUB_TERM_KEY_F2 | GRUB_TERM_ALT,
+ /* 0x3c */ GRUB_TERM_KEY_F3 | GRUB_TERM_ALT,
+ /* 0x3d */ GRUB_TERM_KEY_F4 | GRUB_TERM_ALT,
+ /* 0x3e */ GRUB_TERM_KEY_F5 | GRUB_TERM_ALT,
+ /* 0x3f */ GRUB_TERM_KEY_F6 | GRUB_TERM_ALT,
+ /* 0x40 */ GRUB_TERM_KEY_F7 | GRUB_TERM_ALT,
+ /* 0x41 */ GRUB_TERM_KEY_F8 | GRUB_TERM_ALT,
+ /* 0x42 */ GRUB_TERM_KEY_F9 | GRUB_TERM_ALT,
+ /* 0x43 */ GRUB_TERM_KEY_F10 | GRUB_TERM_ALT,
+ /* 0x44 */ GRUB_TERM_KEY_F11 | GRUB_TERM_ALT,
+ /* 0x45 */ GRUB_TERM_KEY_F12 | GRUB_TERM_ALT,
+ /* PrtScr and ScrollLock. Not handled yet. */
+ /* 0x46 */ 0, 0,
+ /* 0x48 is Pause. Not handled yet. */
+ /* 0x48 */ 0, GRUB_TERM_KEY_INSERT | GRUB_TERM_ALT,
+ /* 0x4a */ GRUB_TERM_KEY_HOME | GRUB_TERM_ALT,
+ /* 0x4b */ GRUB_TERM_KEY_PPAGE | GRUB_TERM_ALT,
+ /* 0x4c */ GRUB_TERM_KEY_DC | GRUB_TERM_ALT,
+ /* 0x4d */ GRUB_TERM_KEY_END | GRUB_TERM_ALT,
+ /* 0x4e */ GRUB_TERM_KEY_NPAGE | GRUB_TERM_ALT,
+ /* 0x4f */ GRUB_TERM_KEY_RIGHT | GRUB_TERM_ALT,
+ /* 0x50 */ GRUB_TERM_KEY_LEFT | GRUB_TERM_ALT,
+ /* 0x51 */ GRUB_TERM_KEY_DOWN | GRUB_TERM_ALT,
+ /* 0x53 is NumLock. Handled by driver. */
+ /* 0x52 */ GRUB_TERM_KEY_UP | GRUB_TERM_ALT, 0,
+ /* 0x54 */ 0, 0, 0, 0,
+ /* 0x58 */ 0, 0, 0, 0, 0, 0, 0, 0,
+ /* 0x60 */ 0, 0, 0, 0, '|'
}
};
-static struct grub_keyboard_layout *grub_current_layout = &layout_us;
+static struct grub_keyboard_layout *grub_current_layout = &layout_de;
static int
map_key_core (int code, int status, int *alt_gr_consumed)
[-- Attachment #3: at_keyboard.c.diff --]
[-- Type: text/x-patch, Size: 692 bytes --]
--- at_keyboard.c 2016-02-28 03:07:41.000000000 +0100
+++ grub-2.02-beta3/grub-core/term/at_keyboard.c 2016-05-14 23:34:50.635451129 +0200
@@ -88,7 +88,7 @@
/* 0x4c */ GRUB_KEYBOARD_KEY_NUM5, GRUB_KEYBOARD_KEY_NUM6,
/* 0x4e */ GRUB_KEYBOARD_KEY_NUMPLUS, GRUB_KEYBOARD_KEY_NUM1,
/* 0x50 */ GRUB_KEYBOARD_KEY_NUM2, GRUB_KEYBOARD_KEY_NUM3,
- /* 0x52 */ GRUB_KEYBOARD_KEY_NUMDOT, GRUB_KEYBOARD_KEY_NUMDOT,
+ /* 0x52 */ GRUB_KEYBOARD_KEY_NUM0, GRUB_KEYBOARD_KEY_NUMDOT,
/* 0x54 */ 0, 0,
/* 0x56 */ GRUB_KEYBOARD_KEY_102ND, GRUB_KEYBOARD_KEY_F11,
/* 0x58 */ GRUB_KEYBOARD_KEY_F12, 0,
next reply other threads:[~2016-05-16 17:45 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-15 18:19 fgndevelop [this message]
2016-07-27 5:09 ` Patch for German keyboard layout for the at_keyboard input Andrei Borzenkov
2016-07-27 5:37 ` Andrei Borzenkov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5738BDB1.2070005@posteo.org \
--to=fgndevelop@posteo.org \
--cc=grub-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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 NNTP newsgroup(s).