Comment 33 for bug 256429

Revision history for this message
Jon Oberheide (jon-oberheide-deactivatedaccount) wrote :

I've tracked down the source of this issue in hal's hald/linux/device.c. When a new input device is added, it goes through a series of checks to determine what kind of device it is (mouse, keyboard, etc).

In input_test_key(), hal will figure out the size of the bitmask of the devices (num_bits, aka the number of "buttons" this input device has). If num_bits == 1, hal will treat the device as a "button" (eg. power/sleep/hibernate button) rather than a keyboard. Otherwise, it will run further checks to see what kind of keyboard it is (input_test_keyboard(), input_test_keypad()).

This explains exactly why having only a single key on the uinput device (KEY_ENTER) fails to work and adding a second dummy key (KEY_A) fixes the problem. Without the dummy key, the uinput device is treated as a "button" instead of a "keyboard" and does not send the KEY_ENTER event when using libpam-thinkfinger.

I'll email upstream and figure out if there's a proper fix to allow one-button keyboards or if hacking around it is the best approach.