Ideas to Diagnose Keyboard Layout Problem

Questions about Wine on Linux
Locked
DoctorWkt
Newbie
Newbie
Posts: 2
Joined: Fri Aug 02, 2013 12:25 am

Ideas to Diagnose Keyboard Layout Problem

Post by DoctorWkt »

Hi, I am having some keyboard layout issues with Wine on Lubuntu 13.04 desktop, and I'm not sure what is the best approach to diagnose and debug the problem.

I am trying to run a calculator simulator called kArmTI_v40.exe (see http://www.omnimaga.org/index.php?topic=13988.0). I have a Lenovo Thinkpad E330 laptop. When I run kArmTI_v40.exe under Wine 1.4.1, some keystrokes such as left and right parenthesis are not being recognised by the program, although the GUI shows that the shift key is being held down. The ( and ) characters are on top of the 9 and 0 keys.

I have also installed Lubuntu 13.04 desktop, Wine 1.4.1 into a VirtualBox on the laptop, and copied the kArmTI_v40.exe and associated filed (using rsync) into the virtual machine. When kArmTI_v40.exe runs in the virtual machine on the laptop, the parentheses keys work fine.

Note that the parentheses keys work fine in Notepad, just not in this program.

Can anybody suggest things that I could do to try and find out what the cause of my problem is, and how I could fix it? Any help greatly appreciated! [ more debug information below ]

Cheers,
Warren

Setxkbmap

Output from setxkbmap -query; setxkbmap -print (physical laptop and the VM):

Code: Select all

  rules:      evdev
  model:      pc105
  layout:     us
  xkb_keymap {
        xkb_keycodes  { include "evdev+aliases(qwerty)" };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };
        xkb_symbols   { include "pc+us+inet(evdev)"     };
        xkb_geometry  { include "pc(pc105)"     };
  };
Winedebug

Code: Select all

WINEDEBUG=+key,+keyboard wine kArmTI_v40.exe > key.log 2>&1
I've done the above and captured the output from both the physical laptop and the VM running on the laptop. Here is what I can see are differences.

On the VM where the parentheses keys work:

Code: Select all

  trace:key:X11DRV_KeyEvent KeyPress : keysym=ffe1 (Shift_L), # of chars=0 / ""
  trace:key:EVENT_event_to_vkey e->keycode = 50
  trace:key:X11DRV_KeyEvent keycode 50 converted to vkey 0xA0
  trace:key:X11DRV_KeyEvent bScan = 0x2a.
  trace:key:X11DRV_send_keyboard_input hwnd 0x10072 vkey=00a0 scan=002a flags=0000
  trace:keyboard:MapVirtualKeyExW (10, 0, 0xc090c09)
  trace:keyboard:X11DRV_MapVirtualKeyEx wCode=0x10, wMapType=0, hkl 0xc090c09
  trace:keyboard:X11DRV_MapVirtualKeyEx returning 0x2a.
  trace:key:X11DRV_ToUnicodeEx ShiftMask = 0001
  trace:key:X11DRV_ToUnicodeEx AltGrMask = 0000
  trace:key:X11DRV_ToUnicodeEx (0010, 002A) : faked state = 0x0001
  warn:key:X11DRV_ToUnicodeEx Unknown virtual key 10 !!!
  trace:key:X11DRV_KeyEvent type 2, window 2c00001, state 0x0001, keycode 18
  trace:key:X11DRV_KeyEvent XmbLookupString needs 1 byte(s)
  trace:key:X11DRV_KeyEvent nbyte = 1, status 4
  trace:key:X11DRV_KeyEvent KeyPress : keysym=28 (parenleft), # of chars=1 / "("
  trace:key:EVENT_event_to_vkey e->keycode = 18
  trace:key:X11DRV_KeyEvent keycode 18 converted to vkey 0x39
  trace:key:X11DRV_KeyEvent bScan = 0x0a.
  trace:key:X11DRV_send_keyboard_input hwnd 0x10072 vkey=0039 scan=000a flags=0000
  trace:keyboard:MapVirtualKeyExW (39, 0, 0xc090c09)
  trace:keyboard:X11DRV_MapVirtualKeyEx wCode=0x39, wMapType=0, hkl 0xc090c09
  trace:keyboard:X11DRV_MapVirtualKeyEx returning 0xa.
  trace:key:X11DRV_ToUnicodeEx ShiftMask = 0001
  trace:key:X11DRV_ToUnicodeEx AltGrMask = 0000
  trace:key:X11DRV_ToUnicodeEx (0039, 000A) : faked state = 0x0001
  trace:key:EVENT_event_to_vkey e->keycode = 18
  trace:key:X11DRV_ToUnicodeEx Found keycode 18
  trace:key:X11DRV_ToUnicodeEx type 2, window 2c00001, state 0x0001, keycode 18
  trace:key:X11DRV_ToUnicodeEx XmbLookupString needs 1 byte(s)
  trace:key:X11DRV_ToUnicodeEx nbyte = 1, status 0x4
  trace:key:X11DRV_ToUnicodeEx KeyPress : keysym=28 (parenleft), # of chars=1 / "("
  trace:key:X11DRV_ToUnicodeEx Translating char 0x28 to unicode
  trace:key:X11DRV_ToUnicodeEx returning 1 with L"("
  trace:key:X11DRV_KeyEvent type 3, window 2c00001, state 0x0001, keycode 18
  trace:key:X11DRV_KeyEvent nbyte = 1, status 0
  trace:key:X11DRV_KeyEvent KeyRelease : keysym=28 (parenleft), # of chars=1 / "("
  trace:key:EVENT_event_to_vkey e->keycode = 18
  trace:key:X11DRV_KeyEvent keycode 18 converted to vkey 0x39
  trace:key:X11DRV_KeyEvent bScan = 0x0a.
  trace:key:X11DRV_send_keyboard_input hwnd 0x10072 vkey=0039 scan=000a flags=0002
  trace:keyboard:MapVirtualKeyExW (39, 0, 0xc090c09)
  trace:keyboard:X11DRV_MapVirtualKeyEx wCode=0x39, wMapType=0, hkl 0xc090c09
  trace:keyboard:X11DRV_MapVirtualKeyEx returning 0xa.
  trace:key:X11DRV_ToUnicodeEx ShiftMask = 0001
  trace:key:X11DRV_ToUnicodeEx AltGrMask = 0000
  trace:key:X11DRV_ToUnicodeEx (0039, 000A) : faked state = 0x0001
  trace:key:EVENT_event_to_vkey e->keycode = 18
  trace:key:X11DRV_ToUnicodeEx Found keycode 18
  trace:key:X11DRV_ToUnicodeEx type 2, window 2c00001, state 0x0001, keycode 18
  trace:key:X11DRV_ToUnicodeEx XmbLookupString needs 1 byte(s)
  trace:key:X11DRV_ToUnicodeEx nbyte = 1, status 0x4
  trace:key:X11DRV_ToUnicodeEx KeyPress : keysym=28 (parenleft), # of chars=1 / "("
  trace:key:X11DRV_ToUnicodeEx Translating char 0x28 to unicode
  trace:key:X11DRV_ToUnicodeEx returning 1 with L"("

On the physical laptop where the parentheses keys don't work:

Code: Select all

  trace:key:X11DRV_KeyEvent type 2, window 3400001, state 0x0000, keycode 50
  trace:key:X11DRV_KeyEvent XmbLookupString needs 0 byte(s)
  trace:key:X11DRV_KeyEvent nbyte = 0, status 3
  trace:key:X11DRV_KeyEvent KeyPress : keysym=ffe1 (Shift_L), # of chars=0 / ""
  trace:key:EVENT_event_to_vkey e->keycode = 50
  trace:key:X11DRV_KeyEvent keycode 50 converted to vkey 0xA0
  trace:key:X11DRV_KeyEvent bScan = 0x2a.
  trace:key:X11DRV_send_keyboard_input hwnd 0x10072 vkey=00a0 scan=002a flags=0000
  trace:keyboard:MapVirtualKeyExW (10, 0, 0xc090c09)
  trace:keyboard:X11DRV_MapVirtualKeyEx wCode=0x10, wMapType=0, hkl 0xc090c09
  trace:keyboard:X11DRV_MapVirtualKeyEx returning 0x2a.
  trace:key:X11DRV_ToUnicodeEx ShiftMask = 0001
  trace:key:X11DRV_ToUnicodeEx AltGrMask = 0000
  trace:key:X11DRV_ToUnicodeEx (0010, 002A) : faked state = 0x0001
  warn:key:X11DRV_ToUnicodeEx Unknown virtual key 10 !!!
  trace:key:X11DRV_KeyEvent type 2, window 3400001, state 0x0001, keycode 18
  trace:key:X11DRV_KeyEvent XmbLookupString needs 1 byte(s)
  trace:key:X11DRV_KeyEvent nbyte = 1, status 4
  trace:key:X11DRV_KeyEvent KeyPress : keysym=28 (parenleft), # of chars=1 / "("
  trace:key:EVENT_event_to_vkey e->keycode = 18
  trace:key:X11DRV_KeyEvent keycode 18 converted to vkey 0x39
  trace:key:X11DRV_KeyEvent bScan = 0x0a.
  trace:key:X11DRV_send_keyboard_input hwnd 0x10072 vkey=0039 scan=000a flags=0000
  trace:keyboard:MapVirtualKeyExW (39, 0, 0xc090c09)
  trace:keyboard:X11DRV_MapVirtualKeyEx wCode=0x39, wMapType=0, hkl 0xc090c09
  trace:keyboard:X11DRV_MapVirtualKeyEx returning 0xa.
  trace:key:X11DRV_ToUnicodeEx ShiftMask = 0001
  trace:key:X11DRV_ToUnicodeEx AltGrMask = 0000
  trace:key:X11DRV_ToUnicodeEx (0039, 000A) : faked state = 0x0001
  trace:key:EVENT_event_to_vkey e->keycode = 18
  trace:key:X11DRV_ToUnicodeEx Found keycode 18
  trace:key:X11DRV_ToUnicodeEx type 2, window 3400001, state 0x0001, keycode 18
  trace:key:X11DRV_ToUnicodeEx XmbLookupString needs 1 byte(s)
  trace:key:X11DRV_ToUnicodeEx nbyte = 1, status 0x4
  trace:key:X11DRV_ToUnicodeEx KeyPress : keysym=28 (parenleft), # of chars=1 / "("
  trace:key:X11DRV_ToUnicodeEx Translating char 0x28 to unicode
  trace:key:X11DRV_ToUnicodeEx returning 1 with L"("
  trace:key:X11DRV_KeyEvent type 3, window 3400001, state 0x0001, keycode 18
  trace:key:X11DRV_KeyEvent nbyte = 1, status 0
  trace:key:X11DRV_KeyEvent KeyRelease : keysym=28 (parenleft), # of chars=1 / "("
  trace:key:EVENT_event_to_vkey e->keycode = 18
  trace:key:X11DRV_KeyEvent keycode 18 converted to vkey 0x39
  trace:key:X11DRV_KeyEvent bScan = 0x0a.
  trace:key:X11DRV_send_keyboard_input hwnd 0x10072 vkey=0039 scan=000a flags=0002
  trace:keyboard:MapVirtualKeyExW (39, 0, 0xc090c09)
  trace:keyboard:X11DRV_MapVirtualKeyEx wCode=0x39, wMapType=0, hkl 0xc090c09
  trace:keyboard:X11DRV_MapVirtualKeyEx returning 0xa.
  trace:key:X11DRV_ToUnicodeEx ShiftMask = 0001
  trace:key:X11DRV_ToUnicodeEx AltGrMask = 0000
  trace:key:X11DRV_ToUnicodeEx (0039, 000A) : faked state = 0x0001
  trace:key:EVENT_event_to_vkey e->keycode = 18
  trace:key:X11DRV_ToUnicodeEx Found keycode 18
  trace:key:X11DRV_ToUnicodeEx type 2, window 3400001, state 0x0001, keycode 18
  trace:key:X11DRV_ToUnicodeEx XmbLookupString needs 1 byte(s)
  trace:key:X11DRV_ToUnicodeEx nbyte = 1, status 0x4
  trace:key:X11DRV_ToUnicodeEx KeyPress : keysym=28 (parenleft), # of chars=1 / "("
  trace:key:X11DRV_ToUnicodeEx Translating char 0x28 to unicode
  trace:key:X11DRV_ToUnicodeEx returning 1 with L"("
Apart from the window differences, diff doesn't show anything significant.

Spy++

I captured the Windows keyboard events for both the physical laptop and Wine, and the VM and Wine. First up are the events on the VM where parentheses work:

Code: Select all

  00200246 P WM_KEYDOWN nVirtKey:'2' cRepeat:1 ScanCode:03 fExtended:0 fAltDown:0 fRepeat:0 fUp:0
  001C0266 S WM_KEYDOWN nVirtKey:'2' cRepeat:1 ScanCode:03 fExtended:0 fAltDown:0 fRepeat:0 fUp:0
  001C0266 R WM_KEYDOWN
  00200246 P WM_KEYUP nVirtKey:'2' cRepeat:1 ScanCode:03 fExtended:0 fAltDown:0 fRepeat:1 fUp:1
  001C0266 S WM_KEYUP nVirtKey:'2' cRepeat:1 ScanCode:03 fExtended:0 fAltDown:0 fRepeat:1 fUp:1
  001C0266 R WM_KEYUP
  00200246 P WM_KEYDOWN nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:0 fUp:0
  001C0266 S WM_KEYDOWN nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:0 fUp:0
  001C0266 R WM_KEYDOWN
  00200246 P WM_KEYDOWN nVirtKey:VK_OEM_PLUS cRepeat:1 ScanCode:0D fExtended:0 fAltDown:0 fRepeat:0 fUp:0
  001C0266 S WM_KEYDOWN nVirtKey:VK_OEM_PLUS cRepeat:1 ScanCode:0D fExtended:0 fAltDown:0 fRepeat:0 fUp:0
  001C0266 R WM_KEYDOWN
  00200246 P WM_KEYUP nVirtKey:VK_OEM_PLUS cRepeat:1 ScanCode:0D fExtended:0 fAltDown:0 fRepeat:1 fUp:1
  001C0266 S WM_KEYUP nVirtKey:VK_OEM_PLUS cRepeat:1 ScanCode:0D fExtended:0 fAltDown:0 fRepeat:1 fUp:1
  001C0266 R WM_KEYUP
  00200246 P WM_KEYUP nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:1 fUp:1
  001C0266 S WM_KEYUP nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:1 fUp:1
  001C0266 R WM_KEYUP
  00200246 P WM_KEYDOWN nVirtKey:'9' cRepeat:1 ScanCode:0A fExtended:0 fAltDown:0 fRepeat:0 fUp:0
  001C0266 S WM_KEYDOWN nVirtKey:'9' cRepeat:1 ScanCode:0A fExtended:0 fAltDown:0 fRepeat:0 fUp:0
  001C0266 R WM_KEYDOWN
  00200246 P WM_KEYUP nVirtKey:'9' cRepeat:1 ScanCode:0A fExtended:0 fAltDown:0 fRepeat:1 fUp:1
  001C0266 S WM_KEYUP nVirtKey:'9' cRepeat:1 ScanCode:0A fExtended:0 fAltDown:0 fRepeat:1 fUp:1
  001C0266 R WM_KEYUP
  00200246 P WM_KEYDOWN nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:0 fUp:0
  001C0266 S WM_KEYDOWN nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:0 fUp:0
  001C0266 R WM_KEYDOWN
  00200246 P WM_KEYDOWN nVirtKey:'9' cRepeat:1 ScanCode:0A fExtended:0 fAltDown:0 fRepeat:0 fUp:0
  001C0266 S WM_KEYDOWN nVirtKey:'9' cRepeat:1 ScanCode:0A fExtended:0 fAltDown:0 fRepeat:0 fUp:0
  001C0266 R WM_KEYDOWN
  00200246 P WM_KEYUP nVirtKey:'9' cRepeat:1 ScanCode:0A fExtended:0 fAltDown:0 fRepeat:1 fUp:1
  001C0266 S WM_KEYUP nVirtKey:'9' cRepeat:1 ScanCode:0A fExtended:0 fAltDown:0 fRepeat:1 fUp:1
  001C0266 R WM_KEYUP
  00200246 P WM_KEYUP nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:1 fUp:1
  001C0266 S WM_KEYUP nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:1 fUp:1
  001C0266 R WM_KEYUP

And here is the log on the physical laptop where the parentheses don't work. Note the extra events:

Code: Select all

  00010078 P WM_KEYDOWN nVirtKey:'2' cRepeat:1 ScanCode:03 fExtended:0 fAltDown:0 fRepeat:0 fUp:0
  00010072 S WM_KEYDOWN nVirtKey:'2' cRepeat:1 ScanCode:03 fExtended:0 fAltDown:0 fRepeat:0 fUp:0
  00010072 R WM_KEYDOWN
  00010072 R WM_KEYDOWN
  00010072 R WM_KEYDOWN
  00010078 P WM_KEYUP nVirtKey:'2' cRepeat:1 ScanCode:03 fExtended:0 fAltDown:0 fRepeat:1 fUp:1
  00010072 S WM_KEYUP nVirtKey:'2' cRepeat:1 ScanCode:03 fExtended:0 fAltDown:0 fRepeat:1 fUp:1
  00010072 R WM_KEYUP
  00010072 R WM_KEYUP
  00010072 R WM_KEYUP
  00010078 P WM_KEYDOWN nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:0 fUp:0
  00010072 S WM_KEYDOWN nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:0 fUp:0
  00010072 R WM_KEYDOWN
  00010072 R WM_KEYDOWN
  00010072 R WM_KEYDOWN
  00010078 P WM_KEYDOWN nVirtKey:VK_OEM_PLUS cRepeat:1 ScanCode:0D fExtended:0 fAltDown:0 fRepeat:0 fUp:0
  00010072 S WM_KEYDOWN nVirtKey:VK_OEM_PLUS cRepeat:1 ScanCode:0D fExtended:0 fAltDown:0 fRepeat:0 fUp:0
  00010072 R WM_KEYDOWN
  00010072 R WM_KEYDOWN
  00010072 R WM_KEYDOWN
  00010078 P WM_KEYUP nVirtKey:VK_OEM_PLUS cRepeat:1 ScanCode:0D fExtended:0 fAltDown:0 fRepeat:1 fUp:1
  00010072 S WM_KEYUP nVirtKey:VK_OEM_PLUS cRepeat:1 ScanCode:0D fExtended:0 fAltDown:0 fRepeat:1 fUp:1
  00010072 R WM_KEYUP
  00010072 R WM_KEYUP
  00010072 R WM_KEYUP
  00010078 P WM_KEYUP nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:1 fUp:1
  00010072 S WM_KEYUP nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:1 fUp:1
  00010072 R WM_KEYUP
  00010072 R WM_KEYUP
  00010072 R WM_KEYUP
  00010078 P WM_KEYDOWN nVirtKey:'9' cRepeat:1 ScanCode:0A fExtended:0 fAltDown:0 fRepeat:0 fUp:0
  00010072 S WM_KEYDOWN nVirtKey:'9' cRepeat:1 ScanCode:0A fExtended:0 fAltDown:0 fRepeat:0 fUp:0
  00010072 R WM_KEYDOWN
  00010072 R WM_KEYDOWN
  00010072 R WM_KEYDOWN
  00010078 P WM_KEYUP nVirtKey:'9' cRepeat:1 ScanCode:0A fExtended:0 fAltDown:0 fRepeat:1 fUp:1
  00010072 S WM_KEYUP nVirtKey:'9' cRepeat:1 ScanCode:0A fExtended:0 fAltDown:0 fRepeat:1 fUp:1
  00010072 R WM_KEYUP
  00010072 R WM_KEYUP
  00010072 R WM_KEYUP
  00010078 P WM_KEYDOWN nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:0 fUp:0
  00010072 S WM_KEYDOWN nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:0 fUp:0
  00010072 R WM_KEYDOWN
  00010072 R WM_KEYDOWN
  00010072 R WM_KEYDOWN
  00010078 P WM_KEYDOWN nVirtKey:'9' cRepeat:1 ScanCode:0A fExtended:0 fAltDown:0 fRepeat:0 fUp:0
  00010072 S WM_KEYDOWN nVirtKey:'9' cRepeat:1 ScanCode:0A fExtended:0 fAltDown:0 fRepeat:0 fUp:0
  00010072 R WM_KEYDOWN
  00010072 R WM_KEYDOWN
  00010072 R WM_KEYDOWN
  00010078 P WM_KEYUP nVirtKey:'9' cRepeat:1 ScanCode:0A fExtended:0 fAltDown:0 fRepeat:1 fUp:1
  00010072 S WM_KEYUP nVirtKey:'9' cRepeat:1 ScanCode:0A fExtended:0 fAltDown:0 fRepeat:1 fUp:1
  00010072 R WM_KEYUP
  00010072 R WM_KEYUP
  00010072 R WM_KEYUP
  00010078 P WM_KEYUP nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:1 fUp:1
  00010072 S WM_KEYUP nVirtKey:VK_SHIFT cRepeat:1 ScanCode:2A fExtended:0 fAltDown:0 fRepeat:1 fUp:1
  00010072 R WM_KEYUP
  00010072 R WM_KEYUP
  00010072 R WM_KEYUP
User avatar
dimesio
Moderator
Moderator
Posts: 13208
Joined: Tue Mar 25, 2008 10:30 pm

Re: Ideas to Diagnose Keyboard Layout Problem

Post by dimesio »

Start by upgrading Wine to 1.6.
DoctorWkt
Newbie
Newbie
Posts: 2
Joined: Fri Aug 02, 2013 12:25 am

Re: Ideas to Diagnose Keyboard Layout Problem

Post by DoctorWkt »

Thanks. I upgraded to 1.6 today via the Wine PPA for Ubuntu. The problem persists though.
Locked