저는 Arch Linux에서 VMWare Workstation을 실행하고 있으며 KeePassX를 전역 자동 유형 키 바인딩으로 ALT + "A"를 사용하도록 설정했습니다.
VMware를 실행하기 전에 KeePassX는 잘 작동했습니다. VMware가 게스트 OS에서 호스트로 키보드를 릴리스하면 "a" 키가 완전히 작동을 멈춥니다(KeePassX GUI 및 VMware의 게스트 OS 내부 제외). xev를 통해 "a" 키가 X에 전달되어야 하는 대로 전달되지 않고 다른 프로그램에 의해 가로채는 것 같다는 것을 확인했습니다("A" 키가 작동하는 유일한 응용 프로그램이기 때문에 keepassx라고 추측합니다).
호스트에서 $showkey --keycodes를 실행하면 스캔 코드(0x1e down, 0x9e up)가 여전히 예상대로 생성되고 있음을 알 수 있습니다. 호스트에서 xev를 실행하면 첫 번째 VMware 키보드 캡처("a"를 누른 다음 "shift+a"를 누름) 전에 올바른 키 감지 및 매핑이 표시됩니다.
$ xev
KeyPress event, serial 37, synthetic NO, window 0x1600001,
root 0x292, subw 0x0, time 102283463, (137,56), root:(2626,74),
state 0x10, keycode 38 (keysym 0x61, a), same_screen YES,
XLookupString gives 1 bytes: (61) "a"
XmbLookupString gives 1 bytes: (61) "a"
XFilterEvent returns: False
KeyRelease event, serial 37, synthetic NO, window 0x1600001,
root 0x292, subw 0x0, time 102283568, (137,56), root:(2626,74),
state 0x10, keycode 38 (keysym 0x61, a), same_screen YES,
XLookupString gives 1 bytes: (61) "a"
XFilterEvent returns: False
KeyPress event, serial 37, synthetic NO, window 0x1600001,
root 0x292, subw 0x0, time 102286270, (137,56), root:(2626,74),
state 0x10, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyPress event, serial 37, synthetic NO, window 0x1600001,
root 0x292, subw 0x0, time 102286698, (137,56), root:(2626,74),
state 0x11, keycode 38 (keysym 0x41, A), same_screen YES,
XLookupString gives 1 bytes: (41) "A"
XmbLookupString gives 1 bytes: (41) "A"
XFilterEvent returns: False
KeyRelease event, serial 37, synthetic NO, window 0x1600001,
root 0x292, subw 0x0, time 102286826, (137,56), root:(2626,74),
state 0x11, keycode 38 (keysym 0x41, A), same_screen YES,
XLookupString gives 1 bytes: (41) "A"
XFilterEvent returns: False
첫 번째 VMware 키보드 캡처 후 xev는 더 이상 "A" 키 누르기를 감지하지 않고 대신 다음 출력을 생성합니다("a"를 누른 다음 "shift+a"를 누름).
$ xev
FocusOut event, serial 37, synthetic NO, window 0x1600001,
mode NotifyGrab, detail NotifyAncestor
FocusOut event, serial 37, synthetic NO, window 0x1600001,
mode NotifyUngrab, detail NotifyPointer
FocusIn event, serial 37, synthetic NO, window 0x1600001,
mode NotifyUngrab, detail NotifyAncestor
KeymapNotify event, serial 37, synthetic NO, window 0x0,
keys: 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
KeyPress event, serial 37, synthetic NO, window 0x1600001,
root 0x292, subw 0x0, time 102369614, (6,122), root:(2495,140),
state 0x10, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False
KeyPress event, serial 37, synthetic NO, window 0x1600001,
root 0x292, subw 0x0, time 102370094, (6,122), root:(2495,140),
state 0x11, keycode 38 (keysym 0x41, A), same_screen YES,
XLookupString gives 1 bytes: (41) "A"
XmbLookupString gives 1 bytes: (41) "A"
XFilterEvent returns: False
KeyRelease event, serial 37, synthetic NO, window 0x1600001,
root 0x292, subw 0x0, time 102370235, (6,122), root:(2495,140),
state 0x11, keycode 38 (keysym 0x41, A), same_screen YES,
XLookupString gives 1 bytes: (41) "A"
XFilterEvent returns: False
VMware 서비스를 종료한 후에도 문제가 지속됩니다. 로그아웃/로그인을 통해 X 세션을 다시 시작하면 문제가 해결됩니다.
VMware, KeePassX 또는 내 데스크탑 환경을 조사할지 잘 모르겠습니다.