Android (X86-jb) でのタッチスクリーンキャリブレーション

Android でのタッチスクリーンのキャリブレーション法について.情報が溢れていそうで,案外無い, あっても,古くて使えない. ので,記録しておきます.

(少なくとも AOSP での)タッチスクリーンサポートは,tslib を用いています. tslib には,ts_calibrate というコマンドがついています. ts_calibrate は,LinuxのフレームバッファとタッチパネルデバイスをLinuxのinputデバイスとを直接アクセスします. Android は,当然ながら,画面を押さえていますので,衝突します. そこで,下記のような手順で実行を行います.

以下,Android-x86.org が提供している x86-jb での手順です.

たぶん ICS 以降の Android の多くで使えるはずですが,中には,tslib を使っていないディストロもあります.(例えば AndroVM) あと,rootが必要です. スマホやパネルコンピュータなど,きちんと製品に作りこまれた状態でも,この方法は使えないかもしれません. (その場合,キャリブレーションツールが必要なら,きちんとしたのがついてくるだろうと思います.)

  1. 普通にAndroidを起動します.
  2. adb shell など用いて,コマンドラインアクセス可能にします.
  3. stop zygote stop bootanim stop surfaceflinger として,zygote サービスを停止します.
  4. 多くの場合,キャリブレーションデータを保存するディレクトリが存在しません.mkdir /data/system/tslibを実行して作ります.
  5. ts_calibrate を実行します.
  6. 言われるままにタッチします.
  7. 念のため,ls /data/system/tslib/pointercal などしてキャリブレーションデータが作成されていることを確認します.
  8. 止めた順番と逆順で,start surfaceflinger start bootanim start zygote として,zygote サービスを再開します.

補足

仮想コンソールがサポートされている場合,上記2の手順で,Alt+F1 などで移動し,作業することもできます. その場合,ts_calibrate を実行する際に必要なのは zygote サービスの停止だけです.