Hi Mike,

First of all, I would like to thank you for the very detailed messages and
for your help which is much appreciated.

Here are the results of my tests and a possible workaround.

All my tests were done on a PC with a French PC keyboard (AZERTY) and on a
Mac with the official French Mac keyboard (AZERTY).

On the Guacamole login web page in the username field I can enter all the
special characters: { } and | . Everything works perfectly in this field
whether on PC or Mac.

But when I am connected to the LXDE desktop via Guacamole (VNC mode) here
are my results:

*On a Mac with a French Mac keyboard:*

With the command: xev -event keyboard

When I press Alt_L + Shift_L + L which is the combination for the |. We can
see the event in xev but this key combination does not work in applications
with LXDE, nothing is displayed.

KeyPress event, serial 40, synthetic NO, window 0x2800001,
    root 0x394, subw 0x0, time 82378885, (212,195), root:(256,286),
    state 0x10, keycode 64 (keysym 0xffe9, Alt_L), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 40, synthetic NO, window 0x2800001,
    root 0x394, subw 0x0, time 82382500, (210,193), root:(254,284),
    state 0x18, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 40, synthetic NO, window 0x2800001,
    root 0x394, subw 0x0, time 82384698, (210,193), root:(254,284),
    state 0x19, keycode 51 (keysym 0x7c, bar), same_screen YES,
    XLookupString gives 1 bytes: (7c) "|"
    XmbLookupString gives 1 bytes: (7c) "|"
    XFilterEvent returns: False

KeyRelease event, serial 40, synthetic NO, window 0x2800001,
    root 0x394, subw 0x0, time 82384787, (210,193), root:(254,284),
    state 0x19, keycode 51 (keysym 0x7c, bar), same_screen YES,
    XLookupString gives 1 bytes: (7c) "|"
    XFilterEvent returns: False


*With a PC and a French PC keyboard and the key combination AltGr + 6
(which includes – (minus) and | (pipe symbol)).*

Sometimes it works but more often it doesn't.

(from altgr.txt)
…
KeyPress event, serial 28, synthetic NO, window 0x1200001,
    root 0x394, subw 0x1200002, time 570310, (36,51), root:(140,121),
    state 0x84, keycode 94 (keysym 0x7c, bar), same_screen YES,
    XKeysymToKeycode returns keycode: 51
    XLookupString gives 1 bytes: (1c) ""
    XmbLookupString gives 1 bytes: (1c) ""
    XFilterEvent returns: False

KeyRelease event, serial 28, synthetic NO, window 0x1200001,
    root 0x394, subw 0x1200002, time 570410, (36,51), root:(140,121),
    state 0x84, keycode 94 (keysym 0x7c, bar), same_screen YES,
    XKeysymToKeycode returns keycode: 51
    XLookupString gives 1 bytes: (1c) ""
    XFilterEvent returns: False
…

*With a PC and a French PC keyboard and the key combination Ctrl_L + Alt_L
+ 6 (which includes – (minus) and | (pipe symbol)).*

This key combination works fine, I get the | Everytime.

(From ctrlalftleft.txt)
…
KeyPress event, serial 28, synthetic NO, window 0x1200001,
    root 0x394, subw 0x0, time 667274, (108.77), root:(212.147),
    state 0x1, keycode 51 (keysym 0x7c, bar), same_screen YES,
    XLookupString gives 1 bytes: (7c) "|"
    XmbLookupString gives 1 bytes: (7c) "|"
    XFilterEvent returns: False
…


I managed to make it work on PC and Mac but using these key combinations:

PC with French PC keyboard

Normal use

With Guacamole (VNC) and LXDE

{

ALTGr + { or CTRL + ALT + {

CTRL + ALT + {

}

ALTGr + } or CTRL + ALT + }

CTRL + ALT + }

[

ALTGr + [ or CTRL + ALT + [

CTRL + ALT + [

]

ALTGr + ] or CTRL + ALT + ]

CTRL + ALT + ]

|

ALTGr + | or CTRL + ALT + |

CTRL + ALT + |



Mac with French Mac keyboard

Normal use

With Guacamole (VNC) and LXDE

{

ALT + (

ALT Right + (

}

ALT + )

ALT Right + )

[

ALT + SHIFT + (

ALT Right + SHIFT + (

]

ALT + SHIFT + )

ALT Right + SHIFT + )

|

ALT + SHIFT + L

ALT Right + SHIFT + L

This is good news but I don't know where the malfunction comes from with
the other key combinations.

Regards,
YA

Le 13 novembre 2022 à 07:58:21, Michael Jumper ([email protected]) a écrit:

On Sat, Nov 12, 2022 at 12:22 PM Yves Auffret <[email protected]> wrote:

> At the moment, I don't know where the bug is.
>
> Sometimes it works, but most of the time it doesn't.
>
> Most often it works when I type several characters before the pipe symbol
> or the curly brackets.
>
> When it doesn't work, I have to release all the keys, wait a bit and try
> again, and sometimes by some miracle it works.
>
> It's like LXDE (or Guacamole) can't quite figure out the key combination.
>

Try installing the "xev" tool (which logs X11 events, including
keypresses), run it within a terminal in the VNC session, and see what is
reported when keys are behaving as expected vs. not.

If you're seeing correct behavior in the keyboard tester at
https://guacamole.apache.org/pub/tests/guac/keyboard-test.html, then it's
unlikely that there's an issue with Guacamole's keyboard handling. The
keysyms that you see there would be passed exactly as-is to the VNC server.
Something as fundamental as the ability to type "{}" or "|" on a French
keyboard would also likely have been noticed:

https://guacamole.apache.org/faq/#probably-not-a-bug

It's not impossible that there is some modifier state getting stuck through
some difficult-to-replicate sequence of events, but the fact that you're
seeing incorrect behavior immediately suggests that is not the case. There
is also next to zero additional key event processing in the case of VNC -
unlike RDP, we can just send the events straight through untouched.

How is the combination of CTRL+ALT+SHIFT handled in Guacamole, doesn't this
> event handle side effects?
>

The keys Ctrl, Alt, and Shift are sent immediately upon being pressed. For
Ctrl+Alt+Shift, when the third key in that sequence is pressed, the
Guacamole withholds *that* event and automatically sends release events
for the two that were pressed. For example:

1. Press Ctrl (Guacamole sends press event for Ctrl)
2. Press Alt (Guacamole sends press event for Alt)
3. Press Shift (Guacamole sends release events for Ctrl and Alt, and opens
the menu)

or:

1. Press Shift (Guacamole sends press event for Shift)
2. Press Ctrl (Guacamole sends press event for Ctrl)
3. Press Alt (Guacamole sends release events for Shift and Ctrl, and opens
the menu)

etc.

Guacamole will also automatically release ALL keys that it knows you have
pressed once the browser window loses focus (since Guacamole will no longer
be able to know whether you have released those keys).

- Mike

Reply via email to