Might be a bit old:

 

https://developer.apple.com/documentation/uikit/uikeycommand/input_strings_for_special_keys

 

 

--

Jeffry V. Herring

Seacoast Laboratory Data Systems, Inc.

 

 

From: Mike Jumper <mike.jum...@guac-dev.org>
Reply-To: <user@guacamole.apache.org>
Date: Monday, November 27, 2017 at 1:56 PM
To: <user@guacamole.apache.org>
Subject: Re: External keyboard with iPad

 

On Sat, Nov 25, 2017 at 10:48 PM, Greg Trasuk <tras...@stratuscom.com> wrote:

Hi Mike:

Thanks for the reply.  Here’s the result from the keypress tester:

keydown e.keyCode=0     e.which=0       e.keyIdentifier=Unidentified    
e.key=UIKeyInputEscape  e.altKey=false  e.ctrlKey=false e.altGraphKey=false     
e.metaKey=false e.shiftKey=false        e.location=0    e.keyLocation=0
keypress        e.keyCode=85    e.which=85      e.keyIdentifier=        
e.key=UIKeyInputEscape  e.altKey=false  e.ctrlKey=false e.altGraphKey=false     
e.metaKey=false e.shiftKey=false        e.location=0    e.keyLocation=0
keyup   e.keyCode=0     e.which=0       e.keyIdentifier=Unidentified    
e.key=UIKeyInputEscape  e.altKey=false

So… looks kind of funny.  The keycode reported is ’85’ which is the U 
character, but the key that’s reported is ‘UIKeyInputEscape’, which is clearly 
not ‘U’, and also not ESC (27).  Googling ‘UIKeyInputEscape’ suggests that this 
is UIKit’s name for the escape key, but the keycode is wrong.

 

It's unfortunately fairly common for at least one or two JavaScript key events 
and their properties to be completely incorrect. Guacamole's keyboard handling 
is actually one of the more complicated parts of the JavaScript side of the 
stack. We employ retrospective inspection of key events, looking over either or 
both of the keydown and keypress events depending on how reliable the 
associated properties are given other factors:

 

https://github.com/apache/incubator-guacamole-client/blob/649fd8c036861014a6064f4af3e05f309cd92973/guacamole-common-js/src/main/webapp/modules/Keyboard.js#L934-L938

 

In this case, iOS Safari shouldn't actually be sending a keypress event, as 
that event is supposed to only be sent for keys which would result in a 
printable character. It is this event which is resulting in Guacamole 
interpreting the key as a "U":

 

https://github.com/apache/incubator-guacamole-client/blob/649fd8c036861014a6064f4af3e05f309cd92973/guacamole-common-js/src/main/webapp/modules/Keyboard.js#L940-L944

 

Does Guacamole have some idea of an editable keymap?  And if it did, would it 
be looking at the ‘key’ value or the ‘keycode’ value?

 

The client side of things is meant to be independent of keyboard layout, so not 
exactly, but it does have a mapping of known key identifiers and known-accurate 
key codes (for the cases where a key code is always tied to a specific key). In 
those cases, it would ignore the keypress event and rely solely on keydown:

 

https://github.com/apache/incubator-guacamole-client/blob/649fd8c036861014a6064f4af3e05f309cd92973/guacamole-common-js/src/main/webapp/modules/Keyboard.js#L381-L506

https://github.com/apache/incubator-guacamole-client/blob/649fd8c036861014a6064f4af3e05f309cd92973/guacamole-common-js/src/main/webapp/modules/Keyboard.js#L174-L181

 

Though the "UIKeyInputEscape" identifier is non-standard, adding it to the 
above list would solve the issue. Do you perhaps know of where a full list of 
these UIKeyInput* names could be found? We could add them all in one fell swoop 
to fix this Safari quirk going forward.

 

- Mike

 

Reply via email to