Hi I assume you are using XKBFILE? (Testing without XKBFILE could perhaps be relevant too, but that will probably reveal other issues so let's forget that for now.)
Is the keyboard layout detected correctly or do you specify it with -k? Are you using 0x00000411 or 0xE0010411? Why and why not? Could keyboardType and keyboardSubType in principle be determined automatically based on the keyboardLayout code? Or do we need a way to specify them? Or do you have any idea how they could be detected on an X system? A general comment to your analysis: All keyboard layout processing is usually done on the RDP server side based on some kind of key location "scan codes" independent of which symbol is printed on the key and how it should be processed. Local handling of layouts on the client side is thus not relevant for xfreerdp. The client do however tell the server which keyboard layout it recommends using ... but IIRC the server only uses it when creating a new session, not when connecting to an existing session. I have found it convenient to enable multiple layouts in the servers configuration so it shows a keyboard layout indicator. I take from your analysis that the key known by X as "AE13" should be sent as 0x7D over the protocol. A redefinition of VK_OEM_5 will however break other keyboard layouts. The existing FreeRDP code is in my opinion unfortunate. VK codes can not be used the way we try to use them; they are something else at a different level. I have some proposed changes in this area on https://github.com/FreeRDP/FreeRDP/pull/520 . /Mads On 03/27/2012 10:08 AM, Seiji T wrote: > Just realized attachment is not allowed. Here is the patch, I meant to > attach in the previous email. > > --BEGIN-- > diff --git a/libfreerdp-core/gcc.c b/libfreerdp-core/gcc.c > index 01ed01a..c8014cf 100644 > --- a/libfreerdp-core/gcc.c > +++ b/libfreerdp-core/gcc.c > @@ -659,9 +659,12 @@ void gcc_write_client_core_data(STREAM* s, > rdpSettings* settings) > stream_write_zero(s, 32 - clientNameLength - 2); > xfree(clientName); > > - stream_write_uint32(s, settings->kbd_type); /* keyboardType */ > - stream_write_uint32(s, settings->kbd_subtype); /* keyboardSubType */ > - stream_write_uint32(s, settings->kbd_fn_keys); /* keyboardFunctionKey */ > + //stream_write_uint32(s, settings->kbd_type); /* keyboardType */ > + //stream_write_uint32(s, settings->kbd_subtype); /* keyboardSubType */ > + //stream_write_uint32(s, settings->kbd_fn_keys); /* keyboardFunctionKey > */ > + stream_write_uint32(s, 7); /* keyboardType */ > + stream_write_uint32(s, 2); /* keyboardSubType */ > + stream_write_uint32(s, 12); /* keyboardFunctionKey */ > > stream_write_zero(s, 64); /* imeFileName */ > > diff --git a/libfreerdp-locale/keyboard_layout.c > b/libfreerdp-locale/keyboard_layout.c > index ff2ca53..240233f 100644 > --- a/libfreerdp-locale/keyboard_layout.c > +++ b/libfreerdp-locale/keyboard_layout.c > @@ -691,7 +691,7 @@ const uint32 VIRTUAL_KEY_CODE_TO_RDP_SCANCODE_TABLE[256] = > 0x00, > 0x00, > 0x1A, /* VK_OEM_4 */ > - 0x2B, /* VK_OEM_5 */ > + 0x7D, /* VK_OEM_5 */ > 0x1B, /* VK_OEM_6 */ > 0x28, /* VK_OEM_7 */ > 0x1D, /* VK_OEM_8 */ > diff --git a/libfreerdp-locale/keyboard_xkb.c > b/libfreerdp-locale/keyboard_xkb.c > index 91d2ecf..6a6ccc4 100644 > --- a/libfreerdp-locale/keyboard_xkb.c > +++ b/libfreerdp-locale/keyboard_xkb.c > @@ -257,7 +257,7 @@ VIRTUAL_KEY_CODE_TO_XKB_KEY_NAME > VIRTUAL_KEY_CODE_TO_XKB_KEY_NAME_TABLE[256] = > { 0, "", "" }, > { 0, "", "" }, > { VK_OEM_4, "AD11", "" }, /* VK_OEM_4 */ > - { VK_OEM_5, "BKSL", "" }, /* VK_OEM_5 */ > + { VK_OEM_5, "AE13", "" }, /* VK_OEM_5 */ > { VK_OEM_6, "AD12", "" }, /* VK_OEM_6 */ > { VK_OEM_7, "AC11", "" }, /* VK_OEM_7 */ > { > --END-- > > On Tue, Mar 27, 2012 at 4:33 PM, Seiji T<mlb...@gmail.com> wrote: >> Mads, >> >> As you have stated, kbd_* were the cause of the problem (Windows RDP >> client not mapping scancode 0x7d correctly to vk_code OEM_5). Thanks >> for pointing this out. >> >> My colleague checked the values for kbd_* in rdesktop and by changing >> these values in FreeRDP, pressing the "\|" keycap resulted in "\" being >> shown on the RDP server (as it should). Also confirmed with YAMY that >> the RDP server received scancode "0x7D" (as it should) and Windows >> mapped this to vk_code "OEM_5" (as it should). >> >> We're in the process of checking other keycaps but in the meantime, I >> would like to discuss how we should merge these changes into the main >> source. >> >> Attached is the patch against the current source. We needed a quick way >> to figure out the problem and therefore it cannot be applied to the >> source. If you did, it would most likely break the US keyboard layout. >> So how should we merge these changes to the main source? >> >> Regards, >> Seiji Tokunaga >> >> On Fri, Mar 23, 2012 at 5:28 AM, Mads Kiilerich<m...@kiilerich.com> wrote: >>> n 03/21/2012 07:01 AM, Seiji T wrote: >>>> >>>> Dear all, >>>> >>>> I am trying to get 109 Japanese Keyboard (*1) to work with freerdp without >>>> success. >>> >>> >>> I guess a part of the real could be that the FreeRDP settings for kbd_type >>> and kbd_subtype and kbd_fn_keys always are 0 when xfreerdp sends Client Core >>> Data in gcc_write_client_core_data . >>> >>> That is according to http://msdn.microsoft.com/en-us/library/cc240510 not >>> valid, and for japanese keyboards you might have to use keyboardType 7. That >>> could in principle also change the rdp scan codes completely. >>> >>> I don't know if correct values for these settings can be determined from X >>> (or windows) information somehow. >>> >>> If mstsc from windows works correctly then you could try to dump and analyze >>> what it sends so we know how we could make it work. >>> >>> /Mads > > ------------------------------------------------------------------------------ > This SF email is sponsosred by: > Try Windows Azure free for 90 days Click Here > http://p.sf.net/sfu/sfd2d-msazure > _______________________________________________ > Freerdp-devel mailing list > Freerdp-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/freerdp-devel ------------------------------------------------------------------------------ This SF email is sponsosred by: Try Windows Azure free for 90 days Click Here http://p.sf.net/sfu/sfd2d-msazure _______________________________________________ Freerdp-devel mailing list Freerdp-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freerdp-devel