Mike, I've done it, only with your help, please add the attached file as the keymap for the Portuguese European keyboard to Guacamole's project.
All the keys are working, even the dead keys, tested on a Windows 10 machine with IE11 and Firefox ESR 45.1.1, at least. I've added the Portuguese keyboard option to rdp.json and en.json, recompiled, installed the new guacamole.war and guacamole-auth-jdbc-mysql-0.9.9.jar (as I'm using MySql database authentication), and all worked OK, Portuguese (Qwerty) as an option in Edit Connection -> Keyboard layout, just perfect. I had just one problem with the database, as this one was created with the published binaries sql scripts, and I'm now using the git version (git clone https://github.com/apache/incubator-guacamole-server and git clone https://github.com/apache/incubator-guacamole-client). As this was a test setup, with only 2 connections, I dropped the old database and created a new one using the new scripts. The error was: ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'enable_session_affinity' in 'field list' I do have another Guacamole, almost production, with more connections. How do I upgrade the database? Like this: mysql -u root -p guacamole_db < schema/upgrade/upgrade-pre-0.9.9.sql mysql -u root -p guacamole_db < schema/upgrade/upgrade-pre-0.9.10.sql Thank you very much for your assistance, you're my man. Can I help, test, whatever, add assistance to Guacamole's project on this subject or anything else? Kind regards, João # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. # parent "base" name "pt-pt-qwerty" freerdp "KBD_PORTUGUESE" # # Basic keys # map -altgr -shift 0x29 0x02..0x0D ~ "\1234567890'«" map -altgr -shift 0x10..0x1B ~ "qwertyuiop+´" map -altgr -shift 0x1E..0x28 0x2B ~ "asdfghjklçº~" map -altgr -shift 0x56 0x2C..0x35 ~ "<zxcvbnm,.-" 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 ~ "¨" On Mon, Jun 20, 2016 at 10:28 AM, Joao Alexandre <[email protected]> wrote: > 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 <[email protected]> > wrote: > > On Sat, Jun 18, 2016 at 4:28 PM, Joao Alexandre > > <[email protected]> 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 >
pt_pt_qwerty.keymap
Description: Binary data
