前回変更したKLファイル(Vendor_05ac_Product_0239.kl)で元のファイル(/system/usr/keylayout/Vendor_05ac_Product_0239.kl)を置き換えてやれば良いけど、その手順のメモ。
/systemの再mount
/system以下は読み取り専用でmountされているのでこれを書き込み可能に変更する。
まず、mountコマンドでシステムに割り当てられたデバイス名を調べる。
$ mount
mount
rootfs / rootfs ro,relatime 0 0(中略)
/dev/block/platform/sdhci-tegra.3/by-name/APP /system ext4 ro,seclabel,relatime,
user_xattr,acl,barrier=1,data=ordered 0 0(後略)
ここでは「/dev/block/platform/sdhci-tegra.3/by-name/APP」が該当。これを書き込み可能でリマウントする。
# mount -o rw,remount /dev/block/platform/sdhci-tegra.3/by-name/APP /system
修正したKLファイルのコピー
adb pushでいきなり突っ込めないので、一旦/sdcardの下にコピーして、superuser特権で/system/usr/keylayout/へコピー。 ファイルのアクセス権を他のKLファイルと合わせて完了。
新しいKLファイルを読み込ませるためには、Bluetoothを一旦オフにして再ペアリングする必要あり。
現状での問題点
- キーボードからIMEをオン/オフできない。
- IMEオンの状態で、キーボードから「かな(全角)」、「アルファベット(半角)」の切り替えができない。
使えそうなAKCは、「LANGUAGE_SWITCH」、「SWITCH_CHARSET」、「ZENKAKU_HANKAKU」。 それぞれを空いているキーに割り当ててみたが、残念なことに「Google日本語入力」ではいずれも反応せず。
試しにIMEをNexus 7に付属の「iWnn IME」に変更してみると、「`」キーでオン/オフ可能。 また、「SWITCH_CHARSET」で「かな(全角)」、「アルファベット(半角)」が可能だった。 どうやら、この問題はIMEがどう作られているかによるものみたい。
じゃあ、「iWnn IME」を使えばよいかというと、今度はキー配列が日本語に固定されていて、外部キーボードを英語配列に指定しても強制的に日本語配列になってしまい、これもダメ。
良くわからないが、KLファイルの変更では対応不可能で、「Google日本語入力」がキーボードからの「LANGUAGE_SWITCH」、「SWITCH_CHARSET」に対応してくれないと解決しないような気がする。
というわけで、キーボードから操作できないところは「画面にタッチ」でやりくりするしかないのが英語キーボードを使う上での現状。
でも、Android関連のキーが使えるようになっただけでも格段に使えるようになったので、しばらくこれでいってみる。