Customize udev hwdb rules not working

I try to remap the keys of the external keyboard (Capslock <=> Esc) through the custom udev rules, but this rule has never taken effect.

This is my operation flow:

  1. nix-shell -p evtest and sudo evtest
[nix-shell:~]$ sudo evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
/dev/input/event0:	AT Translated Set 2 keyboard
/dev/input/event1:	USB OPTICAL MOUSE
/dev/input/event10:	Power Button
/dev/input/event11:	XiaoMi USB 2.0 Webcam: XiaoMi U
/dev/input/event12:	HDA Intel PCH Mic
/dev/input/event13:	HDA Intel PCH Headphone
/dev/input/event14:	Video Bus
/dev/input/event15:	Video Bus
/dev/input/event16:	HDA Intel PCH HDMI/DP,pcm=3
/dev/input/event17:	HDA Intel PCH HDMI/DP,pcm=7
/dev/input/event18:	HDA Intel PCH HDMI/DP,pcm=8
/dev/input/event19:	HDA Intel PCH HDMI/DP,pcm=9
/dev/input/event2:	Gaming Keyboard
/dev/input/event20:	HDA Intel PCH HDMI/DP,pcm=10
/dev/input/event21:	CUST0001:00 04F3:30B7 Mouse
/dev/input/event22:	CUST0001:00 04F3:30B7 Touchpad
/dev/input/event3:	Gaming Keyboard System Control
/dev/input/event4:	Gaming Keyboard Consumer Control
/dev/input/event5:	Gaming Keyboard
/dev/input/event6:	Gaming Keyboard Mouse
/dev/input/event7:	Sleep Button
/dev/input/event8:	Power Button
/dev/input/event9:	Lid Switch
Select the device event number [0-22]: 2
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x416 product 0xb23c version 0x110
Input device name: "Gaming Keyboard"
Supported events:
  Event type 0 (EV_SYN)
  Event type 1 (EV_KEY)
    Event code 1 (KEY_ESC)
    Event code 2 (KEY_1)
    Event code 3 (KEY_2)
    Event code 4 (KEY_3)
    Event code 5 (KEY_4)
    Event code 6 (KEY_5)
    Event code 7 (KEY_6)
    Event code 8 (KEY_7)
    Event code 9 (KEY_8)
    Event code 10 (KEY_9)
    Event code 11 (KEY_0)
    Event code 12 (KEY_MINUS)
    Event code 13 (KEY_EQUAL)
    Event code 14 (KEY_BACKSPACE)
    Event code 15 (KEY_TAB)
    Event code 16 (KEY_Q)
    Event code 17 (KEY_W)
    Event code 18 (KEY_E)
    Event code 19 (KEY_R)
    Event code 20 (KEY_T)
    Event code 21 (KEY_Y)
    Event code 22 (KEY_U)
    Event code 23 (KEY_I)
    Event code 24 (KEY_O)
    Event code 25 (KEY_P)
    Event code 26 (KEY_LEFTBRACE)
    Event code 27 (KEY_RIGHTBRACE)
    Event code 28 (KEY_ENTER)
    Event code 29 (KEY_LEFTCTRL)
    Event code 30 (KEY_A)
    Event code 31 (KEY_S)
    Event code 32 (KEY_D)
    Event code 33 (KEY_F)
    Event code 34 (KEY_G)
    Event code 35 (KEY_H)
    Event code 36 (KEY_J)
    Event code 37 (KEY_K)
    Event code 38 (KEY_L)
    Event code 39 (KEY_SEMICOLON)
    Event code 40 (KEY_APOSTROPHE)
    Event code 41 (KEY_GRAVE)
    Event code 42 (KEY_LEFTSHIFT)
    Event code 43 (KEY_BACKSLASH)
    Event code 44 (KEY_Z)
    Event code 45 (KEY_X)
    Event code 46 (KEY_C)
    Event code 47 (KEY_V)
    Event code 48 (KEY_B)
    Event code 49 (KEY_N)
    Event code 50 (KEY_M)
    Event code 51 (KEY_COMMA)
    Event code 52 (KEY_DOT)
    Event code 53 (KEY_SLASH)
    Event code 54 (KEY_RIGHTSHIFT)
    Event code 55 (KEY_KPASTERISK)
    Event code 56 (KEY_LEFTALT)
    Event code 57 (KEY_SPACE)
    Event code 58 (KEY_CAPSLOCK)
    Event code 59 (KEY_F1)
    Event code 60 (KEY_F2)
    Event code 61 (KEY_F3)
    Event code 62 (KEY_F4)
    Event code 63 (KEY_F5)
    Event code 64 (KEY_F6)
    Event code 65 (KEY_F7)
    Event code 66 (KEY_F8)
    Event code 67 (KEY_F9)
    Event code 68 (KEY_F10)
    Event code 69 (KEY_NUMLOCK)
    Event code 70 (KEY_SCROLLLOCK)
    Event code 71 (KEY_KP7)
    Event code 72 (KEY_KP8)
    Event code 73 (KEY_KP9)
    Event code 74 (KEY_KPMINUS)
    Event code 75 (KEY_KP4)
    Event code 76 (KEY_KP5)
    Event code 77 (KEY_KP6)
    Event code 78 (KEY_KPPLUS)
    Event code 79 (KEY_KP1)
    Event code 80 (KEY_KP2)
    Event code 81 (KEY_KP3)
    Event code 82 (KEY_KP0)
    Event code 83 (KEY_KPDOT)
    Event code 85 (KEY_ZENKAKUHANKAKU)
    Event code 86 (KEY_102ND)
    Event code 87 (KEY_F11)
    Event code 88 (KEY_F12)
    Event code 89 (KEY_RO)
    Event code 90 (KEY_KATAKANA)
    Event code 91 (KEY_HIRAGANA)
    Event code 92 (KEY_HENKAN)
    Event code 93 (KEY_KATAKANAHIRAGANA)
    Event code 94 (KEY_MUHENKAN)
    Event code 95 (KEY_KPJPCOMMA)
    Event code 96 (KEY_KPENTER)
    Event code 97 (KEY_RIGHTCTRL)
    Event code 98 (KEY_KPSLASH)
    Event code 99 (KEY_SYSRQ)
    Event code 100 (KEY_RIGHTALT)
    Event code 102 (KEY_HOME)
    Event code 103 (KEY_UP)
    Event code 104 (KEY_PAGEUP)
    Event code 105 (KEY_LEFT)
    Event code 106 (KEY_RIGHT)
    Event code 107 (KEY_END)
    Event code 108 (KEY_DOWN)
    Event code 109 (KEY_PAGEDOWN)
    Event code 110 (KEY_INSERT)
    Event code 111 (KEY_DELETE)
    Event code 113 (KEY_MUTE)
    Event code 114 (KEY_VOLUMEDOWN)
    Event code 115 (KEY_VOLUMEUP)
    Event code 116 (KEY_POWER)
    Event code 117 (KEY_KPEQUAL)
    Event code 119 (KEY_PAUSE)
    Event code 121 (KEY_KPCOMMA)
    Event code 122 (KEY_HANGUEL)
    Event code 123 (KEY_HANJA)
    Event code 124 (KEY_YEN)
    Event code 125 (KEY_LEFTMETA)
    Event code 126 (KEY_RIGHTMETA)
    Event code 127 (KEY_COMPOSE)
    Event code 128 (KEY_STOP)
    Event code 129 (KEY_AGAIN)
    Event code 130 (KEY_PROPS)
    Event code 131 (KEY_UNDO)
    Event code 132 (KEY_FRONT)
    Event code 133 (KEY_COPY)
    Event code 134 (KEY_OPEN)
    Event code 135 (KEY_PASTE)
    Event code 136 (KEY_FIND)
    Event code 137 (KEY_CUT)
    Event code 138 (KEY_HELP)
    Event code 183 (KEY_F13)
    Event code 184 (KEY_F14)
    Event code 185 (KEY_F15)
    Event code 186 (KEY_F16)
    Event code 187 (KEY_F17)
    Event code 188 (KEY_F18)
    Event code 189 (KEY_F19)
    Event code 190 (KEY_F20)
    Event code 191 (KEY_F21)
    Event code 192 (KEY_F22)
    Event code 193 (KEY_F23)
    Event code 194 (KEY_F24)
    Event code 240 (KEY_UNKNOWN)
  Event type 4 (EV_MSC)
    Event code 4 (MSC_SCAN)
  Event type 17 (EV_LED)
    Event code 0 (LED_NUML) state 1
    Event code 1 (LED_CAPSL) state 0
    Event code 2 (LED_SCROLLL) state 0
    Event code 3 (LED_COMPOSE) state 0
    Event code 4 (LED_KANA) state 0
Key repeat handling:
  Repeat type 20 (EV_REP)
    Repeat code 0 (REP_DELAY)
      Value    250
    Repeat code 1 (REP_PERIOD)
      Value     33
Properties:
Testing ... (interrupt to exit)
Event: time 1676183427.031241, type 17 (EV_LED), code 0 (LED_NUML), value 0
Event: time 1676183427.031241, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70028
Event: time 1676183427.031241, type 1 (EV_KEY), code 28 (KEY_ENTER), value 0
Event: time 1676183427.031241, -------------- SYN_REPORT ------------
Event: time 1676184188.745133, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70039
Event: time 1676184188.745133, type 1 (EV_KEY), code 58 (KEY_CAPSLOCK), value 1
Event: time 1676184188.745133, -------------- SYN_REPORT ------------
Event: time 1676184188.745823, type 17 (EV_LED), code 0 (LED_NUML), value 1
Event: time 1676184188.745823, type 17 (EV_LED), code 1 (LED_CAPSL), value 1
Event: time 1676184188.745823, -------------- SYN_REPORT ------------
Event: time 1676184188.841160, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70039
Event: time 1676184188.841160, type 1 (EV_KEY), code 58 (KEY_CAPSLOCK), value 0
Event: time 1676184188.841160, -------------- SYN_REPORT ------------
Event: time 1676184190.364204, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70039
Event: time 1676184190.364204, type 1 (EV_KEY), code 58 (KEY_CAPSLOCK), value 1
Event: time 1676184190.364204, -------------- SYN_REPORT ------------
Event: time 1676184190.456160, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70039
Event: time 1676184190.456160, type 1 (EV_KEY), code 58 (KEY_CAPSLOCK), value 0
Event: time 1676184190.456160, -------------- SYN_REPORT ------------
Event: time 1676184190.456698, type 17 (EV_LED), code 1 (LED_CAPSL), value 0
Event: time 1676184190.456698, -------------- SYN_REPORT ------------
Event: time 1676184191.003221, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70029
Event: time 1676184191.003221, type 1 (EV_KEY), code 1 (KEY_ESC), value 1
Event: time 1676184191.003221, -------------- SYN_REPORT ------------
^[Event: time 1676184191.098237, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70029
Event: time 1676184191.098237, type 1 (EV_KEY), code 1 (KEY_ESC), value 0
Event: time 1676184191.098237, -------------- SYN_REPORT ------------

  1. Write udev rules based on evtest information and run sudo nixos-rebuild switch
  services.udev.extraHwdb = ''
    evdev:atkbd:dmi:*
    evdev:input:b0003v0416pB23Ce0110*
      KEYBOARD_KEY_3a=esc
      KEYBOARD_KEY_01=capslock
  '';
  1. Tried to use an external keyboard to press a key, but it didn’t work

Later, I also tried using evdev:name:Gaming Keyboard* instead evdev:input:b0003v0416pB23Ce0110*, still can’t work.

Now I will change the content of the second step:

evdev:input:b0003v0416pB23C*
      KEYBOARD_KEY_70039=esc
      KEYBOARD_KEY_70029=capslock

Then execute the command sudo nixos-rebuild switch and reboot. Check whether the key is loaded by sudo udevadm test /dev/input/event2, there are related errors in the output.

This program is for debugging only, it does not run any program
specified by a RUN key. It may show incorrect results, because
some values may be different, or not available at a simulation run.

Trying to open "/etc/udev/hwdb.bin"...
=== trie on-disk ===
tool version:          251
file size:         9804976 bytes
header size             80 bytes
strings            2438104 bytes
nodes              7366792 bytes
Load module index
Found cgroup2 on /sys/fs/cgroup/, full unified hierarchy
Found container virtualization none.
Using default interface naming scheme 'v251'.
Parsed configuration file "/nix/store/3g57m8gjkqajvwcqkw7dxmd9d7vnkcv9-systemd-251.10/lib/systemd/network/99-default.link"
Created link configuration context.
Loaded timestamp for '/etc/udev/rules.d'.
Loaded timestamp for '/run/udev/rules.d'.
Reading rules file: /nix/store/wvrq26awjlfj3nbg6gmblqf4dcvbpdpz-udev-rules/00-path.rules
.....
Skipping empty file: /nix/store/wvrq26awjlfj3nbg6gmblqf4dcvbpdpz-udev-rules/99-ipv6-privacy-extensions.rules
Reading rules file: /nix/store/wvrq26awjlfj3nbg6gmblqf4dcvbpdpz-udev-rules/99-local.rules
Reading rules file: /nix/store/3g57m8gjkqajvwcqkw7dxmd9d7vnkcv9-systemd-251.10/lib/udev/rules.d/99-systemd.rules
event2: /nix/store/3g57m8gjkqajvwcqkw7dxmd9d7vnkcv9-systemd-251.10/lib/udev/rules.d/50-udev-default.rules:33 GROUP 174
event2: /nix/store/3g57m8gjkqajvwcqkw7dxmd9d7vnkcv9-systemd-251.10/lib/udev/rules.d/60-evdev.rules:9 Importing properties from results of builtin command 'hwdb --subsystem=input --lookup-prefix=evdev:'
event2: hwdb modalias key: "input:b0003v0416pB23Ce0110-e0,1,4,11,14,k71,72,73,74,75,77,79,7A,7B,7C,7D,7E,7F,80,81,82,83,84,85,86,87,88,89,8A,B7,B8,B9,BA,BB,BC,BD,BE,BF,C0,C1,C2,F0,ram4,l0,1,2,3,4,sfw"
event2: No entry found from hwdb.
event2: /nix/store/3g57m8gjkqajvwcqkw7dxmd9d7vnkcv9-systemd-251.10/lib/udev/rules.d/60-evdev.rules:9 Failed to run builtin 'hwdb --subsystem=input --lookup-prefix=evdev:': No data available
value '[dmi/id]modalias' is 'dmi:bvnTIMI:bvrRMRKB5R0P0906:bd03/13/2020:br1.9:efr1.6:svnTIMI:pnTM1709:pvrMiLaptop15.6:rvnTIMI:rnTM1709:rvrD3A:cvnTIMI:ct10:cvrMiLaptop15.6:skuTM1709-23400:'
event2: /nix/store/3g57m8gjkqajvwcqkw7dxmd9d7vnkcv9-systemd-251.10/lib/udev/rules.d/60-evdev.rules:20 Importing properties from results of builtin command 'hwdb 'evdev:name:Gaming Keyboard:dmi:bvnTIMI:bvrRMRKB5R0P0906:bd03/13/2020:br1.9:efr1.6:svnTIMI:pnTM1709:pvrMiLaptop15.6:rvnTIMI:rnTM1709:rvrD3A:cvnTIMI:ct10:cvrMiLaptop15.6:skuTM1709-23400:''
event2: No entry found from hwdb.
event2: /nix/store/3g57m8gjkqajvwcqkw7dxmd9d7vnkcv9-systemd-251.10/lib/udev/rules.d/60-evdev.rules:20 Failed to run builtin 'hwdb 'evdev:name:Gaming Keyboard:dmi:bvnTIMI:bvrRMRKB5R0P0906:bd03/13/2020:br1.9:efr1.6:svnTIMI:pnTM1709:pvrMiLaptop15.6:rvnTIMI:rnTM1709:rvrD3A:cvnTIMI:ct10:cvrMiLaptop15.6:skuTM1709-23400:'': No data available
value '[dmi/id]modalias' is 'dmi:bvnTIMI:bvrRMRKB5R0P0906:bd03/13/2020:br1.9:efr1.6:svnTIMI:pnTM1709:pvrMiLaptop15.6:rvnTIMI:rnTM1709:rvrD3A:cvnTIMI:ct10:cvrMiLaptop15.6:skuTM1709-23400:'
event2: /nix/store/3g57m8gjkqajvwcqkw7dxmd9d7vnkcv9-systemd-251.10/lib/udev/rules.d/60-evdev.rules:25 Importing properties from results of builtin command 'hwdb 'evdev:name:Gaming Keyboard:phys:usb-0000:00:14.0-2/input0:ev:120013:dmi:bvnTIMI:bvrRMRKB5R0P0906:bd03/13/2020:br1.9:efr1.6:svnTIMI:pnTM1709:pvrMiLaptop15.6:rvnTIMI:rnTM1709:rvrD3A:cvnTIMI:ct10:cvrMiLaptop15.6:skuTM1709-23400:''
event2: No entry found from hwdb.
event2: /nix/store/3g57m8gjkqajvwcqkw7dxmd9d7vnkcv9-systemd-251.10/lib/udev/rules.d/60-evdev.rules:25 Failed to run builtin 'hwdb 'evdev:name:Gaming Keyboard:phys:usb-0000:00:14.0-2/input0:ev:120013:dmi:bvnTIMI:bvrRMRKB5R0P0906:bd03/13/2020:br1.9:efr1.6:svnTIMI:pnTM1709:pvrMiLaptop15.6:rvnTIMI:rnTM1709:rvrD3A:cvnTIMI:ct10:cvrMiLaptop15.6:skuTM1709-23400:'': No data available
event2: /nix/store/3g57m8gjkqajvwcqkw7dxmd9d7vnkcv9-systemd-251.10/lib/udev/rules.d/60-evdev.rules:28 Importing properties from results of builtin command 'keyboard'
event2: /nix/store/3g57m8gjkqajvwcqkw7dxmd9d7vnkcv9-systemd-251.10/lib/udev/rules.d/60-input-id.rules:5 Importing properties from results of builtin command 'input_id'
input2: capabilities/ev raw kernel attribute: 120013
input2: capabilities/abs raw kernel attribute: 0
input2: capabilities/rel raw kernel attribute: 0
input2: capabilities/key raw kernel attribute: 1000000000007 ff800000000007ff febeffdfffefffff fffffffffffffffe
input2: properties raw kernel attribute: 0
event2: test_key: checking bit block 0 for any keys; found=yes
event2: /nix/store/3g57m8gjkqajvwcqkw7dxmd9d7vnkcv9-systemd-251.10/lib/udev/rules.d/60-input-id.rules:6 Importing properties from results of builtin command 'hwdb --subsystem=input --lookup-prefix=id-input:modalias:'
event2: hwdb modalias key: "input:b0003v0416pB23Ce0110-e0,1,4,11,14,k71,72,73,74,75,77,79,7A,7B,7C,7D,7E,7F,80,81,82,83,84,85,86,87,88,89,8A,B7,B8,B9,BA,BB,BC,BD,BE,BF,C0,C1,C2,F0,ram4,l0,1,2,3,4,sfw"
event2: No entry found from hwdb.
event2: /nix/store/3g57m8gjkqajvwcqkw7dxmd9d7vnkcv9-systemd-251.10/lib/udev/rules.d/60-input-id.rules:6 Failed to run builtin 'hwdb --subsystem=input --lookup-prefix=id-input:modalias:': No data available
event2: /nix/store/3g57m8gjkqajvwcqkw7dxmd9d7vnkcv9-systemd-251.10/lib/udev/rules.d/60-persistent-input.rules:11 Importing properties from results of builtin command 'usb_id'
1-2:1.0: if_class:3 protocol:0
event2: /nix/store/3g57m8gjkqajvwcqkw7dxmd9d7vnkcv9-systemd-251.10/lib/udev/rules.d/60-persistent-input.rules:28 LINK 'input/by-id/usb-0416_Gaming_Keyboard-event-kbd'
event2: /nix/store/3g57m8gjkqajvwcqkw7dxmd9d7vnkcv9-systemd-251.10/lib/udev/rules.d/60-persistent-input.rules:35 Importing properties from results of builtin command 'path_id'
event2: /nix/store/3g57m8gjkqajvwcqkw7dxmd9d7vnkcv9-systemd-251.10/lib/udev/rules.d/60-persistent-input.rules:37 LINK 'input/by-path/pci-0000:00:14.0-usb-0:2:1.0-event-kbd'
event2: /nix/store/wvrq26awjlfj3nbg6gmblqf4dcvbpdpz-udev-rules/80-libinput-device-groups.rules:4 Importing properties from results of '/nix/store/hi3yqnninicfhny7czkhlzsd6avsl2jd-libinput-1.21.0/lib/udev/libinput-device-group /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/0003:0416:B23C.0002/input/input2/event2'
event2: Starting '/nix/store/hi3yqnninicfhny7czkhlzsd6avsl2jd-libinput-1.21.0/lib/udev/libinput-device-group /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/0003:0416:B23C.0002/input/input2/event2'
Successfully forked off '(spawn)' as PID 2965.
event2: '/nix/store/hi3yqnninicfhny7czkhlzsd6avsl2jd-libinput-1.21.0/lib/udev/libinput-device-group /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/0003:0416:B23C.0002/input/input2/event2'(out) 'LIBINPUT_DEVICE_GROUP=3/416/b23c:usb-0000:00:14.0-2'
event2: Process '/nix/store/hi3yqnninicfhny7czkhlzsd6avsl2jd-libinput-1.21.0/lib/udev/libinput-device-group /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/0003:0416:B23C.0002/input/input2/event2' succeeded.
event2: Preserve permissions of /dev/input/event2, uid=0, gid=174, mode=0660
event2: Handling device node '/dev/input/event2', devnum=c13:66
event2: sd-device: Created db file '/run/udev/data/c13:66' for '/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2:1.0/0003:0416:B23C.0002/input/input2/event2'
......

There are many “event2: No entry found from hwdb.”. This seems to be why my udev rules are not taking effect, but I don’t know what to do next, what should I do.

If your issue is not solved do not flag it as such. For reference Udev keyboard remapping: ExtraHwdb does not work anymore? · Issue #182966 · NixOS/nixpkgs · GitHub