KeePassX Global Autotypeは、VMwareで使用するとキーを破損します。

KeePassX Global Autotypeは、VMwareで使用するとキーを破損します。

私は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、または私のデスクトップ環境を調べるかどうかはわかりません。

関連情報