Xpra: Ticket #108: Some german keys: "?" and "ß" mismatched

What steps will reproduce the problem?

  1. Start xev in xpra
  2. Press the "ß" key (right to "0") on a German keyboard, with and without Shift
  3. Do the same without xpra

What is the expected output?

KeyPress event, serial 35, synthetic NO, window 0xa800001,
    root 0xc7, subw 0x0, time 2074147676, (141,81), root:(143,666),
    state 0x0, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False
KeyPress event, serial 35, synthetic NO, window 0xa800001,
    root 0xc7, subw 0x0, time 2074148073, (141,81), root:(143,666),
    state 0x1, keycode 20 (keysym 0x3f, question), same_screen YES,
    XLookupString gives 1 bytes: (3f) "?"
    XmbLookupString gives 1 bytes: (3f) "?"
    XFilterEvent returns: False
KeyRelease event, serial 35, synthetic NO, window 0xa800001,
    root 0xc7, subw 0x0, time 2074148130, (141,81), root:(143,666),
    state 0x1, keycode 20 (keysym 0x3f, question), same_screen YES,
    XLookupString gives 1 bytes: (3f) "?"
    XFilterEvent returns: False
KeyRelease event, serial 35, synthetic NO, window 0xa800001,
    root 0xc7, subw 0x0, time 2074148236, (141,81), root:(143,666),
    state 0x1, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False
KeyPress event, serial 35, synthetic NO, window 0xa800001,
    root 0xc7, subw 0x0, time 2074152577, (142,80), root:(144,665),
    state 0x0, keycode 20 (keysym 0xdf, ssharp), same_screen YES,
    XLookupString gives 2 bytes: (c3 9f) "ß"
    XmbLookupString gives 2 bytes: (c3 9f) "ß"
    XFilterEvent returns: False
KeyRelease event, serial 35, synthetic NO, window 0xa800001,
    root 0xc7, subw 0x0, time 2074152638, (142,80), root:(144,665),
    state 0x0, keycode 20 (keysym 0xdf, ssharp), same_screen YES,
    XLookupString gives 2 bytes: (c3 9f) "ß"
    XFilterEvent returns: False

What do you see instead?

KeyPress event, serial 27, synthetic NO, window 0xc00001,
    root 0xfd, subw 0x0, time 2074117364, (37,98), root:(39,121),
    state 0x6000, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False
KeyPress event, serial 30, synthetic NO, window 0xc00001,
    root 0xfd, subw 0x0, time 2074117677, (37,98), root:(39,121),
    state 0x6001, keycode 20 (keysym 0xbf, questiondown), same_screen YES,
    XLookupString gives 2 bytes: (c2 bf) "¿"
    XmbLookupString gives 2 bytes: (c2 bf) "¿"
    XFilterEvent returns: False
KeyRelease event, serial 30, synthetic NO, window 0xc00001,
    root 0xfd, subw 0x0, time 2074117782, (37,98), root:(39,121),
    state 0x6001, keycode 20 (keysym 0xbf, questiondown), same_screen YES,
    XLookupString gives 2 bytes: (c2 bf) "¿"
    XFilterEvent returns: False
KeyRelease event, serial 30, synthetic NO, window 0xc00001,
    root 0xfd, subw 0x0, time 2074117951, (37,98), root:(39,121),
    state 0x6001, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False
KeyPress event, serial 30, synthetic NO, window 0xc00001,
    root 0xfd, subw 0x0, time 2074136837, (38,98), root:(40,121),
    state 0x6000, keycode 20 (keysym 0x5c, backslash), same_screen YES,
    XLookupString gives 1 bytes: (5c) "\"
    XmbLookupString gives 1 bytes: (5c) "\"
    XFilterEvent returns: False
KeyRelease event, serial 30, synthetic NO, window 0xc00001,
    root 0xfd, subw 0x0, time 2074136895, (38,98), root:(40,121),
    state 0x6000, keycode 20 (keysym 0x5c, backslash), same_screen YES,
    XLookupString gives 1 bytes: (5c) "\"
    XFilterEvent returns: False

What version of the product are you using? On what operating system?

xpra v0.1.0, (K)ubuntu 11.10

Please provide any additional information below.

So the problem is that xpra transalates the question mark into an upside down question mark, and the sharps into a backslash. The backslash is on that key, but only with ISO_Level_3_Shift (Right Alt, AltGr?).



Mon, 16 Apr 2012 10:26:14 GMT - Antoine Martin: status, description changed

Please provide the output of:

And an exact diagram of the keyboard layout in question would be really helpful too for testing. (wikipedia seems to have many, is it this one?)

related bugs: see also #109 (and maybe even #86)


Mon, 16 Apr 2012 13:54:15 GMT - Stephan:

The keyboard has the right layout, yes!

Results for native:


Mon, 16 Apr 2012 13:56:18 GMT - Stephan:

Just saw that in my xev listings, one difference is also that the state variable seems to have 0x6000 ORed in, always. Maybe that is confusing the modifier logic?


Mon, 16 Apr 2012 18:17:37 GMT - Antoine Martin:

Is the output above from the local machine or from within xpra? (both should be almost identical)

As for the 0x6000 ORed in, that is a possibility - I just don't know what this state is! (will need to dig it up from the xev sources)


Tue, 17 Apr 2012 08:17:38 GMT - ahuillet:

I don't know what 0x6000 is. I don't get it in my case:

KeyPress event, serial 32, synthetic NO, window 0xe00001,
    root 0x131, subw 0x0, time 5773757, (120,120), root:(121,143),
    state 0x10, keycode 17 (keysym 0xfe04, ISO_Level3_Latch), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False
KeyRelease event, serial 35, synthetic NO, window 0xe00001,
    root 0x131, subw 0x0, time 5773822, (120,120), root:(121,143),
    state 0x90, keycode 17 (keysym 0x60, grave), same_screen YES,
    XLookupString gives 1 bytes: (60) "`"
    XFilterEvent returns: False
KeyPress event, serial 35, synthetic NO, window 0xe00001,
    root 0x131, subw 0x0, time 5775118, (120,120), root:(121,143),
    state 0x90, keycode 93 (keysym 0x65, e), same_screen YES,
    XLookupString gives 1 bytes: (65) "e"
    XmbLookupString gives 1 bytes: (65) "e"
    XFilterEvent returns: False
KeyRelease event, serial 35, synthetic NO, window 0xe00001,
    root 0x131, subw 0x0, time 5775221, (120,120), root:(121,143),
    state 0x10, keycode 93 (keysym 0x65, e), same_screen YES,
    XLookupString gives 1 bytes: (65) "e"
    XFilterEvent returns: False
KeyPress event, serial 35, synthetic NO, window 0xe00001,
    root 0x131, subw 0x0, time 5777997, (120,120), root:(121,143),
    state 0x10, keycode 17 (keysym 0xfe04, ISO_Level3_Latch), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False
KeyRelease event, serial 35, synthetic NO, window 0xe00001,
    root 0x131, subw 0x0, time 5778077, (120,120), root:(121,143),
    state 0x90, keycode 17 (keysym 0x60, grave), same_screen YES,
    XLookupString gives 1 bytes: (60) "`"
    XFilterEvent returns: False
KeyPress event, serial 35, synthetic NO, window 0xe00001,
    root 0x131, subw 0x0, time 5778773, (120,120), root:(121,143),
    state 0x90, keycode 31 (keysym 0xec, igrave), same_screen YES,
    XLookupString gives 1 bytes: (ec) "ì"
    XmbLookupString gives 1 bytes: (ec) "ì"
    XFilterEvent returns: False
KeyRelease event, serial 35, synthetic NO, window 0xe00001,
    root 0x131, subw 0x0, time 5778893, (120,120), root:(121,143),
    state 0x10, keycode 31 (keysym 0x69, i), same_screen YES,
    XLookupString gives 1 bytes: (69) "i"
    XFilterEvent returns: False

Tue, 17 Apr 2012 09:56:38 GMT - Stephan: attachment set

Log of keyboard mapping related commands for native X11.


Tue, 17 Apr 2012 09:57:14 GMT - Stephan: attachment set

Log of keyboard mapping related commands for running in the Xpra client.


Tue, 17 Apr 2012 10:06:21 GMT - Stephan:

The diff between the two looks fairly significant... there seems to be some mixup how the two active layouts (de,us) are mixed into the keycodes. The native version seems to go <de> <de_shift> <us> <us_shift> <de_R_alt>... while the xpra version does <us> <us_shift> <us> <us_shift> ... ... <de> <de_shift>. That is consistent with the question mark key (keycode 20):

Native:

keycode  20 = ssharp question minus underscore backslash questiondown U1E9E

Xpra:

keycode  20 = ssharp question backslash questiondown U1E9E minus underscore

Making it obvious that the things are actually there, but apparently the fourth entry is used instead of the second, hinting at some US / DE mixup?


Tue, 17 Apr 2012 11:57:37 GMT - Antoine Martin:

Can you post the output of: xpra/keys.py (this version from trunk)


Tue, 17 Apr 2012 12:39:02 GMT - Stephan:

svn co http://xpra.org/svn/Xpra/ cd Xpra/trunk/src/ python xpra/keys.py

Traceback (most recent call last):
  File "xpra/keys.py", line 58, in <module>
    main()
  File "xpra/keys.py", line 54, in main
    gtk_keymap = get_gtk_keymap()
  File "xpra/keys.py", line 27, in get_gtk_keymap
    from wimpiggy.gobject_compat import import_gdk
ImportError: No module named gobject_compat

svn log wimpiggy/gobject_compat.py

------------------------------------------------------------------------
r630 | antoine | 2012-03-27 13:30:44 +0200 (Di, 27. Mär 2012) | 1 Zeile
#90 introduce gobject_compat to cleanup the import mess caused by gtk3, leaves some code broken (ie: no keymap for gtk3, client completely unusable as-is with gtk3..)
------------------------------------------------------------------------

Tue, 17 Apr 2012 17:23:09 GMT - Antoine Martin:

Hah, sorry about that.

You need to run this with python2, and have the whole of trunk installed. OR, just revert the gtk3 crap, by replacing:

    from wimpiggy.gobject_compat import import_gdk
    gdk = import_gdk()
    try:
        keymap = gdk.keymap_get_default()
    except:
        keymap = None
        return  []

with:

    import pygtk
    pygtk.require("2.0")
    import gtk
    keymap = gtk.gdk.keymap_get_default()

And name = gdk.keyval_name(keyval) with gtk.gdk.keyval_name(keyval).

Or even, easier is to just add this to the version you have from the release:

def main():
    gtk_keymap = get_gtk_keymap()
    print("gtk_keymap: (keyval, name, keycode, group, level)\n%s" % ("\n".join([str(x) for x in gtk_keymap])))
if __name__ == "__main__":
    main()

Wed, 18 Apr 2012 11:34:47 GMT - Stephan: attachment set

Results of running (modified) keys.py on native X.org.


Wed, 18 Apr 2012 11:35:12 GMT - Stephan: attachment set

Results of running (modified) keys.py in Xpra.


Wed, 18 Apr 2012 11:35:56 GMT - Stephan:

Ah. That worked, many thanks! Attached the reuslts from both native X.org and Xpra to the entry.


Fri, 04 May 2012 10:00:31 GMT - Antoine Martin: priority, milestone changed


Mon, 18 Jun 2012 12:29:30 GMT - Antoine Martin:

Does this patch fix the issue?

Index: src/xpra/xkbhelper.py
===================================================================
--- src/xpra/xkbhelper.py	(revision 923)
+++ src/xpra/xkbhelper.py	(working copy)
@@ -161,7 +161,7 @@
         _, _, keycode, _, _ = entry
         entries = keycodes.setdefault(keycode, [])
         entries.append(entry)
-    return set_keycodes(keycodes, preserve_keycodes)
+    return set_keycodes(keycodes)
 def set_keycodes(keycodes, preserve_keycodes={}):
     """

Thu, 21 Jun 2012 12:11:51 GMT - Stephan:

Hi,

this definitly helps with most keys. Thank you! The only remaining issue that I perceived was with right Alt (ISO_Level_3 shift) + "ß" (right of top row "0") which should produce a "\", but continues to produce a "ß".

The other R_Alt combinations work, for example R_Alt + 0 = }

Xev native: R_Alt + ß

KeyPress event, serial 32, synthetic NO, window 0x8c00001,
    root 0xc7, subw 0x0, time 2607710464, (135,71), root:(1555,471),
    state 0x0, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
    XKeysymToKeycode returns keycode: 92
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False
KeyPress event, serial 35, synthetic NO, window 0x8c00001,
    root 0xc7, subw 0x0, time 2607711608, (135,71), root:(1555,471),
    state 0x80, keycode 20 (keysym 0x5c, backslash), same_screen YES,
    XLookupString gives 1 bytes: (5c) "\"
    XmbLookupString gives 1 bytes: (5c) "\"
    XFilterEvent returns: False
KeyRelease event, serial 35, synthetic NO, window 0x8c00001,
    root 0xc7, subw 0x0, time 2607711744, (135,71), root:(1555,471),
    state 0x80, keycode 20 (keysym 0x5c, backslash), same_screen YES,
    XLookupString gives 1 bytes: (5c) "\"
    XFilterEvent returns: False
KeyRelease event, serial 35, synthetic NO, window 0x8c00001,
    root 0xc7, subw 0x0, time 2607712136, (135,71), root:(1555,471),
    state 0x80, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
    XKeysymToKeycode returns keycode: 92
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

Xev native R_Alt + 0:

KeyPress event, serial 35, synthetic NO, window 0x8c00001,
    root 0xc7, subw 0x0, time 2607724710, (134,63), root:(1554,463),
    state 0x0, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
    XKeysymToKeycode returns keycode: 92
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False
KeyPress event, serial 35, synthetic NO, window 0x8c00001,
    root 0xc7, subw 0x0, time 2607724942, (134,63), root:(1554,463),
    state 0x80, keycode 19 (keysym 0x7d, braceright), same_screen YES,
    XLookupString gives 1 bytes: (7d) "}"
    XmbLookupString gives 1 bytes: (7d) "}"
    XFilterEvent returns: False
KeyRelease event, serial 35, synthetic NO, window 0x8c00001,
    root 0xc7, subw 0x0, time 2607725046, (134,63), root:(1554,463),
    state 0x80, keycode 19 (keysym 0x7d, braceright), same_screen YES,
    XLookupString gives 1 bytes: (7d) "}"
    XFilterEvent returns: False
KeyRelease event, serial 35, synthetic NO, window 0x8c00001,
    root 0xc7, subw 0x0, time 2607725102, (134,63), root:(1554,463),
    state 0x80, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
    XKeysymToKeycode returns keycode: 92
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

Xev in Xpra R_Alt + ß:

KeyPress event, serial 30, synthetic NO, window 0x800001,
    root 0xfd, subw 0x0, time 2607744310, (144,60), root:(146,83),
    state 0x0, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
    XKeysymToKeycode returns keycode: 92
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False
KeyPress event, serial 30, synthetic NO, window 0x800001,
    root 0xfd, subw 0x0, time 2607744597, (144,60), root:(146,83),
    state 0x80, keycode 20 (keysym 0x1001e9e, U1E9E), same_screen YES,
    XLookupString gives 3 bytes: (e1 ba 9e) "ẞ"
    XmbLookupString gives 3 bytes: (e1 ba 9e) "ẞ"
    XFilterEvent returns: False
KeyRelease event, serial 30, synthetic NO, window 0x800001,
    root 0xfd, subw 0x0, time 2607744709, (144,60), root:(146,83),
    state 0x80, keycode 20 (keysym 0x1001e9e, U1E9E), same_screen YES,
    XLookupString gives 3 bytes: (e1 ba 9e) "ẞ"
    XFilterEvent returns: False
KeyRelease event, serial 30, synthetic NO, window 0x800001,
    root 0xfd, subw 0x0, time 2607744925, (144,60), root:(146,83),
    state 0x80, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
    XKeysymToKeycode returns keycode: 92
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

Xev in xpra: R_Alt + 0:

KeyPress event, serial 27, synthetic NO, window 0x800001,
    root 0xfd, subw 0x0, time 2607740502, (144,60), root:(146,83),
    state 0x0, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
    XKeysymToKeycode returns keycode: 92
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False
KeyPress event, serial 30, synthetic NO, window 0x800001,
    root 0xfd, subw 0x0, time 2607741437, (144,60), root:(146,83),
    state 0x80, keycode 19 (keysym 0x7d, braceright), same_screen YES,
    XLookupString gives 1 bytes: (7d) "}"
    XmbLookupString gives 1 bytes: (7d) "}"
    XFilterEvent returns: False
KeyRelease event, serial 30, synthetic NO, window 0x800001,
    root 0xfd, subw 0x0, time 2607741598, (144,60), root:(146,83),
    state 0x80, keycode 19 (keysym 0x7d, braceright), same_screen YES,
    XLookupString gives 1 bytes: (7d) "}"
    XFilterEvent returns: False
KeyRelease event, serial 30, synthetic NO, window 0x800001,
    root 0xfd, subw 0x0, time 2607741950, (144,60), root:(146,83),
    state 0x80, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
    XKeysymToKeycode returns keycode: 92
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

Fri, 22 Jun 2012 09:47:39 GMT - Antoine Martin:

I believe the remaining issues can be solved by #149


Fri, 22 Jun 2012 10:10:29 GMT - Antoine Martin: status changed; resolution set

applied in r942: removed preserve_keycodes

The remaining issues will be followed up in #149


Sun, 24 Jun 2012 05:25:53 GMT - Antoine Martin: status changed; resolution deleted

In trying to reproduce your problem I found this interesting error message:

Warning:          Type "ONE_LEVEL" has 1 levels, but <RALT> has 2 symbols
                  Ignoring extra symbols

Which led me to some bug reports:

More info found on the xkb_symbols like this one:

xkb_symbols   { include "pc(pc105)+fi+inet(logicdp)"    };

"All the xkb_(whatevers) in the setxkbmap output are directories inside /usr/share/X11/xkb, and the (optionally plus-delimited) include parameters are files inside those directories. The stuff inside parentheses are sections inside those files. lessing about said files is a good way to see what sort of stuff gets fed to xkbcomp."

Also doc on extending-xkb

One very useful command for visualizing the keyboard map:

xkbprint -label name $DISPLAY - | gv -orientation=seascape -

The problem is that when I setup my keyboard like yours... I don't have the problem (yet).

As for the Xev data, correct me if I am wrong, but the only noticable difference that I can see for the "ß" key are: keysym 0x5c, backslash (x11) vs keysym 0x1001e9e, U1E9E (xpra) There are no differences for the ISO_Level3_Shift keypress/keyrelease.

Can you apply this small patch and tell me what the server prints when you hit this key combination on the client:

Index: src/xpra/server.py
===================================================================
--- src/xpra/server.py	(revision 957)
+++ src/xpra/server.py	(working copy)
@@ -1510,6 +1510,7 @@
             log.info("ignoring key action packet since keyboard is turned off")
             return
         (wid, keyname, pressed, modifiers, keyval, _, client_keycode) = packet[1:8]
+        log.info("process_key_action: %s" % packet[1:])
         keycode = self.keycode_translation.get(client_keycode, client_keycode)
         #currently unused: (group, is_modifier) = packet[8:10]
         self._focus(wid, None)
@@ -1524,7 +1525,7 @@
             Does the actual press/unpress for keys
             Either from a packet (_process_key_action) or timeout (_key_repeat_timeout)
         """
-        log("handle_key(%s,%s,%s,%s,%s,%s)", wid, pressed, name, keyval, keycode, modifiers)
+        log.info("handle_key(%s,%s,%s,%s,%s,%s)", wid, pressed, name, keyval, keycode, modifiers)
         if pressed and (wid is not None) and (wid not in self._id_to_window):
             log("window %s is gone, ignoring key press", wid)
             return

This is what I get:

process_key_action: [1, 'ISO_Level3_Shift', 1, [], 65027, '', 113, 0, 0]
handle_key(1,1,ISO_Level3_Shift,65027,113,[])
process_key_action: [1, 'backslash', 1, ['mod5'], 92, '\\', 20, 0, 0]
handle_key(1,1,backslash,92,20,['mod5'])
process_key_action: [1, 'backslash', 0, ['mod5'], 92, '\\', 20, 0, 0]
handle_key(1,0,backslash,92,20,['mod5'])
process_key_action: [1, 'ISO_Level3_Shift', 0, ['mod5'], 65027, '', 113, 0, 0]
handle_key(1,0,ISO_Level3_Shift,65027,113,['mod5'])

Tue, 17 Jul 2012 16:56:55 GMT - Antoine Martin:

Also, r942 caused some regressions in win32/osx clients, so r1121 re-instates the "preserve keycode" functions for clients without proper keymap definitions (osx, win32, ..)


Wed, 03 Oct 2012 06:53:29 GMT - Antoine Martin:

I have just committed a large amount of code to try to properly fix support for "ISO_Level3_shift" (see r1779 and the previous few days in timeline), including fixes for win32 clients.

It seems to work here (though I never use "AltGr" myself so I cannot be certain all keys do map correctly), however, in the process I have found that the core X11 APIs are not symmetrical, which means that the layouts we set are not the layouts we get back.. meaning that it is impossible to ensure that the layouts match exactly without using the Xkb API (which is a sizable amount of work).

Hopefully, this change will be enough to fix your remaining issue - if not, it will have to wait a little while longer.. sorry. You can find beta packages with those changes in the beta area


Wed, 10 Oct 2012 05:54:37 GMT - Antoine Martin: status changed; resolution set

Not heard back - closing.


Wed, 10 Oct 2012 09:22:35 GMT - Stephan:

Sorry for keeping quiet on this for so long. Many thanks for digging through this. Will try current SVn and report back on how things work out.


Wed, 10 Oct 2012 09:23:57 GMT - Antoine Martin:

No problem - just tidying up after a release.

Feel free to try svn or the just released 0.7.0, there's not much difference between them yet.


Wed, 10 Oct 2012 11:23:21 GMT - Stephan:

Just tested this with 0.7.0, and I must say it works great! ... except ... for one additional character combination, which is AltGr + Q => @.

Xev from inside xpra:

KeyPress event, serial 27, synthetic NO, window 0x800001,
    root 0x12d, subw 0x0, time 760421596, (61,122), root:(1095,713),
    state 0x4010, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
    XKeysymToKeycode returns keycode: 92
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False
KeyPress event, serial 30, synthetic NO, window 0x800001,
    root 0x12d, subw 0x0, time 760422625, (61,122), root:(1095,713),
    state 0x4090, keycode 24 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False
KeyRelease event, serial 30, synthetic NO, window 0x800001,
    root 0x12d, subw 0x0, time 760422724, (61,122), root:(1095,713),
    state 0x4090, keycode 24 (keysym 0x0, NoSymbol), same_screen YES,
    XLookupString gives 0 bytes:
    XFilterEvent returns: False
KeyRelease event, serial 30, synthetic NO, window 0x800001,
    root 0x12d, subw 0x0, time 760423440, (61,122), root:(1095,713),
    state 0x4090, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
    XKeysymToKeycode returns keycode: 92
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

And xev with native x-server:

KeyPress event, serial 34, synthetic NO, window 0x9200001,
    root 0x162, subw 0x9200002, time 760584525, (67,40), root:(848,763),
    state 0x10, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
    XKeysymToKeycode returns keycode: 92
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False
KeyPress event, serial 34, synthetic NO, window 0x9200001,
    root 0x162, subw 0x9200002, time 760585348, (67,40), root:(848,763),
    state 0x90, keycode 24 (keysym 0x40, at), same_screen YES,
    XLookupString gives 1 bytes: (40) "@"
    XmbLookupString gives 1 bytes: (40) "@"
    XFilterEvent returns: False
KeyRelease event, serial 34, synthetic NO, window 0x9200001,
    root 0x162, subw 0x9200002, time 760585449, (67,40), root:(848,763),
    state 0x90, keycode 24 (keysym 0x40, at), same_screen YES,
    XLookupString gives 1 bytes: (40) "@"
    XFilterEvent returns: False
KeyRelease event, serial 34, synthetic NO, window 0x9200001,
    root 0x162, subw 0x9200002, time 760586429, (67,40), root:(848,763),
    state 0x90, keycode 108 (keysym 0xfe03, ISO_Level3_Shift), same_screen YES,
    XKeysymToKeycode returns keycode: 92
    XLookupString gives 0 bytes:
    XFilterEvent returns: False

I also get

The XKEYBOARD keymap compiler (xkbcomp) reports:
> Warning:          Type "ONE_LEVEL" has 1 levels, but <RALT> has 2 symbols
>                   Ignoring extra symbols

Debug output for the AtlGr+Q in Xpra test:

2012-10-10 13:20:16,753 process_key_action(['key-action', 2, 'ISO_Level3_Shift', True, ('mod2',), 65027, '', 108, 0, 0]) server keycode=108
2012-10-10 13:20:16,753 handle_key(2,True,ISO_Level3_Shift,65027,108,('mod2',))
2012-10-10 13:20:16,753 handle keycode pressing 108: key ISO_Level3_Shift
2012-10-10 13:20:16,754 scheduling key repeat timer with delay 660 for ISO_Level3_Shift / 108
2012-10-10 13:20:17,029 will process ui packet key-action
2012-10-10 13:20:17,029 process_key_action(['key-action', 2, 'at', True, ('mod2', 'mod5'), 64, '@', 24, 0, 0]) server keycode=24
2012-10-10 13:20:17,030 handle_key(2,True,at,64,24,('mod2', 'mod5'))
2012-10-10 13:20:17,030 handle keycode pressing 24: key at
2012-10-10 13:20:17,031 scheduling key repeat timer with delay 660 for at / 24
2012-10-10 13:20:17,103 will process ui packet key-action
2012-10-10 13:20:17,103 process_key_action(['key-action', 2, 'ISO_Level3_Shift', False, ('mod2', 'mod5'), 65027, '', 108, 0, 0]) server keycode=108
2012-10-10 13:20:17,104 handle_key(2,False,ISO_Level3_Shift,65027,108,('mod2', 'mod5'))
2012-10-10 13:20:17,105 handle keycode unpressing 108: key ISO_Level3_Shift
2012-10-10 13:20:17,105 cancelling key repeat timer: 1304 for ISO_Level3_Shift / 108
2012-10-10 13:20:17,111 will process ui packet key-action
2012-10-10 13:20:17,111 process_key_action(['key-action', 2, 'q', False, ('mod2',), 113, 'q', 24, 0, 0]) server keycode=24
2012-10-10 13:20:17,112 handle_key(2,False,q,113,24,('mod2',))
2012-10-10 13:20:17,112 handle keycode unpressing 24: key q
2012-10-10 13:20:17,113 cancelling key repeat timer: 1310 for q / 24

So it looks like the "@" / "at" is properly detected.


Sat, 23 Jan 2021 04:45:46 GMT - migration script:

this ticket has been moved to: https://github.com/Xpra-org/xpra/issues/108