[udev] changing hwdb requires calling udevadm control --reload
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
systemd (Ubuntu) |
Won't Fix
|
Low
|
Unassigned |
Bug Description
I have a small gaming keyboard (Ideozon Fang) which has a terrible default keymapping that I want to fix. To do that, I need to change its default keymapping. But only for that keyboard and no other. My system is Ubuntu 14.04 (amd64).
As an example, I will change the key '3' which is by default mapped to 'Numpad 3' to 'PgDn'.
The old way that used to work (and still does in Debian 7.6) was this:
<----- snip ----->
root@debian~# /lib/udev/keymap -i /dev/input/event7
Press ESC to finish, or Control-C if this device is not your primary keyboard
scan code: 0x7005B key code: kp3
root@debian~# cat /etc/udev/
0x7005B pagedown
root@debian~# /lib/udev/keymap /dev/input/event7 /etc/udev/
Remapped scancode 0x7005b to 0x6d (prior: 0x51)
root@debian~# evtest /dev/input/event7
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x1038 product 0x310 version 0x111
Input device name: "Ideazon Zboard USB Gaming Device"
[...]
Event: time 1408993871.777960, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7005b
Event: time 1408993871.777971, type 1 (EV_KEY), code 109 (KEY_PAGEDOWN), value 1
<----- snap ----->
However, this method does not work anymore in 14.04 (for instance, there is no 'keymap' utility). Now, if I researched it correctly, we are supposed to do this:
<----- snip ----->
root@ubuntu:~# lsusb | grep -i ideazon
Bus 003 Device 009: ID 1038:0310 Ideazon, Inc.
root@ubuntu:~# cat /etc/udev/
keyboard:
KEYBOARD_
root@ubuntu:~# udevadm hwdb --update
root@ubuntu:~# evtest /dev/input/event6
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x1038 product 0x310 version 0x111
Input device name: "Ideazon Zboard USB Gaming Device"
[...]
Event: time 1408993986.205654, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7005b
Event: time 1408993986.205654, type 1 (EV_KEY), code 81 (KEY_KP3), value 1
<----- snap ----->
But, as you can see, it does not work. 'evtest' still reports the key as 'Numpad 3'. Even unplugging and re-plugging the keyboard has no effect. 'udevadm' seems to compile my custom file alright (it complains if I purposefully put a syntax error in it). But I still cannot redefine my keymap.
I do not know if this is a problem of the newer udev itself. But even if it is, Ubuntu should not use it until it actually works. Especially not in a LTS version.
description: | updated |
description: | updated |
description: | updated |
Changed in systemd (Ubuntu): | |
status: | New → Triaged |
Changed in systemd (Ubuntu): | |
status: | Triaged → Won't Fix |
I figured out what the problem was myself: The manpage of udevadm is incorrect. Or at least misleading. It says:
<----- snip ----->
udevadm hwdb [options]
Maintain the hardware database index in /lib/udev/hwdb.bin.
--update
/lib/ udev/hwdb. d/, /etc/udev/hwdb.d/ and store it in
/lib/ udev/hwdb. bin. This should be done after any update to the
Compile the hardware database information located in
source files; it will not be called automatically. The running udev
daemon will detect a new database on its own and does not need to
be notified about it.
<----- snap ----->
The last sentence seems to indicate that compiling the hwdb is the only thing you have to do to make changes take effect. This, however, is NOT true on my system.
Not only did I have to recompile the hwdb but you also reload it: 'udevadm control --reload'.
Then I had to re-connect the keyboard in question.
And *then* I could use the new keymapping.
I therefore suggest to change the sentence in the manpage above to say the exact opposite, refer the user to the 'udevadm control --reload' command and tell them to reconnect the hardware (or reboot, if hotplugging is not supported).