All

It's a brave soul that takes on these keyboard issues. Vincent DEDIEU's
contribution raises a question for me:

Why is the keyboard map held in Xvnc (where the frame buffer is), and
not in vncviewer (where the keyboard *IS*) ?  I can connect to my Xvnc
session from several different machines, each with a different keyboard;
how can one keymap be correct for all of them?

I'm afraid this is an idle suggestion borne out of much head scratching
over the path of a keypress to an application. It occurs to me the X11
designers had great insight to introduce X_keysyms, and tragicly dim
sight to then also pass the keycode to the X client. I suspect a clean
answer would be for Xvnc and vncviewer to talk in terms of VNC_keysyms,
and these would have to be a superset of keysyms from the various
platforms: X11, MSwindows, Mac...



Vincent DEDIEU wrote:
> 
> Hello,
> 
> I noticed a very strange keyboard behavior with the Xvnc.
> 
> I am using a French keyboard. When I press the key 'asterisk' (located at
> the left of <return> on a French keyboard), I get an '*'. OK. But if I run
> the xev utility to know keyboard events generated by this, I get the
> following:
>    pressing <Shift Left>
>    pressing <8> (above U and I)
>    releasing <8>
>    releasing <Shift Left>
> 
> This very strange behavior is inherited from a US keyboard (to get an
> asterisk with an US keyboard, <Shift><8> is pressed).
> 
> You can say, this behavior is not very important because in final when <*>
> is pressed, an <*> is got by an X application (xterm, kde ...).
> 
> But some X applications take care to the real keyboard event (they use
> keycode instead of keysym). And in this case only a US keyboard can be
> correctly use with the VNC server.
> 
> To solve this problem I modified the Xvnc source code (where a US keymap is
> hard coded). I added a French and a UK keymap. Furthermore I specificied
> keysyms use by the numpad. (Then the xmodmap table is entirely filled by the
> Xvnc daemon itself).
> 
> To use this, one of the following compilation option must be set (in
> /config/cf/xfree86.cf, variable Xfree86ServerDefines):
>    -DNEW_US_KEYBOARD
>    -DNEW_FR_KEYBOARD
>    -DNEW_UK_KEYBOARD
> 
> But I am not an expert in C language. So I think my modification could be
> improved:
> 
>    1 - I used a compilation option, but to make life easiest I think it will
> be more elegant to offer a run-time option (Xvnc :1 -kbd fr ...) to set the
> correct keymap.
> 
>   2 - The main difference between a vncviewer and the Linux box (if Xvnc is
> used on linux) are the keycodes. And when an X application is based on
> keycodes (instead of keysym), nothing works. So it could be a good idea to
> simulate a PC keyboard with a correct kbdMap in kbdptr.c.
> 
> Please see below my 2 patches.
> 
> Vincent
> 
> ============= patching hw/vnc/kbdptr.c =========
> --- kbdptr.c.orig Wed Feb  7 10:29:57 2001
> +++ kbdptr.c Fri Feb  9 14:56:53 2001
> @@ -79,10 +79,13 @@
>      XK_Alt_R,  NoSymbol,
>  #define ALT_R_KEY_CODE  (MIN_KEY_CODE + 7)
> 
> -    /* Standard US keyboard */
> 
>      XK_space,  NoSymbol,
> -    XK_0,  XK_parenright,
> +
> +#ifdef NEW_US_KBD
> +    /* Standard US keyboard */
> +
> +    XK_grave,  XK_asciitilde,
>      XK_1,  XK_exclam,
>      XK_2,  XK_at,
>      XK_3,  XK_numbersign,
> @@ -92,6 +95,7 @@
>      XK_7,  XK_ampersand,
>      XK_8,  XK_asterisk,
>      XK_9,  XK_parenleft,
> +    XK_0,  XK_parenright,
> 
>      XK_minus,  XK_underscore,
>      XK_equal,  XK_plus,
> @@ -99,11 +103,85 @@
>      XK_bracketright, XK_braceright,
>      XK_semicolon, XK_colon,
>      XK_apostrophe, XK_quotedbl,
> -    XK_grave,  XK_asciitilde,
>      XK_comma,  XK_less,
>      XK_period,  XK_greater,
>      XK_slash,  XK_question,
>      XK_backslash, XK_bar,
> +#endif
> +
> +#ifdef NEW_UK_KBD
> +    /* UK keyboard */
> +
> +    XK_grave,  XK_notsign,
> +    XK_1,  XK_exclam,
> +    XK_2,  XK_quotedbl,
> +    XK_3,  XK_sterling,
> +    XK_4,  XK_dollar,
> +    XK_5,  XK_percent,
> +    XK_6,  XK_asciicircum,
> +    XK_7,  XK_ampersand,
> +    XK_8,  XK_asterisk,
> +    XK_9,  XK_parenleft,
> +    XK_0,  XK_parenright,
> +
> +    XK_minus,  XK_underscore,
> +    XK_equal,  XK_plus,
> +
> +    XK_bracketleft, XK_braceleft,
> +    XK_bracketright, XK_braceright,
> +
> +    XK_semicolon, XK_colon,
> +    XK_apostrophe, XK_at,
> +    XK_comma,  XK_less,
> +    XK_period,  XK_greater,
> +    XK_slash,  XK_question,
> +    XK_backslash, XK_bar,
> +    XK_numbersign, XK_asciitilde,
> +#endif
> +
> +#ifdef NEW_FR_KBD
> +    /* French Keyboard */
> +
> +    XK_twosuperior, NoSymbol,
> +    XK_ampersand, XK_1,
> +    XK_eacute,   XK_2,
> +    XK_quotedbl, XK_3,
> +    XK_apostrophe, XK_4,
> +    XK_parenleft, XK_5,
> +    XK_minus,  XK_6,
> +    XK_egrave,  XK_7,
> +    XK_underscore, XK_8,
> +    XK_ccedilla, XK_9,
> +    XK_agrave,  XK_0,
> +    XK_parenright, XK_degree,
> +    XK_equal,  XK_plus,
> +
> +    XK_dead_circumflex, XK_diaeresis,
> +    XK_dollar,  XK_sterling,
> +
> +    XK_ugrave,  XK_percent,
> +    XK_asterisk, XK_mu,
> +
> +    XK_less,  XK_greater,
> +    XK_comma,  XK_question,
> +    XK_semicolon, XK_period,
> +    XK_colon,  XK_slash,
> +    XK_exclam,  XK_section,
> +
> +/* special symbol accessed by AltGr */
> +    XK_asciitilde, NoSymbol,
> +    XK_numbersign, NoSymbol,
> +    XK_braceleft, NoSymbol,
> +    XK_bracketleft, NoSymbol,
> +    XK_bar,  NoSymbol,
> +    XK_grave,  NoSymbol,
> +    XK_backslash, NoSymbol,
> +    XK_asciicircum, NoSymbol,
> +    XK_at,  NoSymbol,
> +    XK_bracketright, NoSymbol,
> +    XK_braceright, NoSymbol,
> +    XK_currency, NoSymbol,
> +#endif
> 
>      XK_a,  XK_A,
>      XK_b,  XK_B,
> @@ -162,6 +240,37 @@
>      XK_F11,  NoSymbol,
>      XK_F12,  NoSymbol,
> 
> +/* Num Pad */
> +
> +    XK_Num_Lock, NoSymbol,
> +    XK_KP_Divide, NoSymbol,
> +    XK_KP_Multiply, NoSymbol,
> +    XK_KP_Subtract, NoSymbol,
> +    XK_KP_Home,  NoSymbol,
> +    XK_KP_Up,  NoSymbol,
> +    XK_KP_Page_Up, NoSymbol,
> +    XK_KP_Add,  NoSymbol,
> +    XK_KP_Left,  NoSymbol,
> +    XK_KP_Begin, NoSymbol,
> +    XK_KP_Right, NoSymbol,
> +    XK_KP_End,  NoSymbol,
> +    XK_KP_Down,  NoSymbol,
> +    XK_KP_Page_Down, NoSymbol,
> +    XK_KP_Enter, NoSymbol,
> +    XK_KP_Insert, NoSymbol,
> +    XK_KP_Delete, NoSymbol,
> +    XK_KP_7,  NoSymbol,
> +    XK_KP_8,  NoSymbol,
> +    XK_KP_9,  NoSymbol,
> +    XK_KP_4,  NoSymbol,
> +    XK_KP_5,  NoSymbol,
> +    XK_KP_6,  NoSymbol,
> +    XK_KP_1,  NoSymbol,
> +    XK_KP_2,  NoSymbol,
> +    XK_KP_3,  NoSymbol,
> +    XK_KP_0,  NoSymbol,
> +    XK_KP_Decimal, NoSymbol,
> +
>      /* Plus blank ones which can be filled in using xmodmap */
> 
>  };
> 
> ============= patching hw/vnc/init.c =========
> 
> --- init.c.orig Thu Feb  8 17:29:47 2001
> +++ init.c Thu Feb  8 17:31:19 2001
> @@ -858,6 +858,18 @@
>           "instead)\n");
>      ErrorF("-localhost             only allow connections from
> localhost\n");
>      ErrorF("-inetd                 Xvnc is launched by inetd\n");
> +#if defined (NEW_US_KBD) || defined (NEW_UK_KBD) || defined (NEW_FR_KBD)
> +    ErrorF("\nNote: embedded keyboard mapping: ");
> +#if defined (NEW_US_KBD)
> +    ErrorF("US\n");
> +#endif
> +#if defined (NEW_UK_KBD)
> +    ErrorF("UK\n");
> +#endif
> +#if defined (NEW_FR_KBD)
> +    ErrorF("FR\n");
> +#endif
> +#endif
>      exit(1);
>  }
> ---------------------------------------------------------------------
> To unsubscribe, send a message with the line: unsubscribe vnc-list
> to [EMAIL PROTECTED]
> See also: http://www.uk.research.att.com/vnc/intouch.html
> ---------------------------------------------------------------------

-- 

Regards,  Mark.
---------------------------------------------------------------------
To unsubscribe, send a message with the line: unsubscribe vnc-list
to [EMAIL PROTECTED]
See also: http://www.uk.research.att.com/vnc/intouch.html
---------------------------------------------------------------------

Reply via email to