Motorola Flipout キーボードカスタマイズ

device android flipout physical-keyboard

moved from http://wonderstory.posterous.com/motorola-flipout-3518

ちいささと、ころっとした外見、ぷちぷちした感触のキーボードがだいぶ気に入ってしまって、ローエンド機種だし動作は遅めだし公式アップデートはたぶん来ないけれど、ここのところメイン機になっている Motorola Flipout MB511 ですが、キーボードの設定をいじって文字入力をより快適にしてみました。要root権取得。

けっこう打ちやすい Flipout のキーボードで少し不満なのが、

  • Wnn系のIMで、日本語・英語の入力切り替え Shift+Space が押しにくい(Shift が左端にあって中心から遠い)。
  • 日本語ではそれなりに使うハイフンが Alt+Z に割り当てられていて、両手の親指でぽちぽち入力するときに動きが大きくて煩わしい。

というところで、どうにかならないかといろいろとAndroidのキーボードカスタマイズ情報を探すと、

  • /system/usr/keylayout/*.kl : ハードキーに対応するキーコードを設定
  • /system/usr/keychars/*.kcm.bin : キーコードに対応して入力される文字を設定

というファイルをいじればよさそうです。 logcat を眺めた感じでは、手持ちの HK版Flipout で使われていたのは次の2つ。本体からコピーしてきます。

  • sholes-keypad.kl
  • sholes-keypad.kcm.bin

日本語・英語の入力切り替えをしやすく。 (sholes-keypad.kl)

まず、スペースの右隣に「A|中」という何も反応しないキー(たぶん日本語入力でいうところの文字キー)があるので、それを Shift+Space に割り当てられないかと思ったものの、修飾キーつきの割り当てはファイルをいじるだけでは無理なようでした。

仕方がないので、右手親指だけで スペース+A|中 が押せるのを利用することにして、「A|中」キーには Shift に割り当てることにしました。手の動きが減って、なんとなく手間が減ったような気になれます。

*.kl ファイルは、単純にスキャンコードとキーコードが並ぶテキストファイルで、キーコードは android.view.KeyEvent で定義されている定数の先頭(KEYCODE_)を省いたものを書けるようです。A|中」キーのスキャンコードは 162 で、これを SHIFT_RIGHT に変えました。

#key 162   EXPLORER          WAKE_DROPPED
key 162   SHIFT_RIGHT       WAKE_DROPPED

あと、試しに音量アップキーをカメラキーに置き換えてみました。

#key 115   VOLUME_UP         WAKE
key 115   CAMERA            WAKE_DROPPED

ハイフンを押しやすい位置に。 (sholes-keypad.kcm.bin)

次に、 Alt+Z にあるハイフンを、比較的押しやすそうなところにあるアンダーバー(Alt+P)と入れ替えることにしました。

*.kcm.bin ファイルはバイナリエディタで開く必要があります。中身自体は単純な構造ですが、どの値が何に対応しているのかがいまいちわかりにくいです。

0x00-0x1fはヘッダ。0x20以降は、16byteでひとつのキー。最初の2byteが frameworks/base/include/ui/KeycodeLabels.h というので定義されているラベル(たとえば「P」が「44 = 0x2C」でした)。後ろ8byteが、2byteごとに「通常入力 / Shiftと / Altと / Alt+Shiftと同時入力」に対応。残りはよくわかりません。

ということで、お目当ての Alt+PAlt+Z に対応している定義を交換しておきます。

0x1D0: 2C00 0000 5000 3700  7000 5000 2D00 0000 | p P -  
0x270: 3600 0000 5A00 3900  7A00 5A00 5F00 0000 | z Z _

これで、 Alt+P でUnicodeの 0x002D(-) が、 Alt+Z で 0x005F(_) が入力されるようになります(「2D00」が「0x002D」を表す)。

ついでに、もともと Alt+Shift+. で 0x2026(…) が入力できるようになっていたのをまねして、 Alt+Shift+M で 0x2014(—) を入力できるように設定。

0x1A0: 2900 0000 4D00 3600  6D00 4D00 2C00 1420 | m M , —

ほかにも、キーボードに印字がない文字を適当に割り当てておきました(「|」を Alt+E に、バックスラッシュを Alt+R に)。

本体に書き込み。

できた2つのファイルを USB デバッグモードでつないだ Flipout に送ってシステムに書き込み、再起動すれば完了です。

$ adb push sholes-keypad.kl /sdcard
$ adb push sholes-keypad.kcm.bin /sdcard
$ adb shell

$ su
# mount -o remount,rw /dev/block/mtdblock7 /system
# busybox cp /sdcard/sholes-keypad.kl /system/usr/keylayout
# busybox cp /sdcard/sholes-keypad.kcm.bin /system/usr/keychars
# reboot

より使いやすくなって、ますます愛着がわいてきます。同系統の後継機が出たらうれしいなあ。