usb/144414: Apple "Fn" key doesn't work properly

Steven Noonan steven at uplinklabs.net
Sun Mar 14 14:10:05 UTC 2010


The following reply was made to PR usb/144414; it has been noted by GNATS.

From: Steven Noonan <steven at uplinklabs.net>
To: Hans Petter Selasky <hselasky at c2i.net>
Cc: freebsd-usb at freebsd.org, freebsd-gnats-submit at freebsd.org, 
	Christoph Langguth <christoph at rosenkeller.org>
Subject: Re: usb/144414: Apple "Fn" key doesn't work properly
Date: Sun, 14 Mar 2010 06:01:39 -0800

 On Sun, Mar 14, 2010 at 5:48 AM, Hans Petter Selasky <hselasky at c2i.net> wro=
 te:
 > On Sunday 14 March 2010 14:22:33 Steven Noonan wrote:
 >> On Sun, Mar 14, 2010 at 3:01 AM, Hans Petter Selasky <hselasky at c2i.net>
 > wrote:
 >> > On Sunday 14 March 2010 11:30:04 Steven Noonan wrote:
 >> >> The following reply was made to PR usb/144414; it has been noted by
 >> >> GNATS.
 >> >>
 >> >> From: Steven Noonan <steven at uplinklabs.net>
 >> >> To: perryh at pluto.rain.com
 >> >> Cc: freebsd-usb at freebsd.org, freebsd-gnats-submit at freebsd.org
 >> >> Subject: Re: usb/144414: Apple "Fn" key doesn't work properly
 >> >> Date: Sun, 14 Mar 2010 03:26:19 -0700
 >> >>
 >> >> =C2=A0On Thu, Mar 4, 2010 at 12:01 AM, Steven Noonan <steven at uplinkla=
 bs.net>
 >> >> =C2=A0wrot=3D
 >> >>
 >> >> =C2=A0e:
 >> >> =C2=A0> On Wed, Mar 3, 2010 at 11:00 PM, Steven Noonan
 >> >> <steven at uplinklabs.net> > wr=3D
 >> >>
 >> >> =C2=A0ote:
 >> >> =C2=A0>> On Wed, Mar 3, 2010 at 10:36 PM, =3DC2=3DA0<perryh at pluto.rai=
 n.com>
 >> >> wrote: >>> Steven Noonan <steven at uplinklabs.net> wrote:
 >> >> =C2=A0>>>> Interestingly, my tilde key doesn't work either (though th=
 e key
 >> >> =C2=A0>>>> press is detected, no character shows when the key is pres=
 sed).
 >> >> =C2=A0>>>
 >> >> =C2=A0>>> Any chance it is configured as a "dead" key? =3DC2=3DA0If y=
 ou press
 >> >> =C2=A0>>> tilde followed by n do you get an n with a tilde over it?
 >> >> =C2=A0>>
 >> >> =C2=A0>> Nope. It simply does nothing in the console.
 >> >> =C2=A0>>
 >> >> =C2=A0>> But in X11, it does something very odd. Shift+Tilde Key give=
 s me
 >> >> '>', >> and Tilde Key gives me '<'. And Alt+Tilde gives me... What? I
 >> >> don't >> even know what action. It's grabbing some arbitrary command =
 in
 >> >> my >> .bash_history. It gave me the first item in my .bash_history th=
 e
 >> >> first >> time I tried it. Then I tried an arbitrary command ("echo"),
 >> >> and then >> Alt+Tilde gave me the second command in my .bash_history.
 >> >> Whaa?
 >> >>
 >> >> =C2=A0Any more ideas/news on this from anyone?
 >> >>
 >> >> =C2=A0The tilde key thing is especially irritating.
 >> >
 >> > static uint8_t
 >> > ukbd_apple_swap(uint8_t keycode) {
 >> > =C2=A0 =C2=A0 =C2=A0 =C2=A0switch (keycode) {
 >> > =C2=A0 =C2=A0 =C2=A0 =C2=A0case 0x35: return 0x64;
 >> > =C2=A0 =C2=A0 =C2=A0 =C2=A0case 0x64: return 0x35;
 >> > =C2=A0 =C2=A0 =C2=A0 =C2=A0default: return keycode;
 >> > =C2=A0 =C2=A0 =C2=A0 =C2=A0}
 >> > }
 >> >
 >> > Can you try to change the function above in ukbd.c to only return
 >> > keycode? Any difference?
 >>
 >> Yep, commenting the two case lines brought my tilde key back. Any idea
 >> what the ukbd_apple_swap() function was _supposed_ to be doing?
 >>
 >> Also, there's only one thing left (input-wise) that I can't get to
 >> work, and that's the 'delete' key (Fn+Backspace). I'm pretty certain
 >> that it's not a problem with Fn+Backspace failing to map to Delete,
 >> because my non-Mac i386 box has the same problem.
 >>
 >> Everything I read online keeps saying to muck with an .inputrc file
 >> (for bash, anyway), but I haven't been able to get it to work. Places
 >> I've looked have said to add this to .inputrc:
 >>
 >> "\e[3~": delete-char
 >>
 >> But this seems to have no effect (and I tried bind -f .inputrc in case
 >> my INPUTRC environment variable wasn't working). Is there something
 >> FreeBSD-specific I'm not seeing, or what?
 >>
 >> - Steven
 >>
 >
 > Hi Steven,
 >
 > Can you talk this over with Christoph and send me a patch when you agreed=
 ?
 > He's the one that made the Apple-SWAP key patch. Meanwhile I suggest the
 > following patch:
 >
 > =3D=3D=3D=3D //depot/projects/usb/src/sys/dev/usb/input/ukbd.c#47 -
 > src/sys/dev/usb/input/ukbd.c =3D=3D=3D=3D
 > @@ -896,8 +896,7 @@
 > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0hid_=
 input, 0, &sc->sc_loc_apple_fn, &flags,
 > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&tem=
 p_id)) {
 > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
 =A0 =C2=A0if (flags & HIO_VARIABLE)
 > - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 sc->sc_flags |=3D UKBD_FLAG_APPLE_FN |
 > - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 UKBD_FLAG_APPLE_SWAP;
 > + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 sc->sc_flags |=3D UKBD_FLAG_APPLE_FN;
 > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
 =A0 =C2=A0DPRINTFN(1, "Found Apple FN-key\n");
 > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
 =A0 =C2=A0apple_keys =3D 1;
 > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
 =A0 =C2=A0sc->sc_kbd_id =3D temp_id;
 >
 >
 > The hardware that Christoph was using had an Eject-key, while yours didn'=
 t. I
 > think the patch above will make both cases work.
 >
 > Christoph, do you have any comments?
 >
 > http://p4db.freebsd.org/fileViewer.cgi?FSPC=3D//depot/projects/usb/src/sy=
 s/dev/usb/input/ukbd.c&REV=3D47
 >
 
 Not quite true, my keyboard _does_ have an Eject key. The code doesn't
 detect it though.
 
 - Steven


More information about the freebsd-usb mailing list