Am Dienstag, den 18.10.2005, 09:00 +0100 schrieb Jochen Voss: > Dear Stelian, > > On Tue, Oct 18, 2005 at 07:37:19AM +0200, Stelian Pop wrote: > > A modified and both technicaly and aestheticaly correct patch was > > already merged in the latest stable kernel. But it requires a modified X > > input driver in order to work. > > > > Wasn't this already discussed in > > http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=307327 ? > Sorry, this had escaped my mind. But I remember now. > > Despite being correct, does the new method also work? Did anybody > get, for example, the combination fn-up to produce pageup with the new > system? Is that patch to the X input driver publicly available?
First of all, I'm writing about the situation on my Fedora Rawhide system. It's most likely the same on Debian systems. This change in 2.6.14 doesn't work on console at the moment. The function key is shown through showkey with keycode 464. But loadkeys and dumpkeys only support keycodes up to 255. The package version of kbd is 1.12 with some unrelated patches. While adding a line "plain keycode 464 = CtrlR" to my keymap and trying to load it with "loadkeys -u" I get following error message: "addkey called with bad index 464" Next I applied the attached patch to kbd to see if it works. Partially successful, because I've got loadkeys to accept my modified keymap. But two things are going wrong: 1. After login I get four times the message KDSKBENT: Invalid argument failed to bind key 256 to value 638 2. Adding lines like "ctrlr keycode 103 = PageUp" to the keymap works, but has no effect. PageUp, PageDown, Home and End are not triggered by pressing fn with cursor keys, despite I see their entries with dumpkeys (for grepping use Select, Next, Find, Prior). Somebody else new ideas? Frank
de-latin1-nodeadkeys-powerbook56.map.gz
Description: GNU Zip compressed data
diff -upr orig/kbd-1.12/src/dumpkeys.c kbd-1.12/src/dumpkeys.c --- orig/kbd-1.12/src/dumpkeys.c 2004-01-16 20:45:31.000000000 +0100 +++ kbd-1.12/src/dumpkeys.c 2005-10-18 17:46:59.000000000 +0200 @@ -47,7 +47,9 @@ has_key(int n) { static void find_nr_keys(void) { - nr_keys = (has_key(255) ? 256 : has_key(127) ? 128 : 112); + nr_keys = (has_key(511) ? 512 : + has_key(255) ? 256 : + has_key(127) ? 128 : 112); } static void diff -upr orig/kbd-1.12/src/loadkeys.y kbd-1.12/src/loadkeys.y --- orig/kbd-1.12/src/loadkeys.y 2004-01-16 22:51:25.000000000 +0100 +++ kbd-1.12/src/loadkeys.y 2005-10-18 17:49:38.000000000 +0200 @@ -32,7 +32,7 @@ #endif #undef NR_KEYS -#define NR_KEYS 256 +#define NR_KEYS 512 /* What keymaps are we defining? */ char defining[MAX_NR_KEYMAPS];