qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: qemu-system-x86_64: warning: Unknown X11 keycode mapping '<null>'.


From: Thorsten Glaser
Subject: Re: qemu-system-x86_64: warning: Unknown X11 keycode mapping '<null>'.
Date: Mon, 2 Mar 2020 19:19:04 +0100 (CET)
User-agent: Alpine 2.22 (DEB 394 2020-01-19)

On Mon, 2 Mar 2020, Daniel P. Berrangé wrote:

> There's two translations happening
> 
>  * The scancode emitted by the kernel and/or hardware device,
>    and then translated/mangled by X11 and reported as the
>    hardware keycode
> 
>  * The keysym which is the mapping from the hardware keycode
>    done by XKB and/or Xmodmap

Yes, sure.

> We're dealing with the first point in QEMU, taking the hardware
> keycode and trying to undo the X11 mangling that was performed.

That’s where VNC often fails, generally, anyway… (asd often get
translated back as adf).

> > But if I can do anything to help debugging this, sure.
> 
> Can you launch 'xev' inside your VNC session and press the 'Page Up'
> button and let me know what it reports the keycode and keysym.

Sure.

> Specifically I'm interested in this line of text:
> 
>     state 0x0, keycode 112 (keysym 0xff55, Prior), same_screen YES,
> 
> On evdev it reports 112 as hardware code which is 0x70 hex, while with
> 'kbd' it reports 99 which is 0x63 hex. These are the only two scenarios
> QEMU knows how to cope with.

Then we’re somewhat out of luck:

KeyPress event, serial 35, synthetic NO, window 0x1000001,
    root 0x25, subw 0x0, time 2624181177, (244,533), root:(250,560),
    state 0x0, keycode 71 (keysym 0xff55, Prior), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

I’ve also done a,s,d:

KeyPress event, serial 35, synthetic NO, window 0x1000001,
    root 0x25, subw 0x0, time 2624183753, (244,533), root:(250,560),
    state 0x0, keycode 38 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (61) "a"
    XmbLookupString gives 1 bytes: (61) "a"
    XFilterEvent returns: False

KeyPress event, serial 35, synthetic NO, window 0x1000001,
    root 0x25, subw 0x0, time 2624184249, (244,533), root:(250,560),
    state 0x0, keycode 56 (keysym 0x73, s), same_screen YES,
    XLookupString gives 1 bytes: (73) "s"
    XmbLookupString gives 1 bytes: (73) "s"
    XFilterEvent returns: False

KeyPress event, serial 35, synthetic NO, window 0x1000001,
    root 0x25, subw 0x0, time 2624184641, (244,533), root:(250,560),
    state 0x0, keycode 41 (keysym 0x64, d), same_screen YES,
    XLookupString gives 1 bytes: (64) "d"
    XmbLookupString gives 1 bytes: (64) "d"
    XFilterEvent returns: False

I’ve tried looking at the sources for x11vnc-0.9.16 and tightvnc-1.3.9
but could not, within a quarter hour at least (got to go…), find out
where those codes are mapped anyway other than a reference to
XKeysymToKeycode (from libX11 probably).

> For that matter, if you have time to help, it would be interesting to
> see what it reports for a random selection of other keys too. For
> example:
> 
>   @

KeyPress event, serial 35, synthetic NO, window 0x1000001,
    root 0x25, subw 0x0, time 2624747092, (82,98), root:(88,125),
    state 0x0, keycode 10 (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 0x1000001,
    root 0x25, subw 0x0, time 2624747284, (82,98), root:(88,125),
    state 0x1, keycode 19 (keysym 0x40, at), same_screen YES,
    XLookupString gives 1 bytes: (40) "@"
    XmbLookupString gives 1 bytes: (40) "@"
    XFilterEvent returns: False

>   #

KeyPress event, serial 35, synthetic NO, window 0x1000001,
    root 0x25, subw 0x0, time 2624748276, (82,98), root:(88,125),
    state 0x0, keycode 10 (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 0x1000001,
    root 0x25, subw 0x0, time 2624748772, (82,98), root:(88,125),
    state 0x1, keycode 20 (keysym 0x23, numbersign), same_screen YES,
    XLookupString gives 1 bytes: (23) "#"
    XmbLookupString gives 1 bytes: (23) "#"
    XFilterEvent returns: False

>   $

KeyPress event, serial 35, synthetic NO, window 0x1000001,
    root 0x25, subw 0x0, time 2624749620, (82,98), root:(88,125),
    state 0x0, keycode 10 (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 0x1000001,
    root 0x25, subw 0x0, time 2624750028, (82,98), root:(88,125),
    state 0x1, keycode 21 (keysym 0x24, dollar), same_screen YES,
    XLookupString gives 1 bytes: (24) "$"
    XmbLookupString gives 1 bytes: (24) "$"
    XFilterEvent returns: False

>   `

This one is tricky because on my host keyboard layout ` is on the
Escape key while the key left to 1 has Esc (except when shifted,
so ~ is Shift plus the key left from 1).

This is the physical Escape key, giving `:

KeyPress event, serial 35, synthetic NO, window 0x1000001,
    root 0x25, subw 0x0, time 2624751028, (82,98), root:(88,125),
    state 0x0, keycode 33 (keysym 0x60, grave), same_screen YES,
    XLookupString gives 1 bytes: (60) "`"
    XmbLookupString gives 1 bytes: (60) "`"
    XFilterEvent returns: False

This is the physical key left to the 1:

KeyPress event, serial 35, synthetic NO, window 0x1000001,
    root 0x25, subw 0x0, time 2624753908, (82,98), root:(88,125),
    state 0x0, keycode 67 (keysym 0xff1b, Escape), same_screen YES,
    XLookupString gives 1 bytes: (1b) ""
    XmbLookupString gives 1 bytes: (1b) ""
    XFilterEvent returns: False


When I run “setxkbmap us” on the host, I get the following for
the physical key left to the 1 (`):

KeyPress event, serial 35, synthetic NO, window 0x1000001,
    root 0x25, subw 0x0, time 2625065838, (136,535), root:(142,562),
    state 0x0, keycode 33 (keysym 0x60, grave), same_screen YES,
    XLookupString gives 1 bytes: (60) "`"
    XmbLookupString gives 1 bytes: (60) "`"
    XFilterEvent returns: False

This makes me assume that the VNC viewer+server combination
translates back keysyms into keycodes, losing the original
scancodes, only based on the keysyms they create in the
host keyboard layout. Ouch!


>   -

KeyPress event, serial 35, synthetic NO, window 0x1000001,
    root 0x25, subw 0x0, time 2624780388, (101,155), root:(107,182),
    state 0x0, keycode 27 (keysym 0x2d, minus), same_screen YES,
    XLookupString gives 1 bytes: (2d) "-"
    XmbLookupString gives 1 bytes: (2d) "-"
    XFilterEvent returns: False

>   +

KeyPress event, serial 35, synthetic NO, window 0x1000001,
    root 0x25, subw 0x0, time 2624780652, (101,155), root:(107,182),
    state 0x0, keycode 10 (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 0x1000001,
    root 0x25, subw 0x0, time 2624781060, (101,155), root:(107,182),
    state 0x1, keycode 28 (keysym 0x2b, plus), same_screen YES,
    XLookupString gives 1 bytes: (2b) "+"
    XmbLookupString gives 1 bytes: (2b) "+"
    XFilterEvent returns: False

>   1
>   2
>   3

KeyPress event, serial 35, synthetic NO, window 0x1000001,
    root 0x25, subw 0x0, time 2624781516, (101,155), root:(107,182),
    state 0x0, keycode 18 (keysym 0x31, 1), same_screen YES,
    XLookupString gives 1 bytes: (31) "1"
    XmbLookupString gives 1 bytes: (31) "1"
    XFilterEvent returns: False

KeyPress event, serial 35, synthetic NO, window 0x1000001,
    root 0x25, subw 0x0, time 2624781764, (101,155), root:(107,182),
    state 0x0, keycode 19 (keysym 0x32, 2), same_screen YES,
    XLookupString gives 1 bytes: (32) "2"
    XmbLookupString gives 1 bytes: (32) "2"
    XFilterEvent returns: False

KeyPress event, serial 35, synthetic NO, window 0x1000001,
    root 0x25, subw 0x0, time 2624781988, (101,155), root:(107,182),
    state 0x0, keycode 20 (keysym 0x33, 3), same_screen YES,
    XLookupString gives 1 bytes: (33) "3"
    XmbLookupString gives 1 bytes: (33) "3"
    XFilterEvent returns: False

>   a
>   s
>   d

see above

>   q
>   w
>   e

KeyPress event, serial 35, synthetic NO, window 0x1000001,
    root 0x25, subw 0x0, time 2624782620, (101,155), root:(107,182),
    state 0x0, keycode 54 (keysym 0x71, q), same_screen YES,
    XLookupString gives 1 bytes: (71) "q"
    XmbLookupString gives 1 bytes: (71) "q"
    XFilterEvent returns: False

KeyPress event, serial 35, synthetic NO, window 0x1000001,
    root 0x25, subw 0x0, time 2624782812, (101,155), root:(107,182),
    state 0x0, keycode 60 (keysym 0x77, w), same_screen YES,
    XLookupString gives 1 bytes: (77) "w"
    XmbLookupString gives 1 bytes: (77) "w"
    XFilterEvent returns: False

KeyPress event, serial 35, synthetic NO, window 0x1000001,
    root 0x25, subw 0x0, time 2624782996, (101,155), root:(107,182),
    state 0x0, keycode 42 (keysym 0x65, e), same_screen YES,
    XLookupString gives 1 bytes: (65) "e"
    XmbLookupString gives 1 bytes: (65) "e"
    XFilterEvent returns: False

>   ,
>   .
>   /

KeyPress event, serial 35, synthetic NO, window 0x1000001,
    root 0x25, subw 0x0, time 2624783972, (101,155), root:(107,182),
    state 0x0, keycode 34 (keysym 0x2c, comma), same_screen YES,
    XLookupString gives 1 bytes: (2c) ","
    XmbLookupString gives 1 bytes: (2c) ","
    XFilterEvent returns: False

KeyPress event, serial 35, synthetic NO, window 0x1000001,
    root 0x25, subw 0x0, time 2624784172, (101,155), root:(107,182),
    state 0x0, keycode 35 (keysym 0x2e, period), same_screen YES,
    XLookupString gives 1 bytes: (2e) "."
    XmbLookupString gives 1 bytes: (2e) "."
    XFilterEvent returns: False

KeyPress event, serial 35, synthetic NO, window 0x1000001,
    root 0x25, subw 0x0, time 2624784412, (101,155), root:(107,182),
    state 0x0, keycode 36 (keysym 0x2f, slash), same_screen YES,
    XLookupString gives 1 bytes: (2f) "/"
    XmbLookupString gives 1 bytes: (2f) "/"
    XFilterEvent returns: False

Thanks,
//mirabilos
-- 
tarent solutions GmbH
Rochusstraße 2-4, D-53123 Bonn • http://www.tarent.de/
Tel: +49 228 54881-393 • Fax: +49 228 54881-235
HRB 5168 (AG Bonn) • USt-ID (VAT): DE122264941
Geschäftsführer: Dr. Stefan Barth, Kai Ebenrett, Boris Esser, Alexander Steeg

**********

Mit der tarent Academy bieten wir auch Trainings und Schulungen in den
Bereichen Softwareentwicklung, Agiles Arbeiten und Zukunftstechnologien an.

Besuchen Sie uns auf www.tarent.de/academy. Wir freuen uns auf Ihren Kontakt.

**********



reply via email to

[Prev in Thread] Current Thread [Next in Thread]