[maemo-developers] Modifier key doesn't produce events in X server - how to modify mapping?

From: Matthew Exon 20173196 at exon.name
Date: Sun Feb 10 21:05:09 EET 2008
Hi,

I'm only trying to do one simple thing here: I have a ThinkOutside
Stowaway bluetooth keyboard (German layout), and I'd like to use it with
my N810.  But I'm having real trouble.

My problem is that there is one key that never generates events in the X
server (as far as I can see in xev).  This is a green "Function" key
which provides access to most of the interesting symbols.

As an easier warmup problem, I managed to get the keyboard working on my
normal desktop machine running Debian Etch.  I made an xkb file to
describe all the bindings, including making my green function key an
"alt-greek" key.  This works fine.  If I look in xev, I can see
something like this when I press it:

KeyPress event, serial 25, synthetic NO, window 0x1e00001,
    root 0x4c, subw 0x0, time 75918074, (3,25), root:(81,129),
    state 0x0, keycode 207 (keysym 0xfe03, ISO_Level3_Shift),
same_screen YES,
    XKeysymToKeycode returns keycode: 113
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

Before I made my new bindings, it looked like this on the desktop:

KeyPress event, serial 28, synthetic NO, window 0x3c00001,
    root 0x4c, subw 0x0, time 4200899662, (111,93), root:(189,197),
    state 0x10, keycode 207 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

But on the N810, with or without my bindings, I get nothing at all when
I press this key (the others are all fine).

It's the number "207" that interests me here.  Using hcidump on the
desktop, I can see the hex scancode 0x73 being sent over the bluetooth
interface.  From watching other characters, I know that these are USB
HID scancodes.  Something, somewhere, is translating 0x73 to 207 on my
desktop machine and turning it into an X event.  I'm pretty sure it's
nothing to do with xkb, because the event turns up in xev regardless of
whether the active xkb mapping knows anything about it.

So my question is, what is that thing?  It must be broken on the N810.

I got pretty excited when I found evdev_key.c, and saw a big hard-coded
table that had a "NoSymbol" in the 0x73 position where my modifier key
should be.  But then I found a whole bunch of different C files with
similar hard-coded tables, and came to the conclusion that these were
all doing the same job as xkb, and xkb was probably overriding them.
After all, when I had no mapping for that key, I got "NoSymbol" in my
xev output, which is the worst those tables can do.  On the N810, I
don't even get that.  So the problem must lie before it gets to those
tables.

I do notice that the N810 uses the evdev keycodes file, whereas the
desktop appears to use xfree86.  There's no 207 in the evdev file.  And
while I do have an evdev package installed on the desktop, the keyboard
appears to use the "kbd" driver rather than the "evdev" driver, so it
fits if evdev doesn't know about the key where kbd does.  So I tried
simply adding it to the evdev keycodes file.  But that didn't work,
presumably because the file reflects some table compiled into the server
elsewhere.  I looked through files that seemed to have something to do
with evdev or key or kbd, but nothing seemed to translate an 0x73 to a
207 (although plenty translated 0x73 to NoSymbol).

I'm now very confused, so I'd be grateful if anyone could put me straight!

Thanks,
Mat

More information about the maemo-developers mailing list