Xming

 XmingはWindows向けX Window System実装で,WindowsでX11 Forwardingをする場合のデファクトスタンダード.さて,日本語版のWindowsでXmingを利用していると,時折勝手に入力言語が英語に変わってしまうことがある.でまあOSSなのでソースコードを書き換えればいいんだけど,バイナリを読んだほうが早そう,ということでそのようにした.

原因

 IDA Proでキーボード関連のAPIの呼び出し元を眺めると,LoadKeyboardLayoutのロケールID引数を英語 (0x0409) に設定していることがわかる.これを日本語 (0x0411) にすればよい.

 素直に.rdataセクションに載っているので,そのまま書き換えられる.

 紀元前のバイナリパッチ方式で書くと下記の通り:

1
19AFAA: 30 31
19AFAB: 39 31
19AFB5: 55 4A
19AFB6: 53 50

 はい.

追記 (2016.11.07)

 XmingのバージョンはPublic Domain Releases 6.9.0.31で,より新しい有償版で修正されているのかどうかは知らない.で,6.9.0.31の当該ソースコード (xc/programs/Xserver/hw/xwin/winconfig.c) にはなにやら不吉なコメントが記されているが,見なかったことにする.うちの環境では,レジストリ設定でCaps LockをCtrlに入れ替えてるし.

1
2
3
4
5
6
7
8
9
10
if (keyboardType == 7)
{
/* Japanese layouts have problems with key event messages
such as the lack of WM_KEYUP for Caps Lock key.
Loading US layout fixes this problem. */

if (LoadKeyboardLayout("00000409", KLF_ACTIVATE) != NULL)
winMsg (X_INFO, "Loading US keyboard layout.\n");
else
winMsg (X_ERROR, "LoadKeyboardLaout failed.\n");
}

 ご自身の責任でやっていってください.