After upgrading systemd on my laptop I recognized that the keyboard scancode mapping was broken, eg. I could not use the back light control keys anymore. After some debugging I recognized that the hwdb didn't load correctly, so I had a closer look. After removing the /etc/udev/hwdb.d/00-keyboard.hwdb file nothing changed so the problem was somewhere else. While reading man hwdb I recognized the path /usr/lib/udev/hwdb.bin and I tried to look it up: surprise the path /usr/lib/udev doesn't even exist. Searching for the path I found it in /lib/udev and symlinking the directorz to /usr/lib/udev resolved my problem. tl;dr: systemd-udev expects the hwdb in /usr/lib/udev/ nut it is in /lib/udev Reproducible: Always Steps to Reproduce: 1. alter the keymap in /lib/udev/hwdb.d/60-keymap.hwdb 2. reload the hwdb with udevadm hwdb --update and udevadm trigger Actual Results: the change won't apply Expected Results: the change should apply
What does this command output on your system? pkg-config --variable=udevdir udev
Also, what does strace show when you run that udevadm hwdb command? I get the following. # strace -e file udevadm hwdb -u ... open("/lib/udev/hwdb.d/20-OUI.hwdb", O_RDONLY|O_CLOEXEC) = 3 open("/lib/udev/hwdb.d/20-acpi-vendor.hwdb", O_RDONLY|O_CLOEXEC) = 3 open("/lib/udev/hwdb.d/20-bluetooth-vendor-product.hwdb", O_RDONLY|O_CLOEXEC) = 3 open("/lib/udev/hwdb.d/20-net-ifname.hwdb", O_RDONLY|O_CLOEXEC) = 3 open("/lib/udev/hwdb.d/20-pci-classes.hwdb", O_RDONLY|O_CLOEXEC) = 3 open("/lib/udev/hwdb.d/20-pci-vendor-model.hwdb", O_RDONLY|O_CLOEXEC) = 3 open("/lib/udev/hwdb.d/20-sdio-classes.hwdb", O_RDONLY|O_CLOEXEC) = 3 open("/lib/udev/hwdb.d/20-sdio-vendor-model.hwdb", O_RDONLY|O_CLOEXEC) = 3 open("/lib/udev/hwdb.d/20-usb-classes.hwdb", O_RDONLY|O_CLOEXEC) = 3 open("/lib/udev/hwdb.d/20-usb-media-players.hwdb", O_RDONLY|O_CLOEXEC) = 3 open("/lib/udev/hwdb.d/20-usb-vendor-model.hwdb", O_RDONLY|O_CLOEXEC) = 3 open("/lib/udev/hwdb.d/60-evdev.hwdb", O_RDONLY|O_CLOEXEC) = 3 open("/lib/udev/hwdb.d/60-keyboard.hwdb", O_RDONLY|O_CLOEXEC) = 3 open("/lib/udev/hwdb.d/61-oldkeyboard.hwdb", O_RDONLY|O_CLOEXEC) = 3 open("/lib/udev/hwdb.d/69-libmtp.hwdb", O_RDONLY|O_CLOEXEC) = 3 open("/lib/udev/hwdb.d/70-mouse.hwdb", O_RDONLY|O_CLOEXEC) = 3 open("/lib/udev/hwdb.d/70-pointingstick.hwdb", O_RDONLY|O_CLOEXEC) = 3 So it certainly seems to be looking at /lib/udev/hwdb.d on my system.
pkg-config --variable=udevdir udev gives /lib/udev and strace is accessing the files. After a reboot without the symlink everything works. It looks like bug chasing at 4:00am is not a good idea. Sorry for the noise