Bug 1503128 - update reverse keymaps for qemu vnc server
Summary: update reverse keymaps for qemu vnc server
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Red Hat Enterprise Linux Advanced Virtualization
Classification: Red Hat
Component: qemu-kvm
Version: 8.0
Hardware: Unspecified
OS: Unspecified
medium
unspecified
Target Milestone: rc
: 8.0
Assignee: Gerd Hoffmann
QA Contact: Guo, Zhiyi
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2017-10-17 12:41 UTC by Gerd Hoffmann
Modified: 2020-01-20 10:33 UTC (History)
13 users (show)

Fixed In Version: qemu-kvm-4.1.0-1.module+el8.1.0+3966+4a23dca1
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed: 2019-11-06 07:10:39 UTC
Type: Bug
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)
de and fr keysyms diff (36.62 KB, text/html)
2017-11-13 10:25 UTC, Guo, Zhiyi
no flags Details
picture show positions of missing/incorrect keys (167.37 KB, image/png)
2019-09-11 07:53 UTC, Guo, Zhiyi
no flags Details
missing and incorrect keys for fr (959.21 KB, image/jpeg)
2019-09-11 09:01 UTC, Guo, Zhiyi
no flags Details
A picture show missing keys (581.80 KB, image/jpeg)
2019-09-12 09:01 UTC, Guo, Zhiyi
no flags Details


Links
System ID Private Priority Status Summary Last Updated
Red Hat Product Errata RHBA-2019:3723 0 None None None 2019-11-06 07:11:18 UTC

Description Gerd Hoffmann 2017-10-17 12:41:01 UTC
Description of problem:
$subject

https://git.qemu.org/?p=qemu.git;a=commitdiff;h=a7815faffb2bd594b92aa3542d7b799cc89c5414

Comment 2 Gerd Hoffmann 2017-11-01 07:36:53 UTC
Some more background:

The vnc protocol traditionally sends keysyms (basically keymap translated key events).  Qemu must send keycodes to the guest though, so qemu must translate keysyms back to keycodes.  This is why the '-k $keymap' switch exists, and the files in pc-bios/keymaps are the reverse maps.

The quality of the reverse maps not very good though.  In the best case they are only outdated (untouched since the initial commit in 2004), but there also cases where mappings are incomplete or plain wrong.  There are bugzillas for the fr-ca map for example.  I didn't feel like checking them all manually, so I created a tool to generate them from xkb data instead.

Yes, keymaps are actually changing.  For example they got more symbols in levels 3 and 4 (altgr and altgr+shift) over the last years, due to unicode becoming commonplace so symbols outside the traditional 8-bit sets (latin*) can easily be used now.

Comment 3 Miroslav Rezanina 2017-11-08 17:58:56 UTC
Fix included in qemu-kvm-rhev-2.10.0-5.el7

Comment 5 Guo, Zhiyi 2017-11-13 10:25:46 UTC
Created attachment 1351499 [details]
de and fr keysyms diff

Hi Gerd,

   Could you tell me how to verify this bug? Since there are a lot of languages I think are affected with your fix and my automation only covers languages 'de' and 'fr' for now..Cover all languages will consume a lot of time. But even for de and fr, I still see the keysyms bugs for them..

For example, use ps2 kbd and language de, input dead_circumflex(the keycode 49 ,keysym 0xfe52) and I get a wrong keysym adiaeresis(keycode 48,keysym 0xe4)

Use ps2 kbd and language fr, input threesuperior(the keycode 49 ,keysym 0xb3) and I get a wrong keysym XF86AudioMedia(keycode 234,keysym 0x1008ff32)

If you have interests, I have a test report about de and fr, although I don't double check all of the keys, but the result looks reasonable to me.. the result is a diff between the keysyms generated by guest(left) and the keysyms generated by host(right). Attach it here.

BR/
Guo, Zhiyi

Comment 6 Guo, Zhiyi 2017-11-13 10:27:28 UTC
And I don't know how to report bug for the languages? Please comment..

Comment 7 Gerd Hoffmann 2017-11-13 11:14:35 UTC
(In reply to Guo, Zhiyi from comment #5)
> Created attachment 1351499 [details]
> de and fr keysyms diff
> 
> Hi Gerd,
> 
>    Could you tell me how to verify this bug? Since there are a lot of
> languages I think are affected with your fix and my automation only covers
> languages 'de' and 'fr' for now..Cover all languages will consume a lot of
> time. But even for de and fr, I still see the keysyms bugs for them..

Limiting things to the automated languages is fine.

> For example, use ps2 kbd and language de, input dead_circumflex(the keycode
> 49 ,keysym 0xfe52) and I get a wrong keysym adiaeresis(keycode 48,keysym
> 0xe4)

dead_circumflex is twice on the german keymap:

# evdev 40 (0x28), QKeyCode "apostrophe", number 0x28
adiaeresis 0x28
Adiaeresis 0x28 shift
dead_circumflex 0x28 altgr
dead_caron 0x28 shift altgr

# evdev 41 (0x29), QKeyCode "grave_accent", number 0x29
dead_circumflex 0x29
degree 0x29 shift
U2032 0x29 altgr
U2033 0x29 shift altgr

So if qemu does see the keysym it doesn't know which of the two possible keycodes generated it.  It probably makes sense to prefer the version without modifier keys in this case.  Can you file a new bug for this one?

> Use ps2 kbd and language fr, input threesuperior(the keycode 49 ,keysym
> 0xb3) and I get a wrong keysym XF86AudioMedia(keycode 234,keysym 0x1008ff32)

Hmm?  keycode 49 is twosuperior for fr according to the gnome keyboard layout tool.

Comment 8 Guo, Zhiyi 2017-11-14 07:28:27 UTC
Before report bug, I have corrected some bugs from my autotest and rerun it for languages de, manual double check the result, I get the final results for language de:

device: ps2 kbd
correct keysym(present by host)                   wrong keysym(present by guest)
keycode 49 (keysym 0xfe52, dead_circumflex)       keycode 48 (keysym 0xe4, adiaeresis)
keycode 15 (keysym 0x26, ampersand)               keycode 45 (keysym 0x4b, K)
keycode 19 (keysym 0xb0, degree)                  keycode 49 (keysym 0x1002033, U2033)
keycode 47 (keysym 0xfe60, dead_belowdot)         keycode 44 (keysym 0xfe56, dead_abovedot)
keycode 51 (keysym 0xad1, rightsinglequotemark)   keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 61 (keysym 0xaa9, emdash)                 keycode 234 (keysym 0x1008ff32, XF86AudioMedia)

usb-kbd
correct keysym(present by host)                   wrong keysym(present by guest)
keycode 49 (keysym 0xfe52, dead_circumflex)       keycode 48 (keysym 0xe4, adiaeresis)
keycode 15 (keysym 0x26, ampersand)               keycode 45 (keysym 0x4b, K)
keycode 19 (keysym 0xb0, degree)                  keycode 49 (keysym 0x1002033, U2033)
keycode 47 (keysym 0xfe60, dead_belowdot)         keycode 44 (keysym 0xfe56, dead_abovedot)
keycode 51 (keysym 0xad1, rightsinglequotemark)   missing!
keycode 55 (keysym 0xafd, singlelowquotemark)     missing!
keycode 56 (keysym 0xad0, leftsinglequotemark)    missing!
keycode 57 (keysym 0xad1, rightsinglequotemark)   missing!
keycode 61 (keysym 0xaa9, emdash)                 missing!

virtio-keyboard-pci
correct keysym(present by host)                   wrong keysym(present by guest)
keycode 49 (keysym 0xfe52, dead_circumflex)       keycode 48 (keysym 0xe4, adiaeresis)
keycode 15 (keysym 0x26, ampersand)               keycode 45 (keysym 0x4b, K)
keycode 19 (keysym 0xb0, degree)                  keycode 49 (keysym 0x1002033, U2033)
keycode 47 (keysym 0xfe60, dead_belowdot)         keycode 44 (keysym 0xfe56, dead_abovedot)
keycode 51 (keysym 0xad1, rightsinglequotemark)   missing!
keycode 55 (keysym 0xafd, singlelowquotemark)     missing!
keycode 56 (keysym 0xad0, leftsinglequotemark)    missing!
keycode 57 (keysym 0xad1, rightsinglequotemark)   missing!
keycode 61 (keysym 0xaa9, emdash)                 missing!

For fr result, I will post the result after autotest finish.
Hi Gerd,
   For language de, the wrong keysyms and missing keysyms are because of the reason you mentioned in comment 7?
BR/
Guo, Zhiyi

Comment 9 Gerd Hoffmann 2017-11-14 08:23:41 UTC
(In reply to Guo, Zhiyi from comment #8)
> Before report bug, I have corrected some bugs from my autotest and rerun it
> for languages de, manual double check the result, I get the final results
> for language de:
> 
> device: ps2 kbd
> correct keysym(present by host)                   wrong keysym(present by
> guest)
> keycode 49 (keysym 0xfe52, dead_circumflex)       keycode 48 (keysym 0xe4,
> adiaeresis)
> keycode 15 (keysym 0x26, ampersand)               keycode 45 (keysym 0x4b, K)
> keycode 19 (keysym 0xb0, degree)                  keycode 49 (keysym
> 0x1002033, U2033)
> keycode 47 (keysym 0xfe60, dead_belowdot)         keycode 44 (keysym 0xfe56,
> dead_abovedot)

These keysyms indeed all have multiple mappings, which is most likely the root cause here.

> keycode 51 (keysym 0xad1, rightsinglequotemark)   keycode 234 (keysym
> 0x1008ff32, XF86AudioMedia)
> keycode 61 (keysym 0xaa9, emdash)                 keycode 234 (keysym
> 0x1008ff32, XF86AudioMedia)

Dunno where this comes from.
Could be small differences in the keymaps.
There are two german maps (for text console, loaded using 'loadkeys'):

# find /lib/kbd/keymaps -name de.map.gz
/lib/kbd/keymaps/legacy/i386/qwertz/de.map.gz
/lib/kbd/keymaps/xkb/de.map.gz

You probably get different results depending on the keymap you are running the test with.  I expect the xkb map works better, this is most likely generated from xkbcommon, which used for the qemu reverse maps too.

> usb-kbd
> keycode 51 (keysym 0xad1, rightsinglequotemark)   missing!
> keycode 55 (keysym 0xafd, singlelowquotemark)     missing!
> keycode 56 (keysym 0xad0, leftsinglequotemark)    missing!
> keycode 57 (keysym 0xad1, rightsinglequotemark)   missing!
> keycode 61 (keysym 0xaa9, emdash)                 missing!

This most likely comes from usb-kbd not supporting all keys.
 
> virtio-keyboard-pci
> keycode 51 (keysym 0xad1, rightsinglequotemark)   missing!

Likewise.

Comment 10 Guo, Zhiyi 2017-11-14 09:09:49 UTC
(In reply to Gerd Hoffmann from comment #9)
> (In reply to Guo, Zhiyi from comment #8)
> > Before report bug, I have corrected some bugs from my autotest and rerun it
> > for languages de, manual double check the result, I get the final results
> > for language de:
> > 
> > device: ps2 kbd
> > correct keysym(present by host)                   wrong keysym(present by
> > guest)
> > keycode 49 (keysym 0xfe52, dead_circumflex)       keycode 48 (keysym 0xe4,
> > adiaeresis)
> > keycode 15 (keysym 0x26, ampersand)               keycode 45 (keysym 0x4b, K)
> > keycode 19 (keysym 0xb0, degree)                  keycode 49 (keysym
> > 0x1002033, U2033)
> > keycode 47 (keysym 0xfe60, dead_belowdot)         keycode 44 (keysym 0xfe56,
> > dead_abovedot)
> 
> These keysyms indeed all have multiple mappings, which is most likely the
> root cause here.

So any suggestions for how to report such bug? During double check the Fr results, I see a lot of wrong keysyms are presented by guest. I think one bug per language is a horrible idea and I don't know whether other languages except fr are suffering the same problem. This makes me thought someone may report same issue again and again, and we need to test and verify the same issue repeatly:( 

> 
> > keycode 51 (keysym 0xad1, rightsinglequotemark)   keycode 234 (keysym
> > 0x1008ff32, XF86AudioMedia)
> > keycode 61 (keysym 0xaa9, emdash)                 keycode 234 (keysym
> > 0x1008ff32, XF86AudioMedia)
> 
> Dunno where this comes from.
> Could be small differences in the keymaps.
> There are two german maps (for text console, loaded using 'loadkeys'):
> 
> # find /lib/kbd/keymaps -name de.map.gz
> /lib/kbd/keymaps/legacy/i386/qwertz/de.map.gz
> /lib/kbd/keymaps/xkb/de.map.gz
> 
> You probably get different results depending on the keymap you are running
> the test with.  I expect the xkb map works better, this is most likely
> generated from xkbcommon, which used for the qemu reverse maps too.

For guest, I was using the default settings of rhel7.5. For client running a remote-viewer, it is a rhel7.5 host also with default settings. Use xev -event keyboard and input 'rightsinglequotemark' and 'emdash', I can get 'rightsinglequotemark' and 'emdash'. So the keysyms send to guest I think should be the same 'rightsinglequotemark' and 'emdash'


> 
> > usb-kbd
> > keycode 51 (keysym 0xad1, rightsinglequotemark)   missing!
> > keycode 55 (keysym 0xafd, singlelowquotemark)     missing!
> > keycode 56 (keysym 0xad0, leftsinglequotemark)    missing!
> > keycode 57 (keysym 0xad1, rightsinglequotemark)   missing!
> > keycode 61 (keysym 0xaa9, emdash)                 missing!
> 
> This most likely comes from usb-kbd not supporting all keys.
>  
> > virtio-keyboard-pci
> > keycode 51 (keysym 0xad1, rightsinglequotemark)   missing!
> 
> Likewise.
Same here, many keys are also missing in fr and other languages may have same problem. Add all missing keys found in 'de' and 'fr' to exist bug 1512456 and bug 1512459 may only solve the issues for 'de' and 'fr', but won't cure the pain for other languages users. Even for 'de' and 'fr', add all missing keys I think are quite effort consuming:(

Comment 11 Gerd Hoffmann 2017-11-14 09:47:38 UTC
  Hi,

> > These keysyms indeed all have multiple mappings, which is most likely the
> > root cause here.
> 
> So any suggestions for how to report such bug? During double check the Fr
> results, I see a lot of wrong keysyms are presented by guest. I think one
> bug per language is a horrible idea and I don't know whether other languages
> except fr are suffering the same problem. This makes me thought someone may
> report same issue again and again, and we need to test and verify the same
> issue repeatly:( 

Just one bug, add the de map cases as example there.  The underlying issue is not something in the individual keymaps, so it doesn't make sense to file a bug for each and every language.

> > # find /lib/kbd/keymaps -name de.map.gz
> > /lib/kbd/keymaps/legacy/i386/qwertz/de.map.gz
> > /lib/kbd/keymaps/xkb/de.map.gz
> > 
> > You probably get different results depending on the keymap you are running
> > the test with.  I expect the xkb map works better, this is most likely
> > generated from xkbcommon, which used for the qemu reverse maps too.
> 
> For guest, I was using the default settings of rhel7.5.

Ah, right the guest keymap doesn't matter.  /me is confused ...
Hmm, ok, need to look into this.
Can you share a link to the test so I can try reproducing this locally?

> Same here, many keys are also missing in fr and other languages may have
> same problem. Add all missing keys found in 'de' and 'fr' to exist bug
> 1512456 and bug 1512459 may only solve the issues for 'de' and 'fr', but
> won't cure the pain for other languages users. Even for 'de' and 'fr', add
> all missing keys I think are quite effort consuming:(

Bug 1512456 and bug 1512459 must be fixed first.  I'd suggest to limit keymap testing to ps2 keyboard until these two bugs are fixed.

Comment 13 Guo, Zhiyi 2017-11-15 08:18:09 UTC
The result for fr and ps2 keyboard:
correct keysym(present by host)                   wrong keysym(present by guest)
keycode 49 (keysym 0xb3, threesuperior)           keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 10 (keysym 0x26, ampersand)               keycode 45 (keysym 0x6b, k)
keycode 49 (keysym 0xb9, onesuperior)             keycode 10 (keysym 0xfe5a, dead_caron)
keycode 49 (keysym 0xfe5b, dead_cedilla)          keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 10 (keysym 0xfe5a, dead_caron)            keycode 48 (keysym 0xfe51, dead_acute)
keycode 10 (keysym 0xfe5c, dead_ogonek)           keycode 21 (keysym 0xb1, plusminus)
keycode 11 (keysym 0x7e, asciitilde)              keycode 49 (keysym 0xb9, onesuperior)
keycode 11 (keysym 0xc9, Eacute)                  keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 12 (keysym 0xfe55, dead_breve)            keycode 51 (keysym 0xfe54, dead_macron)
keycode 13 (keysym 0x1002014, U2014)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 14 (keysym 0x1002013, U2013)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 15 (keysym 0x7c, bar)                     keycode 94 (keysym 0x8bc, lessthanequal)                     
keycode 15 (keysym 0x1002011, U2011)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 16 (keysym 0xc8, Egrave)                  keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 18 (keysym 0xc7, Ccedilla)                keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 19 (keysym 0x40, at)                      keycode 38 (keysym 0xe4, adiaeresis)
keycode 19 (keysym 0xc0, Agrave)                  keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 20 (keysym 0x8bd, notequal)               keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 21 (keysym 0xb1, plusminus)               keycode 18 (keysym 0xc7, Ccedilla)
keycode 25 (keysym 0xe2, acircumflex)             keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 25 (keysym 0xc2, Acircumflex)             keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 26 (keysym 0xa2, cent)                    keycode 54 (keysym 0xae, registered)
keycode 27 (keysym 0xea, ecircumflex)             keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 27 (keysym 0xca, Ecircumflex)             keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 28 (keysym 0xfe, thorn)                   keycode 33 (keysym 0xf4, ocircumflex)
keycode 28 (keysym 0xde, THORN)                   keycode 33 (keysym 0xd4, Ocircumflex)
keycode 29 (keysym 0xff, ydiaeresis)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 29 (keysym 0x13be, Ydiaeresis)            keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 30 (keysym 0xfb, ucircumflex)             keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 30 (keysym 0xdb, Ucircumflex)             keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 32 (keysym 0x13bd, oe)                    keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 32 (keysym 0x13bc, OE)                    keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 33 (keysym 0xf4, ocircumflex)             keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 33 (keysym 0xd4, Ocircumflex)             keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 34 (keysym 0xfe53, dead_tilde)            keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 35 (keysym 0xf8, oslash)                  keycode 32 (keysym 0x13bd, oe)
keycode 35 (keysym 0xd8, Oslash)                  keycode 32 (keysym 0x13bc, OE)
keycode 38 (keysym 0xe4, adiaeresis)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 38 (keysym 0xc4, Adiaeresis)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 39 (keysym 0xafe, doublelowquotemark)     keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 40 (keysym 0xeb, ediaeresis)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 40 (keysym 0xcb, Ediaeresis)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 41 (keysym 0xad0, leftsinglequotemark)    keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 41 (keysym 0xafd, singlelowquotemark)     keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 42 (keysym 0xad1, rightsinglequotemark)   keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 42 (keysym 0xa5, yen)                     keycode 29 (keysym 0x13be, Ydiaeresis)
keycode 43 (keysym 0xf0, eth)                     keycode 40 (keysym 0xeb, ediaeresis)
keycode 43 (keysym 0xd0, ETH)                     keycode 40 (keysym 0xcb, Ediaeresis)
keycode 44 (keysym 0xfc, udiaeresis)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 44 (keysym 0xdc, Udiaeresis)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 45 (keysym 0xef, idiaeresis)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 45 (keysym 0xcf, Idiaeresis)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 46 (keysym 0x1000140, U0140)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 46 (keysym 0x100013f, U013F)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 47 (keysym 0xf6, odiaeresis)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 47 (keysym 0xd6, Odiaeresis)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 48 (keysym 0xfe51, dead_acute)            keycode 58 (keysym 0xbf, questiondown)
keycode 48 (keysym 0xd9, Ugrave)                  keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 51 (keysym 0xfe54, dead_macron)           keycode 35 (keysym 0xd8, Oslash)
keycode 52 (keysym 0xab, guillemotleft)           keycode 25 (keysym 0xe2, acircumflex)
keycode 52 (keysym 0xad2, leftdoublequotemark)    keycode 55 (keysym 0x8fb, leftarrow)
keycode 53 (keysym 0xad3, rightdoublequotemark)   keycode 56 (keysym 0x8fc, uparrow)
keycode 54 (keysym 0xae, registered)              keycode 27 (keysym 0xca, Ecircumflex)
keycode 55 (keysym 0x100202f, U202F)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 55 (keysym 0x8fb, leftarrow)              keycode 29 (keysym 0x13be, Ydiaeresis)
keycode 56 (keysym 0x8fe, downarrow)              keycode 30 (keysym 0xfb, ucircumflex)
keycode 56 (keysym 0x8fc, uparrow)                keycode 30 (keysym 0xdb, Ucircumflex)
keycode 57 (keysym 0xac, notsign)                 keycode 49 (keysym 0xb9, onesuperior)
keycode 57 (keysym 0x8fd, rightarrow)             keycode 31 (keysym 0xce, Icircumflex)
keycode 58 (keysym 0xbf, questiondown)            keycode 20 (keysym 0x5d, bracketright)
keycode 58 (keysym 0x1002026, U2026)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 59 (keysym 0x10022c5, U22C5)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 60 (keysym 0x1002215, U2215)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 61 (keysym 0xa1, exclamdown)              keycode 10 (keysym 0xfe5a, dead_caron)
keycode 61 (keysym 0x1002212, U2212)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)

Comment 14 Guo, Zhiyi 2017-11-15 08:21:56 UTC
Hi Gerd,

   Any finds about wrong keysym XF86AudioMedia for de and fr? If issues are all covered by comment 11, I can summary at this bug and judge whether this bug can be verified:)

BR/
Guo, Zhiyi

Comment 15 Guo, Zhiyi 2017-12-14 16:04:54 UTC
Hi Ademar,

   Base on comment 5 - comment 13 and the Bug 1513870 - For VNC connection, characters '|' and '<' are both recognized as '>' in linux guests, while '<' and '>' are both recognized as '|' in windows guest, I think we should let this bug FailQA first and let Gerd to investigate after his back?

BR/
Guo, Zhiyi

Comment 17 Guo, Zhiyi 2017-12-15 01:59:28 UTC
Base on comment 15, FailQA

Comment 18 Gerd Hoffmann 2018-01-12 10:55:22 UTC
See also bug 1513870.
Just sent a patch for that one, so adding it as dependency here.

Comment 19 Guo, Zhiyi 2018-02-26 09:26:00 UTC
Hi Gerd,

   How do we treat this bug? Should it be moved to 7.6 or close this one and use a new bug to track the keymaps issue for vnc? I have tested again using -k de and ps2 keyboard against latest qemu-kvm-rhev-2.10.0-21.el7.x86_64, the incorrect keys are still happening as comment 8. Go through comment 5 to comment 13, seems there are multiple uncertain parts that cause buggy keysyms.

BR/
Zhiyi, Guo

Comment 20 Gerd Hoffmann 2018-02-26 09:42:25 UTC
(In reply to Guo, Zhiyi from comment #19)
> Hi Gerd,
> 
>    How do we treat this bug? Should it be moved to 7.6 or close this one and
> use a new bug to track the keymaps issue for vnc?

Bug 1513870 is a workaround for the most annoying case in the en-us keymap, it's not a complete fix.  Upstream fix went in last week, but IMO this isn't serve enough to qualify as 7.5 blocker.

So lets keep this open, to fix it for real in 7.6 (and possibly 7.5.z).

Comment 22 Gerd Hoffmann 2018-02-26 10:51:07 UTC
please test
https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=15410008

Comment 23 Guo, Zhiyi 2018-03-13 08:24:35 UTC
(In reply to Gerd Hoffmann from comment #22)
> please test
> https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=15410008

Hi Gerd,

   Could you help to regenerate one..? I just notice this needinfo. FYI, I have just tried on upstream qemu 2.11.50, I can see the result is better than downstream for language de. Test the problem keys and ps2-kbd in https://bugzilla.redhat.com/show_bug.cgi?id=1503128#c8
, only keycode 51 (keysym 0xad1, rightsinglequotemark) is missed in guest, qemu will prompt:(qemu) qemu-system-x86_64: warning: no scancode found for keysym 2769

But try on some keys against fr, result is changed, but it is still bad. The difference between the downsream and upstream I think is keycode 234 (keysym 0x1008ff32, XF86AudioMedia) is replaced by no scancode found for keysym xx

BR/
Zhiyi, Guo

Comment 25 Guo, Zhiyi 2018-04-24 08:48:48 UTC
Test against this package https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=15733975

Result for de:
correct keysym(present by host)                    wrong keysym(present by guest)
keycode 51 (keysym 0xad1, rightsinglequotemark)    keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 55 (keysym 0xafd, singlelowquotemark)      keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 56 (keysym 0xad0, leftsinglequotemark)     keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 57 (keysym 0xad1, rightsinglequotemark)    keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 61 (keysym 0xaa9, emdash)                  keycode 234 (keysym 0x1008ff32, XF86AudioMedia)

Result for fr:
correct keysym(present by host)                   wrong keysym(present by guest)
keycode 49 (keysym 0xb3, threesuperior)           keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 49 (keysym 0xb9, onesuperior)             keycode 10 (keysym 0xfe5a, dead_caron)
keycode 49 (keysym 0xfe5b, dead_cedilla)          keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 10 (keysym 0xfe5a, dead_caron)            keycode 48 (keysym 0xfe51, dead_acute)
keycode 10 (keysym 0xfe5c, dead_ogonek)           keycode 21 (keysym 0xb1, plusminus)
keycode 11 (keysym 0xc9, Eacute)                  keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 12 (keysym 0xfe55, dead_breve)            keycode 51 (keysym 0xfe54, dead_macron)
keycode 13 (keysym 0x1002014, U2014)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 14 (keysym 0x1002013, U2013)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 15 (keysym 0x1002011, U2011)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 16 (keysym 0xc8, Egrave)                  keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 18 (keysym 0xc7, Ccedilla)                keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 19 (keysym 0xc0, Agrave)                  keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 20 (keysym 0x8bd, notequal)               keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 21 (keysym 0xb1, plusminus)               keycode 18 (keysym 0xc7, Ccedilla)
keycode 25 (keysym 0xe2, acircumflex)             keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 25 (keysym 0xc2, Acircumflex)             keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 27 (keysym 0xea, ecircumflex)             keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 27 (keysym 0xca, Ecircumflex)             keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 28 (keysym 0xfe, thorn)                   keycode 33 (keysym 0xf4, ocircumflex)
keycode 28 (keysym 0xde, THORN)                   keycode 33 (keysym 0xd4, Ocircumflex)
keycode 29 (keysym 0xff, ydiaeresis)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 29 (keysym 0x13be, Ydiaeresis)            keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 30 (keysym 0xfb, ucircumflex)             keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 30 (keysym 0xdb, Ucircumflex)             keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 32 (keysym 0x13bd, oe)                    keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 32 (keysym 0x13bc, OE)                    keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 33 (keysym 0xf4, ocircumflex)             keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 33 (keysym 0xd4, Ocircumflex)             keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 34 (keysym 0xfe53, dead_tilde)            keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 35 (keysym 0xf8, oslash)                  keycode 32 (keysym 0x13bd, oe)
keycode 35 (keysym 0xd8, Oslash)                  keycode 32 (keysym 0x13bc, OE)
keycode 38 (keysym 0xe4, adiaeresis)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 38 (keysym 0xc4, Adiaeresis)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 39 (keysym 0xafe, doublelowquotemark)     keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 40 (keysym 0xeb, ediaeresis)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 40 (keysym 0xcb, Ediaeresis)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 41 (keysym 0xad0, leftsinglequotemark)    keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 41 (keysym 0xafd, singlelowquotemark)     keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 42 (keysym 0xad1, rightsinglequotemark)   keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 42 (keysym 0xa5, yen)                     keycode 29 (keysym 0x13be, Ydiaeresis)
keycode 43 (keysym 0xf0, eth)                     keycode 40 (keysym 0xeb, ediaeresis)
keycode 43 (keysym 0xd0, ETH)                     keycode 40 (keysym 0xcb, Ediaeresis)
keycode 44 (keysym 0xfc, udiaeresis)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 44 (keysym 0xdc, Udiaeresis)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 45 (keysym 0xef, idiaeresis)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 45 (keysym 0xcf, Idiaeresis)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 46 (keysym 0x1000140, U0140)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 46 (keysym 0x100013f, U013F)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 47 (keysym 0xf6, odiaeresis)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 47 (keysym 0xd6, Odiaeresis)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 48 (keysym 0xfe51, dead_acute)            keycode 58 (keysym 0xbf, questiondown)
keycode 48 (keysym 0xd9, Ugrave)                  keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 51 (keysym 0xfe54, dead_macron)           keycode 35 (keysym 0xd8, Oslash)
keycode 52 (keysym 0xab, guillemotleft)           keycode 25 (keysym 0xe2, acircumflex)
keycode 52 (keysym 0xad2, leftdoublequotemark)    keycode 55 (keysym 0x8fb, leftarrow)
keycode 53 (keysym 0xad3, rightdoublequotemark)   keycode 56 (keysym 0x8fc, uparrow)
keycode 54 (keysym 0xae, registered)              keycode 27 (keysym 0xca, Ecircumflex)
keycode 55 (keysym 0x100202f, U202F)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 55 (keysym 0x8fb, leftarrow)              keycode 29 (keysym 0x13be, Ydiaeresis)
keycode 56 (keysym 0x8fe, downarrow)              keycode 30 (keysym 0xfb, ucircumflex)
keycode 56 (keysym 0x8fc, uparrow)                keycode 30 (keysym 0xdb, Ucircumflex)
keycode 57 (keysym 0xac, notsign)                 keycode 49 (keysym 0xb9, onesuperior)
keycode 57 (keysym 0x8fd, rightarrow)             keycode 31 (keysym 0xce, Icircumflex)
keycode 58 (keysym 0xbf, questiondown)            keycode 20 (keysym 0x5d, bracketright)
keycode 58 (keysym 0x1002026, U2026)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 59 (keysym 0x10022c5, U22C5)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 60 (keysym 0x1002215, U2215)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)
keycode 61 (keysym 0xa1, exclamdown)              keycode 10 (keysym 0xfe5a, dead_caron)
keycode 61 (keysym 0x1002212, U2212)              keycode 234 (keysym 0x1008ff32, XF86AudioMedia)

Comment 26 Guo, Zhiyi 2018-04-24 08:51:57 UTC
And for media keys, like:
'NEXTSONG',
'PREVIOUSSONG',
'STOPCD',
'PLAYPAUSE',
'MUTE',
'VOLUMEUP',
'VOLUMEDOWN',
'MAIL',
'CALC',
'COMPUTER',
'SEARCH',
'HOMEPAGE',
'BACK',
'FORWARD',
'STOP',
'REFRESH',
'FAVORITES'

All these keys are lost in guest if set qemu keysym to de and fr

Comment 27 Gerd Hoffmann 2018-08-10 11:52:47 UTC
Can you re-test against a 2.12 build?
The rebase should have picked up a bunch fixes from upstream.

Comment 28 liunana 2018-08-16 01:58:29 UTC
(In reply to Gerd Hoffmann from comment #27)
> Can you re-test against a 2.12 build?
> The rebase should have picked up a bunch fixes from upstream.

The result for ps2 keyboard:

# xev -event keyboard | grep keysym
Result for fr keyboard:

correct keysym(present by host)                                                                                                                     wrong keysym(present by guest)
state 0x2010, keycode 15 (keysym 0xa7, section), same_screen YES,                                                          state 0x2010, keycode 61 (keysym 0x3d, equal), same_screen YES,
state 0x2010, keycode 15 (keysym 0xa7, section), same_screen YES,                                                           state 0x2010, keycode 61 (keysym 0x3d, equal), same_screen YES,
state 0x2010, keycode 17 (keysym 0x21, exclam), same_screen YES,                                                           state 0x2010, keycode 15 (keysym 0xa7, section), same_screen YES
state 0x2010, keycode 17 (keysym 0x21, exclam), same_screen YES,                                                           state 0x2010, keycode 15 (keysym 0xa7, section), same_screen YES
state 0x2010, keycode 21 (keysym 0x2d, minus), same_screen YES,                                                             null
state 0x2010, keycode 21 (keysym 0x2d, minus), same_screen YES,                                                             null
state 0x2010, keycode 132 (keysym 0x0, NoSymbol), same_screen YES,                                                      state 0x2010, keycode 21 (keysym 0x2d, minus), same_screen YES
state 0x2010, keycode 132 (keysym 0x0, NoSymbol), same_screen YES,                                                      state 0x2010, keycode 21 (keysym 0x2d, minus), same_screen YES
state 0x2010, keycode 61 (keysym 0x3d, equal), same_screen YES,                                                               null
state 0x2010, keycode 61 (keysym 0x3d, equal), same_screen YES,                                                                null
state 0x2010, keycode 97 (keysym 0x0, NoSymbol), same_screen YES,                                                        null
state 0x2010, keycode 97 (keysym 0x0, NoSymbol), same_screen YES,                                                        null
state 0x2010, keycode 102 (keysym 0xff22, Muhenkan), same_screen YES,                                                   null
state 0x2010, keycode 102 (keysym 0xff22, Muhenkan), same_screen YES,                                                    null
state 0x2010, keycode 100 (keysym 0xff23, Henkan_Mode), same_screen YES,                                             null
state 0x2010, keycode 100 (keysym 0xff23, Henkan_Mode), same_screen YES,                                              null
state 0x2010, keycode 101 (keysym 0xff27, Hiragana_Katakana), same_screen YES,                                     null
state 0x2010, keycode 101 (keysym 0xff27, Hiragana_Katakana), same_screen YES,                                      null
state 0x2000, keycode 127 (keysym 0xff13, Pause), same_screen YES,                                                            null
state 0x2000, keycode 127 (keysym 0xff13, Pause), same_screen YES,                                                            null



Result for de keyboard:
correct keysym(present by host)                                                                                              wrong keysym(present by guest)
state 0x4010, keycode 132 (keysym 0x0, NoSymbol), same_screen YES,                             null
state 0x4010, keycode 132 (keysym 0x0, NoSymbol), same_screen YES,                             null
state 0x4010, keycode 97 (keysym 0x0, NoSymbol), same_screen YES,                                null
state 0x4010, keycode 97 (keysym 0x0, NoSymbol), same_screen YES,                                null
state 0x4010, keycode 102 (keysym 0xff22, Muhenkan), same_screen YES,                          null
state 0x4010, keycode 102 (keysym 0xff22, Muhenkan), same_screen YES,                          null
state 0x4010, keycode 100 (keysym 0xff23, Henkan_Mode), same_screen YES,                    null
state 0x4010, keycode 100 (keysym 0xff23, Henkan_Mode), same_screen YES,                    null
state 0x4010, keycode 101 (keysym 0xff27, Hiragana_Katakana), same_screen YES,             null
state 0x4010, keycode 101 (keysym 0xff27, Hiragana_Katakana), same_screen YES,             null
state 0x4000, keycode 127 (keysym 0xff13, Pause), same_screen YES,                                   null
state 0x4000, keycode 127 (keysym 0xff13, Pause), same_screen YES,                                    null

Comment 29 Guo, Zhiyi 2018-08-20 23:35:49 UTC
Hi Gerd, could you help to check the comment 28? Thanks!

Comment 30 Gerd Hoffmann 2018-08-21 06:06:06 UTC
Need to look at the french map issues in detail.  Seems to be improved but some issues left still.  So leaving the bug open for that, but deferring to 7.7.

German map looks good.  The keys with the null mapping are not present on a german keyboard in the first place, so that isn't a problem.

Comment 32 Gerd Hoffmann 2019-03-05 08:02:45 UTC
Moving to Advancen Virt.

Can you retest with a qemu 3.1 build please?

Also: In case the french map still has issues, can you check whenever the nodeadkeys map works better?
Use "qemu-keymap -l fr -v nodeadkeys" to generate one and pass it to qemu using -k

Comment 33 liunana 2019-03-05 13:48:27 UTC
(In reply to Gerd Hoffmann from comment #32)
> Moving to Advancen Virt.
> 
> Can you retest with a qemu 3.1 build please?
> 
> Also: In case the french map still has issues, can you check whenever the
> nodeadkeys map works better?
> Use "qemu-keymap -l fr -v nodeadkeys" to generate one and pass it to qemu
> using -k



Hi Gerd

I test German map first, the result seems terrible....
Both host and guest are x11 mode, I will test french map and add comments tomorrow .




correct keysym(present by host)                                           wrong keysym(present by guest)

state 0x2000, keycode 49 (keysym 0xb2, twosuperior), same_screen YES,      state 0x2000, keycode 11 (keysym 0xe9, eacute), same_screen YES
state 0x2000, keycode 49 (keysym 0xb2, twosuperior), same_screen YES,      state 0x2000, keycode 11 (keysym 0xe9, eacute), same_screen YES
state 0x2010, keycode 11 (keysym 0xe9, eacute), same_screen YES,     qemu-kvm: warning: no scancode found for keysym 233
state 0x2010, keycode 11 (keysym 0xe9, eacute), same_screen YES,     qemu-kvm: warning: no scancode found for keysym 233

state 0x2010, keycode 12 (keysym 0x22, quotedbl), same_screen YES,      state 0x2010, keycode 11 (keysym 0xe9, eacute), same_screen YES,
state 0x2010, keycode 12 (keysym 0x22, quotedbl), same_screen YES,      state 0x2010, keycode 11 (keysym 0xe9, eacute), same_screen YES,
state 0x2010, keycode 13 (keysym 0x27, apostrophe), same_screen YES,     state 0x2010, keycode 51 (keysym 0xb5, mu), same_screen YES,
state 0x2010, keycode 13 (keysym 0x27, apostrophe), same_screen YES,     state 0x2010, keycode 51 (keysym 0xb5, mu), same_screen YES,
state 0x2010, keycode 14 (keysym 0x28, parenleft), same_screen YES,       state 0x2010, keycode 17 (keysym 0x21, exclam), same_screen YES,
state 0x2010, keycode 14 (keysym 0x28, parenleft), same_screen YES,       state 0x2010, keycode 17 (keysym 0x21, exclam), same_screen YES,
state 0x2010, keycode 15 (keysym 0xa7, section), same_screen YES,       state 0x2010, keycode 12 (keysym 0x22, quotedbl), same_screen YES,
state 0x2010, keycode 15 (keysym 0xa7, section), same_screen YES,       state 0x2010, keycode 12 (keysym 0x22, quotedbl), same_screen YES,
state 0x2010, keycode 16 (keysym 0xe8, egrave), same_screen YES,      qemu-kvm: warning: no scancode found for keysym 232
state 0x2010, keycode 16 (keysym 0xe8, egrave), same_screen YES,      qemu-kvm: warning: no scancode found for keysym 232
state 0x2010, keycode 18 (keysym 0xe7, ccedilla), same_screen YES,     state 0x2010, keycode 10 (keysym 0x26, ampersand), same_screen YES,
state 0x2010, keycode 18 (keysym 0xe7, ccedilla), same_screen YES,     state 0x2010, keycode 10 (keysym 0x26, ampersand), same_screen YES,
state 0x2010, keycode 19 (keysym 0xe0, agrave), same_screen YES,       qemu-kvm: warning: no scancode found for keysym 224
state 0x2010, keycode 19 (keysym 0xe0, agrave), same_screen YES,        qemu-kvm: warning: no scancode found for keysym 224
state 0x2010, keycode 20 (keysym 0x29, parenright), same_screen YES,     state 0x2010, keycode 10 (keysym 0x26, ampersand), same_screen YES,
state 0x2010, keycode 20 (keysym 0x29, parenright), same_screen YES,     state 0x2010, keycode 10 (keysym 0x26, ampersand), same_screen YES,
state 0x2010, keycode 21 (keysym 0x2d, minus), same_screen YES,     state 0x2010, keycode 18 (keysym 0xe7, ccedilla), same_screen YES,
state 0x2010, keycode 21 (keysym 0x2d, minus), same_screen YES,     state 0x2010, keycode 18 (keysym 0xe7, ccedilla), same_screen YES,
state 0x2010, keycode 132 (keysym 0x0, NoSymbol), same_screen YES,      state 0x2010, keycode 61 (keysym 0x3d, equal), same_screen YES,
state 0x2010, keycode 132 (keysym 0x0, NoSymbol), same_screen YES,      state 0x2010, keycode 61 (keysym 0x3d, equal), same_screen YES,
state 0x2010, keycode 24 (keysym 0x61, a), same_screen YES,     state 0x2010, keycode 38 (keysym 0x71, q), same_screen YES,
state 0x2010, keycode 24 (keysym 0x61, a), same_screen YES,     state 0x2010, keycode 38 (keysym 0x71, q), same_screen YES,
state 0x2010, keycode 25 (keysym 0x7a, z), same_screen YES,     state 0x2010, keycode 29 (keysym 0x79, y), same_screen YES,
state 0x2010, keycode 25 (keysym 0x7a, z), same_screen YES,     state 0x2010, keycode 29 (keysym 0x79, y), same_screen YES,
state 0x2010, keycode 29 (keysym 0x79, y), same_screen YES,     state 0x2010, keycode 52 (keysym 0x77, w), same_screen YES,
state 0x2010, keycode 29 (keysym 0x79, y), same_screen YES,     state 0x2010, keycode 52 (keysym 0x77, w), same_screen YES,
state 0x2010, keycode 34 (keysym 0xfe52, dead_circumflex), same_screen YES,     state 0x2010, keycode 49 (keysym 0xb2, twosuperior), same_screen YES,
state 0x2010, keycode 34 (keysym 0xfe52, dead_circumflex), same_screen YES,     state 0x2010, keycode 49 (keysym 0xb2, twosuperior), same_screen YES,
state 0x2010, keycode 35 (keysym 0x24, dollar), same_screen YES,     state 0x2010, keycode 13 (keysym 0x27, apostrophe), same_screen YES,
state 0x2010, keycode 35 (keysym 0x24, dollar), same_screen YES,     state 0x2010, keycode 13 (keysym 0x27, apostrophe), same_screen YES,
state 0x2010, keycode 38 (keysym 0x71, q), same_screen YES,     state 0x2010, keycode 24 (keysym 0x61, a), same_screen YES,
state 0x2010, keycode 38 (keysym 0x71, q), same_screen YES,     state 0x2010, keycode 24 (keysym 0x61, a), same_screen YES,
state 0x2010, keycode 47 (keysym 0x6d, m), same_screen YES,     state 0x2010, keycode 58 (keysym 0x2c, comma), same_screen YES,
state 0x2010, keycode 47 (keysym 0x6d, m), same_screen YES,     state 0x2010, keycode 58 (keysym 0x2c, comma), same_screen YES,
state 0x2010, keycode 48 (keysym 0xf9, ugrave), same_screen YES,     qemu-kvm: warning: no scancode found for keysym 0
state 0x2010, keycode 48 (keysym 0xf9, ugrave), same_screen YES,     qemu-kvm: warning: no scancode found for keysym 0
state 0x2010, keycode 51 (keysym 0xb5, mu), same_screen YES,        state 0x2010, keycode 58 (keysym 0x2c, comma), same_screen YES,
state 0x2010, keycode 51 (keysym 0xb5, mu), same_screen YES,        state 0x2010, keycode 58 (keysym 0x2c, comma), same_screen YES,
state 0x2010, keycode 52 (keysym 0x77, w), same_screen YES,     state 0x2010, keycode 25 (keysym 0x7a, z), same_screen YES,
state 0x2010, keycode 52 (keysym 0x77, w), same_screen YES,     state 0x2010, keycode 25 (keysym 0x7a, z), same_screen YES,
state 0x2010, keycode 58 (keysym 0x2c, comma), same_screen YES,     state 0x2010, keycode 59 (keysym 0x3b, semicolon), same_screen YES,
state 0x2010, keycode 58 (keysym 0x2c, comma), same_screen YES,     state 0x2010, keycode 59 (keysym 0x3b, semicolon), same_screen YES,
state 0x2010, keycode 60 (keysym 0x3a, colon), same_screen YES,     state 0x2010, keycode 59 (keysym 0x3b, semicolon), same_screen YES,
state 0x2010, keycode 60 (keysym 0x3a, colon), same_screen YES,     state 0x2010, keycode 59 (keysym 0x3b, semicolon), same_screen YES,
state 0x2010, keycode 61 (keysym 0x3d, equal), same_screen YES,     state 0x2010, keycode 19 (keysym 0xe0, agrave), same_screen YES,
state 0x2010, keycode 61 (keysym 0x3d, equal), same_screen YES,     state 0x2010, keycode 19 (keysym 0xe0, agrave), same_screen YES,
state 0x2010, keycode 97 (keysym 0x0, NoSymbol), same_screen YES,      qemu-kvm: warning: no scancode found for keysym 0
state 0x2010, keycode 97 (keysym 0x0, NoSymbol), same_screen YES,       qemu-kvm: warning: no scancode found for keysym 0
state 0x2010, keycode 101 (keysym 0xff27, Hiragana_Katakana), same_screen YES,      qemu-kvm: warning: no scancode found for keysym 65314
state 0x2010, keycode 101 (keysym 0xff27, Hiragana_Katakana), same_screen YES,       qemu-kvm: warning: no scancode found for keysym 65314
state 0x2010, keycode 102 (keysym 0xff22, Muhenkan), same_screen YES,      qemu-kvm: warning: no scancode found for keysym 65319
state 0x2010, keycode 102 (keysym 0xff22, Muhenkan), same_screen YES,      qemu-kvm: warning: no scancode found for keysym 65319

Comment 34 liunana 2019-03-06 10:50:20 UTC

Hi, Gerd

I'm not sure I understand "check whenever the nodeadkeys map works better" when I test fr keyboard,please help check.

Test steps:

1. qemu-keymap -l fr -v nodeadkeys

2. choose Region & Language "French(no dead keys)"

3. boot guest with command "-vnc :0 -k fr"

4. get host keycode and guest keycode to compare.Result for fr keyboard:
# xev -event keyboard | grep keysym

correct keysym(present by host)                                           wrong keysym(present by guest)
state 0x4010, keycode 34 (keysym 0x5e, asciicircum), same_screen YES,     state 0x4010, keycode 18 (keysym 0xe7, ccedilla), same_screen YES,
state 0x4010, keycode 34 (keysym 0x5e, asciicircum), same_screen YES,     state 0x4010, keycode 18 (keysym 0xe7, ccedilla), same_screen YES,
state 0x4010, keycode 102 (keysym 0xff22, Muhenkan), same_screen YES,     qemu-kvm: warning: no scancode found for keysym 65314
state 0x4010, keycode 102 (keysym 0xff22, Muhenkan), same_screen YES,     qemu-kvm: warning: no scancode found for keysym 65314
state 0x4010, keycode 101 (keysym 0xff27, Hiragana_Katakana), same_screen YES,   qemu-kvm: warning: no scancode found for keysym 65319  
state 0x4010, keycode 101 (keysym 0xff27, Hiragana_Katakana), same_screen YES,   qemu-kvm: warning: no scancode found for keysym 65319


Best Regards

Liu Nana

Comment 35 Gerd Hoffmann 2019-03-07 07:23:56 UTC
> state 0x2010, keycode 24 (keysym 0x61, a), same_screen YES,     state
> 0x2010, keycode 38 (keysym 0x71, q), same_screen YES,

Hmm, totally messed up.  Can you double-check you actually used the correct keymaps?

Comment 36 Gerd Hoffmann 2019-03-07 07:27:11 UTC
> 1. qemu-keymap -l fr -v nodeadkeys

qemu-keymap -l fr -v nodeadkeys > /some/dir/fr-nodeadkeys

> 2. choose Region & Language "French(no dead keys)"

Yes (both guest and host).

> 3. boot guest with command "-vnc :0 -k fr"

"-vnc :0 -k /some/dir/fr-nodeadkeys"

Comment 37 liunana 2019-03-07 10:31:08 UTC
(In reply to Gerd Hoffmann from comment #35)
> > state 0x2010, keycode 24 (keysym 0x61, a), same_screen YES,     state
> > 0x2010, keycode 38 (keysym 0x71, q), same_screen YES,
> 
> Hmm, totally messed up.  Can you double-check you actually used the correct
> keymaps?



Hi, I retest German keymap with three ways:


One:
 Steps:
  1. boot guest with "-vnc :0 -k de"
  2. choose Region & Language "German(no dead keys)" inside both guest and host
  3. get host keycode and guest keycode to compare.Result for de keyboard:
    # xev -event keyboard | grep keysym

correct keysym(present by host)                                           wrong keysym(present by guest)
state 0x10, keycode 49 (keysym 0x5e, asciicircum), same_screen YES,    qemu-kvm: warning: no scancode found for keysym 94
state 0x10, keycode 49 (keysym 0x5e, asciicircum), same_screen YES,    qemu-kvm: warning: no scancode found for keysym 94
state 0x10, keycode 21 (keysym 0xb4, acute), same_screen YES,     qemu-kvm: warning: no scancode found for keysym 180
state 0x10, keycode 21 (keysym 0xb4, acute), same_screen YES,     qemu-kvm: warning: no scancode found for keysym 180
state 0x10, keycode 132 (keysym 0x0, NoSymbol), same_screen YES,     qemu-kvm: warning: no scancode found for keysym 0
state 0x10, keycode 132 (keysym 0x0, NoSymbol), same_screen YES,     qemu-kvm: warning: no scancode found for keysym 0
state 0x10, keycode 97 (keysym 0x0, NoSymbol), same_screen YES,     qemu-kvm: warning: no scancode found for keysym 0
state 0x10, keycode 97 (keysym 0x0, NoSymbol), same_screen YES,     qemu-kvm: warning: no scancode found for keysym 0
state 0x4010, keycode 102 (keysym 0xff22, Muhenkan), same_screen YES,     qemu-kvm: warning: no scancode found for keysym 65314
state 0x4010, keycode 102 (keysym 0xff22, Muhenkan), same_screen YES,     qemu-kvm: warning: no scancode found for keysym 65314
state 0x4010, keycode 101 (keysym 0xff27, Hiragana_Katakana), same_screen YES,   qemu-kvm: warning: no scancode found for keysym 65319  
state 0x4010, keycode 101 (keysym 0xff27, Hiragana_Katakana), same_screen YES,   qemu-kvm: warning: no scancode found for keysym 65319





Two:
 Steps:
  1. qemu-keymap -l de -v nodeadkeys > /root/de-nodeadkeys
  2. boot guest with "-vnc :0 -k /root/de-nodeadkeys"
  3. choose Region & Language "German(no dead keys)" inside both guest and host
  4. get host keycode and guest keycode to compare.Result for de keyboard:
    # xev -event keyboard | grep keysym

correct keysym(present by host)                                           wrong keysym(present by guest)
state 0x10, keycode 132 (keysym 0x0, NoSymbol), same_screen YES,     qemu-kvm: warning: no scancode found for keysym 0
state 0x10, keycode 132 (keysym 0x0, NoSymbol), same_screen YES,     qemu-kvm: warning: no scancode found for keysym 0
state 0x10, keycode 97 (keysym 0x0, NoSymbol), same_screen YES,     qemu-kvm: warning: no scancode found for keysym 0
state 0x10, keycode 97 (keysym 0x0, NoSymbol), same_screen YES,     qemu-kvm: warning: no scancode found for keysym 0
state 0x4010, keycode 101 (keysym 0xff27, Hiragana_Katakana), same_screen YES,   qemu-kvm: warning: no scancode found for keysym 65319  
state 0x4010, keycode 101 (keysym 0xff27, Hiragana_Katakana), same_screen YES,   qemu-kvm: warning: no scancode found for keysym 65319




Three: this Region & Language is same as comment 33.
 Steps:
  1. qemu-keymap -l de -v nodeadkeys > /root/de-nodeadkeys
  2. boot guest with "-vnc :0 -k /root/de-nodeadkeys"
  3. choose Region & Language "Belgian" inside both guest and host
  4. get host keycode and guest keycode to compare.Result for de keyboard:
    # xev -event keyboard | grep keysym

The result is messed as comment 33,too.



Besides, I boot guest with "-vnc :0 -k de" in comment 33.

Comment 38 liunana 2019-03-07 10:34:51 UTC
(In reply to Gerd Hoffmann from comment #36)
> > 1. qemu-keymap -l fr -v nodeadkeys
> 
> qemu-keymap -l fr -v nodeadkeys > /some/dir/fr-nodeadkeys
> 
> > 2. choose Region & Language "French(no dead keys)"
> 
> Yes (both guest and host).
> 
> > 3. boot guest with command "-vnc :0 -k fr"
> 
> "-vnc :0 -k /some/dir/fr-nodeadkeys"



I retest french with steps:

  1. qemu-keymap -l fr -v nodeadkeys > /root/fr-nodeadkeys

  2. boot guest with "-vnc :0 -k /root/fr-nodeadkeys"

  3. choose Region & Language "French(no dead keys)" inside both guest and host

  4. get host keycode and guest keycode to compare.Result for fr keyboard:
    # xev -event keyboard | grep keysym

correct keysym(present by host)                                           wrong keysym(present by guest)
state 0x4010, keycode 132 (keysym 0x0, NoSymbol), same_screen YES,     qemu-kvm: warning: no scancode found for keysym 0
state 0x4010, keycode 132 (keysym 0x0, NoSymbol), same_screen YES,     qemu-kvm: warning: no scancode found for keysym 0
state 0x10, keycode 97 (keysym 0x0, NoSymbol), same_screen YES,     qemu-kvm: warning: no scancode found for keysym 0
state 0x10, keycode 97 (keysym 0x0, NoSymbol), same_screen YES,     qemu-kvm: warning: no scancode found for keysym 0
state 0x4010, keycode 101 (keysym 0xff27, Hiragana_Katakana), same_screen YES,   qemu-kvm: warning: no scancode found for keysym 65319  
state 0x4010, keycode 101 (keysym 0xff27, Hiragana_Katakana), same_screen YES,   qemu-kvm: warning: no scancode found for keysym 65319


Seems much better, please help check this.

Best Regards
Liu Nana

Comment 40 Gerd Hoffmann 2019-03-15 14:13:35 UTC
upstream patches submitted:
  https://patchwork.ozlabs.org/patch/1057045/
  https://patchwork.ozlabs.org/patch/1057041/

We'll probably pick them up with the next rebase.

Comment 41 Gerd Hoffmann 2019-08-14 09:24:56 UTC
Fixed in 4.0 upstream.

Comment 43 Guo, Zhiyi 2019-09-11 07:51:25 UTC
Test against qemu-kvm-4.1.0-9.module+el8.1.0+4210+23b2046a.x86_64, for German, we still miss some keys(checked from xev):

Missing:
keycode 55 (keysym 0xafd, singlelowquotemark)
keycode 56 (keysym 0xad0, leftsinglequotemark)
keycode 57 (keysym 0xad1, rightsinglequotemark)
keycode 97 (keysym 0x0, NoSymbol)
keycode 47 (keysym 0xfe59, dead_doubleacute)
keycode 48 (keysym 0xfe52, dead_circumflex)
keycode 51 (keysym 0xad1, rightsinglequotemark)
keycode 48 (keysym 0xfe5a, dead_caron)
keycode 51 (keysym 0xfe55, dead_breve)
keycode 34 (keysym 0xfe57, dead_diaeresis)
keycode 34 (keysym 0xfe58, dead_abovering)
keycode 21 (keysym 0xfe51, dead_acute)
keycode 21 (keysym 0xfe50, dead_grave)
keycode 21 (keysym 0xfe5b, dead_cedilla)
keycode 21 (keysym 0xfe5c, dead_ogonek)

Incorrect key:

keycode 47 (keysym 0xfe60, dead_belowdot)(correct keysym, result captured from host) -> keycode 44 (keysym 0xfe56, dead_abovedot)(incorrect keysym, captured from vm)

Comment 44 Guo, Zhiyi 2019-09-11 07:53:43 UTC
Created attachment 1613971 [details]
picture show positions of missing/incorrect keys

Missing keys, marked by black ring
Incorrect key, marked by red ring

Comment 45 Guo, Zhiyi 2019-09-11 09:01:09 UTC
Created attachment 1613988 [details]
missing and incorrect keys for fr

oops..seems Fr key maps have been turned into mess again..

See the picture, black ring means missing key and red ring means incorrect key

Comment 46 Guo, Zhiyi 2019-09-11 09:04:15 UTC
The vm and client key configurations:

1)qemu boot with -k de or -k fr

2)Client machine(running remote-viewer) configured to de or fr input method

3)8.1 vm configured to de or fr display and input language

Comment 47 Guo, Zhiyi 2019-09-11 09:15:24 UTC
Hi Gerd, could you help to check the comment 43 - 46?

Am I missing something that can improve the test result?

BR/
Zhiyi

Comment 48 Guo, Zhiyi 2019-09-12 08:59:57 UTC

(In reply to Guo, Zhiyi from comment #45)
> Created attachment 1613988 [details]
> missing and incorrect keys for fr
> 
> oops..seems Fr key maps have been turned into mess again..
> 
> See the picture, black ring means missing key and red ring means incorrect
> key

Switch the input language of vm and vnc client to French(no dead keys) really improve a lot. Only leftsinglequotemark(keycode 55, keysym 0xad0) and rightsinglequotemark(keycode 56, keysym 0xad1) missing, no incorrect keys found.

Comment 49 Guo, Zhiyi 2019-09-12 09:01:54 UTC
Created attachment 1614391 [details]
A picture show missing keys

A picture show missing keys in comment 48

Comment 50 Guo, Zhiyi 2019-09-12 09:49:11 UTC
(In reply to Guo, Zhiyi from comment #43)
> Test against qemu-kvm-4.1.0-9.module+el8.1.0+4210+23b2046a.x86_64, for
> German, we still miss some keys(checked from xev):
> 
> Missing:
> keycode 55 (keysym 0xafd, singlelowquotemark)
> keycode 56 (keysym 0xad0, leftsinglequotemark)
> keycode 57 (keysym 0xad1, rightsinglequotemark)
> keycode 97 (keysym 0x0, NoSymbol)
> keycode 47 (keysym 0xfe59, dead_doubleacute)
> keycode 48 (keysym 0xfe52, dead_circumflex)
> keycode 51 (keysym 0xad1, rightsinglequotemark)
> keycode 48 (keysym 0xfe5a, dead_caron)
> keycode 51 (keysym 0xfe55, dead_breve)
> keycode 34 (keysym 0xfe57, dead_diaeresis)
> keycode 34 (keysym 0xfe58, dead_abovering)
> keycode 21 (keysym 0xfe51, dead_acute)
> keycode 21 (keysym 0xfe50, dead_grave)
> keycode 21 (keysym 0xfe5b, dead_cedilla)
> keycode 21 (keysym 0xfe5c, dead_ogonek)
> 
> Incorrect key:
> 
> keycode 47 (keysym 0xfe60, dead_belowdot)(correct keysym, result captured
> from host) -> keycode 44 (keysym 0xfe56, dead_abovedot)(incorrect keysym,
> captured from vm)

Switch the input language of vm and vnc client to German(no dead keys) also improve a lot:
Missing:
keycode 55 (keysym 0xafd, singlelowquotemark)
keycode 56 (keysym 0xad0, leftsinglequotemark)
keycode 57 (keysym 0xad1, rightsinglequotemark)
keycode 61 (keysym 0xaa9, emdash)
keycode 51 (keysym 0xad1, rightsinglequotemark)

Comment 51 Guo, Zhiyi 2019-09-12 10:01:35 UTC
Compare the result between German(no dead keys) and French(no dead keys), here is the summary:
Missing in both German(no dead keys) and French(no dead keys):
keycode 56 (keysym 0xad0, leftsinglequotemark)
keycode 57 (keysym 0xad1, rightsinglequotemark)

Should be same reason as above because of vnc only use keysym:
keycode 51 (keysym 0xad1, rightsinglequotemark)

Key doesn't exist in French(no dead keys) layout:
keycode 61 (keysym 0xaa9, emdash)
keycode 55 (keysym 0xafd, singlelowquotemark)

Comment 52 Guo, Zhiyi 2019-09-12 10:07:14 UTC
Hi Gerd,

   Please refer to the summary in comment 51, the improvements for keysyms of vnc are significant. I suppose the problem left won't cause much trouble to the end user? Can we mark this bug verified and use a new bug to track the problem in comment 51?

BR/
Zhiyi

Comment 53 Guo, Zhiyi 2019-09-17 09:38:10 UTC
(In reply to Guo, Zhiyi from comment #52)
> Hi Gerd,
> 
>    Please refer to the summary in comment 51, the improvements for keysyms
> of vnc are significant. I suppose the problem left won't cause much trouble
> to the end user? Can we mark this bug verified and use a new bug to track
> the problem in comment 51?
> 
> BR/
> Zhiyi

Gerd, any feedback for this?


BR/
Zhiyi

Comment 54 Gerd Hoffmann 2019-09-17 09:58:44 UTC
(In reply to Guo, Zhiyi from comment #52)
> Hi Gerd,
> 
>    Please refer to the summary in comment 51, the improvements for keysyms
> of vnc are significant. I suppose the problem left won't cause much trouble
> to the end user? Can we mark this bug verified and use a new bug to track
> the problem in comment 51?

Yes, sounds fine.

Comment 55 Guo, Zhiyi 2019-09-20 01:26:49 UTC
(In reply to Guo, Zhiyi from comment #51)
> Compare the result between German(no dead keys) and French(no dead keys),
> here is the summary:
> Missing in both German(no dead keys) and French(no dead keys):
> keycode 56 (keysym 0xad0, leftsinglequotemark)
> keycode 57 (keysym 0xad1, rightsinglequotemark)
> 
> Should be same reason as above because of vnc only use keysym:
> keycode 51 (keysym 0xad1, rightsinglequotemark)
> 
> Key doesn't exist in French(no dead keys) layout:
> keycode 61 (keysym 0xaa9, emdash)
> keycode 55 (keysym 0xafd, singlelowquotemark)

These have been tracked by Bug 1753814 - Some keysyms are missing when using vnc display + German/French keyboard layout

Comment 56 Guo, Zhiyi 2019-09-20 01:27:56 UTC
Verified per comment 53 and 54

Comment 58 errata-xmlrpc 2019-11-06 07:10:39 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHBA-2019:3723


Note You need to log in before you can comment on or make changes to this bug.