Changing certain keys on keyboard with Qubes and Librem 14

Hello! Is there a way on a Librem 14 running Qubes to change specific keys? Id love to swap my “up arrow” key for my “right shift” key. That half shift key is kicking my butt. Any help would be eternally appreciated. Noob here. Thanks for everything what a great community!

Make your changes in the default.c file in the EC firmware source code, then compile & reflash using the Purism flashing utility in Dom0.

The path to the default keymap file:


It’s what I do to remap keys.

1 Like

Thanks for this tip. Thus far, I have done:

david@forschung:~/firmware$ git clone
Cloning into 'librem-ec'...
remote: Enumerating objects: 8149, done.
remote: Counting objects: 100% (331/331), done.
remote: Compressing objects: 100% (197/197), done.
remote: Total 8149 (delta 166), reused 279 (delta 131), pack-reused 7818
Receiving objects: 100% (8149/8149), 1.17 MiB | 1.44 MiB/s, done.
Resolving deltas: 100% (4701/4701), done.
david@forschung:~/firmware$ cd librem-ec/
david@forschung:~/firmware/librem-ec$ ls
build  doc  ecflash  ecsim  ecspy  LICENSE  Makefile  POWER.txt  rust-toolchain  scripts  src  tool
david@forschung:~/firmware/librem-ec$ sudo apt install sdcc # Small Device C Compiler
david@forschung:~/firmware/librem-ec$ export BOARD=purism/librem_14
david@forschung:~/firmware/librem-ec$ make
[edit ~/firmware/librem-ec/src/board/purism/librem_14/keymap/default.c to swap K_LEFT_ALT <--> K_LEFT_SUPER]
david@forschung:~/firmware/librem-ec$ make
david@forschung:~/firmware/librem-ec$ cd build/purism/librem_14/
david@forschung:~/firmware/librem-ec/build/purism/librem_14$ ls
1.9_2022-06-30  1.9-dirty_2022-06-30 
david@forschung:~/firmware/librem-ec/build/purism/librem_14/1.9-dirty_2022-06-30$ ls
arch   common  ec-1.9-dirty_2022-06-30.rom  ec.ihx  ec.rom  include
board  ec      ec-1M.rom             ec.mem  flash   scratch

But how should I now flash 1.9-dirty_2022-06-30.rom? Is there any advice for doing this safely, preserving an option to recover?

To clarify the background for my question, I have used the “ISO method” to update the EC firmware (described at and also updated PureBoot using Option 1 described at Can the latter procedure also be used to update EC firmware, or do I need to create an ISO and use the former procedure?

Conceptually, I suppose my knowledge gap is about how flashing works. Can the flash utility inspect any *.rom and know ‘where it’s supposed to go’? Or would an attempt to flash 1.9-dirty_2022-06-30.rom overwrite everything?

To answer my own question: It was as straightforward as using
sudo ./purism_ectool flash_backup [..path/to..]/ec-1.9-dirty_2022-06-30.rom
as described at