Hi Mike, Very useful information, I'll try and get back for feedback.
NOTE: PORTUGUSE was definitively a typo :), although our Portuguese soccer team isn't doing very well, shame on them. What you asked for (á): http://guacamole.incubator.apache.org/pub/tests/key-event-test.html IE11 on Windows 10 keydown e.keyCode=186 e.which=186 e.keyIdentifier=undefined e.key=Unidentified e.altKey=false e.ctrlKey=false e.altGraphKey=undefined e.metaKey=false e.shiftKey=false e.location=0 e.keyLocation=undefined keyup e.keyCode=186 e.which=186 e.keyIdentifier=undefined e.key=Unidentified e.altKey=false e.ctrlKey=false e.altGraphKey=undefined e.metaKey=false e.shiftKey=false e.location=0 e.keyLocation=undefined keydown e.keyCode=65 e.which=65 e.keyIdentifier=undefined e.key=a e.altKey=false e.ctrlKey=false e.altGraphKey=undefined e.metaKey=false e.shiftKey=false e.location=0 e.keyLocation=undefined keypress e.keyCode=225 e.which=225 e.keyIdentifier=undefined e.key=á e.altKey=false e.ctrlKey=false e.altGraphKey=undefined e.metaKey=false e.shiftKey=false e.location=0 e.keyLocation=undefined keyup e.keyCode=65 e.which=65 e.keyIdentifier=undefined e.key=a e.altKey=false e.ctrlKey=false e.altGraphKey=undefined e.metaKey=false e.shiftKey=false e.location=0 e.keyLocation=undefined Firefox ESR 45.1.1 on Windows 10 keydown e.keyCode=192 e.which=192 e.keyIdentifier=undefined e.key=Dead e.altKey=false e.ctrlKey=false e.altGraphKey=undefined e.metaKey=false e.shiftKey=false e.location=0 e.keyLocation=undefined keydown e.keyCode=65 e.which=65 e.keyIdentifier=undefined e.key=á e.altKey=false e.ctrlKey=false e.altGraphKey=undefined e.metaKey=false e.shiftKey=false e.location=0 e.keyLocation=undefined keypress e.keyCode=0 e.which=225 e.keyIdentifier=undefined e.key=á e.altKey=false e.ctrlKey=false e.altGraphKey=undefined e.metaKey=false e.shiftKey=false e.location=0 e.keyLocation=undefined keyup e.keyCode=192 e.which=192 e.keyIdentifier=undefined e.key=´ e.altKey=false e.ctrlKey=false e.altGraphKey=undefined e.metaKey=false e.shiftKey=false e.location=0 e.keyLocation=undefined keyup e.keyCode=65 e.which=65 e.keyIdentifier=undefined e.key=a e.altKey=false e.ctrlKey=false e.altGraphKey=undefined e.metaKey=false e.shiftKey=false e.location=0 e.keyLocation=undefined Google Chrome 50.0.2661.102 m on WIndows 10 keydowne.keyCode=186e.which=186e.keyIdentifier=U+00BAe.key=undefinede.altKey=falsee.ctrlKey=falsee.altGraphKey=undefinede.metaKey=falsee.shiftKey=falsee.location=0e.keyLocation=undefined keyupe.keyCode=186e.which=186e.keyIdentifier=U+00BAe.key=undefinede.altKey=falsee.ctrlKey=falsee.altGraphKey=undefinede.metaKey=falsee.shiftKey=falsee.location=0e.keyLocation=undefined keydowne.keyCode=65e.which=65e.keyIdentifier=U+0041e.key=undefinede.altKey=falsee.ctrlKey=falsee.altGraphKey=undefinede.metaKey=falsee.shiftKey=falsee.location=0e.keyLocation=undefined keypresse.keyCode=225e.which=225e.keyIdentifier=U+00E1e.key=undefinede.altKey=falsee.ctrlKey=falsee.altGraphKey=undefinede.metaKey=falsee.shiftKey=falsee.location=0e.keyLocation=undefined keyupe.keyCode=65e.which=65e.keyIdentifier=U+0041e.key=undefinede.altKey=falsee.ctrlKey=falsee.altGraphKey=undefinede.metaKey=falsee.shiftKey=falsee.location=0e.keyLocation=undefined Edge on WIndows 10 keydown e.keyCode=186 e.which=186 e.keyIdentifier=undefined e.key=Unidentified e.altKey=false e.ctrlKey=false e.altGraphKey=undefined e.metaKey=false e.shiftKey=false e.location=0 e.keyLocation=undefined keyup e.keyCode=186 e.which=186 e.keyIdentifier=undefined e.key=Unidentified e.altKey=false e.ctrlKey=false e.altGraphKey=undefined e.metaKey=false e.shiftKey=false e.location=0 e.keyLocation=undefined keydown e.keyCode=65 e.which=65 e.keyIdentifier=undefined e.key=a e.altKey=false e.ctrlKey=false e.altGraphKey=undefined e.metaKey=false e.shiftKey=false e.location=0 e.keyLocation=undefined keypress e.keyCode=225 e.which=225 e.keyIdentifier=undefined e.key=á e.altKey=false e.ctrlKey=false e.altGraphKey=undefined e.metaKey=false e.shiftKey=false e.location=0 e.keyLocation=undefined keyup e.keyCode=65 e.which=65 e.keyIdentifier=undefined e.key=a e.altKey=false e.ctrlKey=false e.altGraphKey=undefined e.metaKey=false e.shiftKey=false e.location=0 e.keyLocation=undefined http://guacamole.incubator.apache.org/pub/tests/guac/keyboard-test.html IE11 on WIndows 10 guacamole keydown 0x61 U+0061 LATIN SMALL LETTER A guacamole keyup 0x61 U+0061 LATIN SMALL LETTER A Firefox ESR 45.1.1 on Windows 10 guacamole keydown 0xe1 U+00E1 LATIN SMALL LETTER A WITH ACUTE guacamole keyup 0xe1 U+00E1 LATIN SMALL LETTER A WITH ACUTE Google Chrome 50.0.2661.102 m on WIndows 10 guacamolekeydown0xe1U+00E1 LATIN SMALL LETTER A WITH ACUTE guacamolkeyup0xe1U+00E1 LATIN SMALL LETTER A WITH ACUTE Edge on WIndows 10 guacamole keydown 0x61 U+0061 LATIN SMALL LETTER A guacamole keyup 0x61 U+0061 LATIN SMALL LETTER A Kind regards, João On Sun, Jun 19, 2016 at 6:18 AM, Mike Jumper <mike.jum...@guac-dev.org> wrote: > On Sat, Jun 18, 2016 at 4:28 PM, Joao Alexandre > <jalexandre1...@gmail.com> wrote: >> Hi Mike, >> >> Sorry, I've sent a message without being finished. >> >> I've always been a polite guy, but my 52 years old is driving me impatient, >> so I'm really sorry for my precipitated "bump myself". >> >> First things first, thank you Mike for this detailed, time consuming and >> enlightened reply. >> > > No problem! > >> Indeed yesterday, I've made a git clone of both Guacamole server and client, >> as I've found the files you've mentioned at "src/protocols/rdp/keymaps". >> I've looked at all of them, made a new one based on the French or Italian >> files, I really don't recall, and altered a Makefile so that the >> "pt_pt_qwerty.keymap" would get compiled. After I tried to test it but then >> I've realized that the web client interface didn't have the option to choose >> my new keyboard, and I could not find out to do it. > > Ah, OK. > >> Next, I've copied my new Portuguese keymap file over the failsafe.keymap, >> that I thought it was the unicode option in the web interface. I tried these >> combination but I had several mismatch keys. I also search in Google for >> keyboard scan codes, but I could find any information useful, at least to my >> knowledge, so I got frustrated. The Portuguese keyboard has more keys than >> the English one, and at the end of the day I've quit. >> > > Figuring out the proper scancodes for keys which are missing from the > English keyboard will be difficult, but not impossible. They must > exist if such keyboards work with RDP at all, so it's just a matter of > time. > >> Today after reading your post, I've decided to give it another try, I still >> have doubts. >> >> Forme the Portuguese keymap file should look like this: >> >> parent "base" >> name "pt-pt-qwerty" >> freerdp "KBD_PORTUGUSE" >> >> # >> # Basic keys >> # >> >> map -altgr -shift 0x29 0x02..0x0D ~ "\1234567890'«" >> map -altgr -shift 0x10..0x1B ~ "qwertyuiop+'" >> map -altgr -shift 0x1E..0x28 0x2B ~ "asdfghjklçº~" > > Looks good so far, though "KBD_PORTUGUSE" should be "KBD_PORTUGUESE". > >> map -altgr -shift 0x56 0x2C..0x35 ~ "<zxcvbnm,.-" >> (the last character of the second row is a dead key, the accent character in >> "a" letter like á) >> > > Dead keys may be a problem. We've had issues supporting these in the > past, as it varies widely by browser and OS how the resulting key > events are exposed to JavaScript (if at all). > > I'd be interested to hear what you see when you type "á" using dead > keys while on our JavaScript key event test page: > > http://guacamole.incubator.apache.org/pub/tests/key-event-test.html > > As well as what happens on the Guacamole key event test page: > > http://guacamole.incubator.apache.org/pub/tests/guac/keyboard-test.html > >> map -altgr +shift 0x29 0x02..0x0D ~ "|!"#$%&/()=?»" >> map -altgr +shift 0x10..0x1B ~ "QWERTYUIOP*`" >> map -altgr +shift 0x1E..0x28 0x2B ~ "ASDFGHJKLçª^" >> map -altgr +shift 0x56 0x2C..0x35 ~ ">ZXCVBNM;:_" >> >> # >> # Keys requiring AltGr >> # >> >> map +altgr -shift 0x12 ~ "€" >> map +altgr -shift 0x09 ~ "[" >> map +altgr -shift 0x0A ~ "]" >> map +altgr -shift 0x03 ~ "@" >> map +altgr -shift 0x04 ~ "£" >> map +altgr -shift 0x05 ~ "§" >> map +altgr -shift 0x08 ~ "{" >> map +altgr -shift 0x0B ~ "}" >> map +altgr -shift 0x1A ~ "¨" >> >> Those this looks OK to you? >> > > In general, yes, but I don't have a Portuguese keyboard to compare > against. If these mappings seem to work for you thus far (with the > exception of dead keys), then I'd say you're on the right track. > >> Yesterday, I've tried a similar setup on failsafe.keymap supposing it was >> the unicode option in the web client, but some keys didn't work like 0x29 \ >> between others. >> > > The "failsafe.keymap" is a barebones keymap which defines only the > keys common to most layouts which are not available via Unicode. The > keymap system built into Guacamole's RDP support will default to > sending Unicode events (which are distinct from key events, but > supported by Windows and RDP) if there are no combinations of > scancodes which can produce the desired effect. By not defining > virtually any keys, the failsafe keymap forces use of Unicode events > for everything. > >> Last questions: >> >> - does failsafe.keymap correspond to unicode? > > Yes, in that it forces the Guacamole RDP keymap system to fallback to > Unicode events. This can be problematic in some cases, however, > especially if the RDP server does not implement Unicode events (like > XRDP and some virtualization software). > >> - Is it easy to add a new keyboard option in the web client? >> > > Yes. All available options for the admin interface are defined using > JSON within guacamole-ext [1]. You would need to add your option to > that JSON definition. > > Once that's done, you'll need to add a translation string at least for > English so that the interface knows what to display when rendering the > option [2]. > >> Once more, thank you. >> > > Sure thing. Please give it another shot, and definitely come back if > you have any further questions. > > It would be wonderful to get some more keymaps added to the RDP > support, and hopefully use this to drive development which gets dead > keys working correctly ... if that is possible at all. > > Thanks, > > - Mike > > [1] > https://github.com/apache/incubator-guacamole-client/blob/e8232315ce06fbb480ebf5785ea866577bd3e994/guacamole-ext/src/main/resources/org/apache/guacamole/protocols/rdp.json#L63-L76 > [2] > https://github.com/apache/incubator-guacamole-client/blob/e8232315ce06fbb480ebf5785ea866577bd3e994/guacamole/src/main/webapp/translations/en.json#L337-L344