First find the scancode of the key that needs to be remapped, e.g. with the `evtest` utility. A line like the following one (with `MSC_SCAN` in it) should be output: Event: time 1417131619.686259, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70068 followed by a second one giving the current key code. If no `MSC_SCAN` line is output, this is due to a kernel driver bug, but the scancode can still be found with the `input-kbd` utility; `evtest` should have given the key code, so that it should be easy to find the corresponding line in the `input-kbd` output (e.g. by using `grep`). One the scancodes of the keys to be remapped have been determined, create a file such as `/etc/udev/hwdb.d/98-custom-keyboard.hwdb` containing the remappings. In my case (which works), I have: keyboard:usb:v05ACp0221* KEYBOARD_KEY_70035=102nd # Left to z: backslash bar KEYBOARD_KEY_70064=grave # Left to 1: grave notsign KEYBOARD_KEY_70068=insert # F13: Insert The `keyboard:` string must be at the beginning of the line, and each `KEYBOARD_KEY_` settings must have exactly one space before (note: a line with no spaces will give an error message, and a line with two spaces will be *silently* ignored; I hope that this will be fixed in the future). `KEYBOARD_KEY_` is followed by the scancode in hexadecimal (like what both `evtest` and `input-kbd` give). Valid values could be obtained from either the `evtest` output or the `input-kbd` output, or even from the `/usr/include/linux/input.h` file: for instance, `KEY_102ND` would give `102nd` (by removing `KEY_` and converting to lower case), which I used above. After the file is saved, type: udevadm hwdb --update to (re)build the database `/etc/udev/hwdb.bin` (you can check its timestamp). Then, udevadm trigger --sysname-match="event*" will take the new settings into account. You can check with `evtest`. The beginning of the file `/lib/udev/hwdb.d/60-keyboard.hwdb` gives details. At the time of writing, the released udev has incomplete/buggy information, but you can look at [the latest development version of the file](http://cgit.freedesktop.org/systemd/systemd/tree/hwdb/60-keyboard.hwdb) (but the problem with the number of spaces is not documented) and/or [my bug report and discussion](https://bugs.freedesktop.org/show_bug.cgi?id=82311). If this doesn't work, the problem might be found after temporarily increasing the log level of `udevd` with `udevadm control` (see the udevadm(8) man page for details). For old `udev` versions such as 204, [this method](https://www.vinc17.net/unix/xkb.en.html#udev) should still work.