Estou executando o VMWare Workstation no Arch Linux com o KeePassX definido para usar ALT + "A" como uma vinculação de teclas de tipo automático global.
Antes de executar o VMware, o KeePassX funciona muito bem. Quando o VMware libera o teclado do sistema operacional convidado para o host, a tecla "a" para de funcionar totalmente (exceto na interface do KeePassX e dentro do sistema operacional convidado no VMware). Confirmei com xev que a chave "a" não está sendo passada para o X como deveria, mas parece ser interceptada por outro programa (acredito que o keepassx seja o único aplicativo em que a chave "A" funciona).
A execução de $ showkey --keycodes no host indica que o scancode (0x1e inoperante, 0x9e up) ainda está sendo gerado conforme o esperado. Antes da primeira captura do teclado VMware, a execução do xev no host indica a detecção e o mapeamento corretos do pressionamento de tecla (pressionando "a" e depois "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
Após a primeira captura de teclado VMware, o xev não detecta mais a tecla "A" gerando a seguinte saída (pressionando "a" e depois "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
O problema persiste mesmo depois que os serviços VMware são finalizados. Reiniciar a sessão X fazendo logout / in corrige o problema.
Não tenho certeza se devo investigar o VMware, o KeePassX ou o meu ambiente de área de trabalho.
Tags vmware x11 keyboard-shortcuts