[ 
https://issues.apache.org/jira/browse/GUACAMOLE-1037?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17089077#comment-17089077
 ] 

Weston Thayer commented on GUACAMOLE-1037:
------------------------------------------

I'm not sure what a good fix would be here. The root issue is that 
{{Keyboard.js}} is mainly looking at 
[KeyboardEvent.key|https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key],
 which attempts to represent the printable character, not the actual keyboard 
key, the user intends to enter. This optimizes for ease of localized typing. 
For example, you could have your client machine using an it-it keyboard layout, 
connect to a remote machine via RDP with en-us keyboard layout, yet when you 
hit the {{;}} key on your keyboard, "ò" will be typed on the remote.

While this is closer to the input philosophy behind VNC (as I understand it), 
RDP was designed for the physical keyboard keys to be sent. You can test this 
with a different RDP client, like Microsoft's. Your local client's keyboard 
layout will not matter, {{;}} will type ";" (unless the remote machine has a 
non en-us keyboard layout). The "RDP-native" approach would be to switch the 
remote keyboard layout to match your client keyboard layout. Guacamole's 
attempts to make RDP work like VNC.

The disadvantage to this approach is keyboard shortcuts tend to care about the 
physical keyboard layout, not the "intended printable character". For example 
on the Belgian keyboard layout the physical {{Z}} key is intended to actually 
type a "w" (e.g. {{KeyboardEvent.key === 'w'}}). If you switch to a Belgian 
keyboard layout today, then use Guacamole to connect to a remote en-us computer 
over RDP, you'll quickly find that {{CTRL + Z}} no longer works for the undo 
action.

Would someone using the Belgian keyboard layout still expect {{CTRL + Z}} to 
work? If they were using a computer built and designed for Belgium, the actual 
keycap on the {{Z}} key would be "w". Does Belgian-localized software accept 
"ctrl + w" as undo? I want to know! But I don't know anyone from Belgium :(

I would also need to wrap my head around how keyboard shortcuts are handled in 
VNC. For example, {{OPTION/ALT + M}} on MacOS on an en-us keyboard layout types 
the "µ" character. But some MacOS programs use {{OPTION/ALT + M}} as a keyboard 
shortcut for some other action. What happens if someone tries to use that 
keyboard shortcut over VNC? I have yet to test.

tl;dr: GUACAMOLE-859 opened a can of worms. I'm interested in solving it, but 
caps lock on 1.2.0 will be broken until we have a better fix or revert the 
change to base.keymap.

> Caps Lock doesn't work via RDP (1.2 guacd)
> ------------------------------------------
>
>                 Key: GUACAMOLE-1037
>                 URL: https://issues.apache.org/jira/browse/GUACAMOLE-1037
>             Project: Guacamole
>          Issue Type: Bug
>          Components: guacd
>    Affects Versions: 1.2.0
>            Reporter: andrea lattanzi
>            Priority: Minor
>
> Hello!
> I was pushed to use guacd 1.2 after facing 1.1 huge memory leaks bug.
> The users signalled me this bug that could be workaround by running OSK on 
> the remote.
> To log key events I used this site:
> [https://unixpapa.com/js/testkey.html]
> Now I'm pasting the results in several conditions of the following test 
> sequence:
> 1) "a" key low case
> 2) caps lock
> 3) "A" key 
> 4) caps lock
> 5) "a" key
> The client OS is Ubuntu, but OS and browser/version combinations don't look 
> to affect the bug.
>  
> *Just the client via Chromium:*
> keydown keyCode=65 (A) which=65 (A) charCode=0 
>  keypress keyCode=97 (a) which=97 (a) charCode=97 (a) 
>  keyup keyCode=65 (A) which=65 (A) charCode=0 
>  keydown keyCode=20 which=20 charCode=0 
>  keyup keyCode=20 which=20 charCode=0 
>  keydown keyCode=65 (A) which=65 (A) charCode=0 
>  keypress keyCode=65 (A) which=65 (A) charCode=65 (A) 
>  keyup keyCode=65 (A) which=65 (A) charCode=0 
>  keydown keyCode=20 which=20 charCode=0 
>  keyup keyCode=20 which=20 charCode=0 
>  keydown keyCode=65 (A) which=65 (A) charCode=0 
>  keypress keyCode=97 (a) which=97 (a) charCode=97 (a) 
>  keyup keyCode=65 (A) which=65 (A) charCode=0
>  
> *client via Chromium, guacamole 0.9.14 RDP*
> keydown keyCode=65 (A) which=65 (A) charCode=0 
>  keypress keyCode=97 (a) which=97 (a) charCode=97 (a) 
>  keyup keyCode=65 (A) which=65 (A) charCode=0 
>  keydown keyCode=255 which=255 charCode=0 
>  keyup keyCode=255 which=255 charCode=0 
>  keydown keyCode=16 which=16 charCode=0 
>  keydown keyCode=65 (A) which=65 (A) charCode=0 
>  keypress keyCode=65 (A) which=65 (A) charCode=65 (A) 
>  keyup keyCode=16 which=16 charCode=0 
>  keydown keyCode=16 which=16 charCode=0 
>  keyup keyCode=65 (A) which=65 (A) charCode=0 
>  keyup keyCode=16 which=16 charCode=0 
>  keydown keyCode=255 which=255 charCode=0 
>  keyup keyCode=255 which=255 charCode=0 
>  keydown keyCode=65 (A) which=65 (A) charCode=0 
>  keypress keyCode=97 (a) which=97 (a) charCode=97 (a) 
>  keyup keyCode=65 (A) which=65 (A) charCode=0
>  
> *client via Chromium, guacamole 1.1, guacd 1.2, RDP (bug)*
> keydown keyCode=65 (A) which=65 (A) charCode=0 
>  keypress keyCode=97 (a) which=97 (a) charCode=97 (a) 
>  keyup keyCode=65 (A) which=65 (A) charCode=0 
>  keydown keyCode=20 which=20 charCode=0 
>  keyup keyCode=20 which=20 charCode=0 
>  keydown keyCode=16 which=16 charCode=0 
>  keydown keyCode=65 (A) which=65 (A) charCode=0 
>  keypress keyCode=97 (a) which=97 (a) charCode=97 (a) 
>  keyup keyCode=16 which=16 charCode=0 
>  keydown keyCode=16 which=16 charCode=0 
>  keyup keyCode=65 (A) which=65 (A) charCode=0 
>  keyup keyCode=16 which=16 charCode=0 
>  keydown keyCode=20 which=20 charCode=0 
>  keyup keyCode=20 which=20 charCode=0 
>  keydown keyCode=65 (A) which=65 (A) charCode=0 
>  keypress keyCode=97 (a) which=97 (a) charCode=97 (a) 
>  keyup keyCode=65 (A) which=65 (A) charCode=0 
>  keydown keyCode=16 which=16 charCode=0 
>  keyup keyCode=16 which=16 charCode=0
>  
> *client via Chromium, guacamole 1.0, RDP*
> keydown keyCode=65 (A) which=65 (A) charCode=0 
>  keypress keyCode=97 (a) which=97 (a) charCode=97 (a) 
>  keyup keyCode=65 (A) which=65 (A) charCode=0 
>  keydown keyCode=0 which=0 charCode=0 
>  keyup keyCode=0 which=0 charCode=0 
>  keydown keyCode=16 which=16 charCode=0 
>  keydown keyCode=65 (A) which=65 (A) charCode=0 
>  keypress keyCode=65 (A) which=65 (A) charCode=65 (A) 
>  keyup keyCode=16 which=16 charCode=0 
>  keydown keyCode=16 which=16 charCode=0 
>  keyup keyCode=65 (A) which=65 (A) charCode=0 
>  keyup keyCode=16 which=16 charCode=0 
>  keydown keyCode=0 which=0 charCode=0 
>  keyup keyCode=0 which=0 charCode=0 
>  keydown keyCode=65 (A) which=65 (A) charCode=0 
>  keypress keyCode=97 (a) which=97 (a) charCode=97 (a) 
>  keyup keyCode=65 (A) which=65 (A) charCode=0 
>  keydown keyCode=16 which=16 charCode=0 
>  keyup keyCode=16 which=16 charCode=0
>  
> *client via Chromium, guacamole 1.1, guacd 1.2, VNC*
> keydown keyCode=65 (A) which=65 (A) charCode=0 
>  keypress keyCode=97 (a) which=97 (a) charCode=97 (a) 
>  textInput data=a
>  akeyup keyCode=65 (A) which=65 (A) charCode=0 
>  keydown keyCode=16 which=16 charCode=0 
>  keydown keyCode=65 (A) which=65 (A) charCode=0 
>  keypress keyCode=65 (A) which=65 (A) charCode=65 (A) 
>  textInput data=A
>  Akeyup keyCode=16 which=16 charCode=0 
>  keyup keyCode=65 (A) which=65 (A) charCode=0 
>  keydown keyCode=65 (A) which=65 (A) charCode=0 
>  keypress keyCode=97 (a) which=97 (a) charCode=97 (a) 
>  textInput data=a
>  akeyup keyCode=65 (A) which=65 (A) charCode=0
>  
> *client via Firefox, guacamole 0.9.14 RDP*
> keydown keyCode=65 (A) which=65 (A) charCode=0 
>  keypress keyCode=97 (a) which=97 (a) charCode=97 (a) 
>  textInput data=a
>  akeyup keyCode=65 (A) which=65 (A) charCode=0 
>  keydown keyCode=255 which=255 charCode=0 
>  keyup keyCode=255 which=255 charCode=0 
>  keydown keyCode=16 which=16 charCode=0 
>  keydown keyCode=65 (A) which=65 (A) charCode=0 
>  keypress keyCode=65 (A) which=65 (A) charCode=65 (A) 
>  textInput data=A
>  Akeyup keyCode=16 which=16 charCode=0 
>  keydown keyCode=16 which=16 charCode=0 
>  keyup keyCode=65 (A) which=65 (A) charCode=0 
>  keyup keyCode=16 which=16 charCode=0 
>  keydown keyCode=255 which=255 charCode=0 
>  keyup keyCode=255 which=255 charCode=0 
>  keydown keyCode=65 (A) which=65 (A) charCode=0 
>  keypress keyCode=97 (a) which=97 (a) charCode=97 (a) 
>  textInput data=a
>  akeyup keyCode=65 (A) which=65 (A) charCode=0
>  
> *client via Firefox, guacamole 1.1, guacd 1.2, RDP (bug)*
> keydown keyCode=65 (A) which=65 (A) charCode=0 
>  keypress keyCode=97 (a) which=97 (a) charCode=97 (a) 
>  textInput data=a
>  akeyup keyCode=65 (A) which=65 (A) charCode=0 
>  keydown keyCode=20 which=20 charCode=0 
>  keyup keyCode=20 which=20 charCode=0 
>  keydown keyCode=16 which=16 charCode=0 
>  keydown keyCode=65 (A) which=65 (A) charCode=0 
>  keypress keyCode=97 (a) which=97 (a) charCode=97 (a) 
>  textInput data=a
>  akeyup keyCode=16 which=16 charCode=0 
>  keydown keyCode=16 which=16 charCode=0 
>  keyup keyCode=65 (A) which=65 (A) charCode=0 
>  keyup keyCode=16 which=16 charCode=0 
>  keydown keyCode=20 which=20 charCode=0 
>  keyup keyCode=20 which=20 charCode=0 
>  keydown keyCode=65 (A) which=65 (A) charCode=0 
>  keypress keyCode=97 (a) which=97 (a) charCode=97 (a) 
>  textInput data=a
>  akeyup keyCode=65 (A) which=65 (A) charCode=0
>  
> I hope this could help.
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to