[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: How can we change the keyboard layout? (was: what keyboard do you use?)



On Mon, 05 Feb 2024 21:06:30 +0100
hw <hw@adminart.net> wrote:

> Yes, it's a misunderstanding: How can we change the keyboard layout?

I recently dug into this because I am running Debian on a Chromebook, and I wanted to map the Google-key (located next to the A key, where you usually expect Caps-Lock to be) to be a Ctrl, for Emacs-Correctness.  I wanted a solution that would also work when I used an external keyboard (which has an actual CapsLock next to the A), and would work both in X and in console mode.

The solution I found, which should work when using Wayland as well, was to customize the lowlevel scancode-to-keycode mapping that is managed by udev.  You can have different remappings for different keyboard models.

This keymapping system is very powerful, but somewhat ideosyncratic, and somewhat poorly documented.  And it's an edit-the-configfile system; I'm not aware of any GUI config tools for it.

It took me over 2 hours to figure out and set up, after which I had a scrambled pile of notes (in a text file) but not the energy to clean them up.  The next time I do it I expect it'll take me about an hour (if the same process still applies) instead of the 15 minutes it would take if I did a proper job of documenting it for myself.

Some of the webpages in my notes that I remember being useful are:
https://wiki.archlinux.org/title/Keyboard_input
https://yulistic.gitlab.io/2017/12/linux-keymapping-with-udev-hwdb/ (including some of the comments that contain more recent info)
https://medium.com/@canadaduane/key-remapping-in-linux-2021-edition-47320999d2aa

Some somewhat-informative files on my computer were
/lib/udev/hwdb.d/60-keyboard.hwdb (comes with udev)
/usr/include/linux/input-event-codes.h (comes with linux-libc-dev package)

Gotchas include:
Some things *must* be in lowercase (keycodes, I think?)
Some things *must* be in uppercase (certain hexadecimal stuff?)
For best results, triple-check that the case you use is exactly the same as the example/sample config files.
If you get this wrong, udev will just ignore the erroneous parts of your config file, (and you might think it just didn't see it) instead of giving an error message.


Reply to: