2014年12月09日

Android-x86 4.4 r1 のタッチパッドが使えなくなったら(TouchPad Disabled on Boot)

 えと…またまたご無沙汰です、ムムです。
 またまた久々にこちらに記事アップします。

 ふと出来心で winXPなノートPC HP Compaq 2510p で Android-x86 を使ってみようと思い、一昨日位から USBメモリにインストールして使っているのですが、いやぁ…不便ですね、Androidって。どうしてこんなのがこんなに流行るのか…謎過ぎます。ブラウザの操作とかアプリの操作とか、わざとユーザが使い辛くしているとしか思えない>各ベンダさん。PCの方が難しいとか思われてるけど、実際はPCの方が断然格段に使いやすいですよー → だからPC買ってね、な感じなのかな、これ。

 さて本題。
 先に事象と対策(解決した方法)だけ書きますね。

 1. 事象
  インストールして暫くは普通に使えていた TouchPad ( Synaptics PS/2 TouchPad )が、ある時(はっきりしないが恐らくsleep/standbyから復帰したタイミング)から使えなくなった。
  この場合の「使えなくなった」は、2510pのタッチパッドは、キーボードの上にあるインジケータ状のソフトキーで(多分)有効・無効が切り替えられるのですが、このインジケータが点灯しっ放し、即ち、勝手に無効状態になって、何を押しても有効にならない。
  例えば WindowsXP で立ち上げ直してタッチパッドを有効にして…というか普通に立ち上げただけでちゃんと使えるようになる(インジケータも消灯)のですが、そうやってから再び Android-x86 4.4 r1を起動すると、やっぱり無効になる。具体的には、Android-x86 を起動する最初のタイミングで "Detecting Android-x86 ....." と出るのですが、この ... を表示している辺りでパッとタッチパッド無効のインジケータが橙色に点灯する。以後、やはりAndroid起動中に何をしても有効化できない。
  ちなみにこの状態で、StickPointer (HP 2510pはタッチパッドとスティックポインタの両方が付いてる)ではポインタが動くが、TouchPad の所にある Butten も無効化されているので、ポインタが動いても click action が不能=何もできない。

 2. 解決法
  別途用意した前バージョンの Android 4.4 RC2 (実は最初はこっちを使って動作検証してから r1をインストールした)のLiveCDの CD-ROM から起動する。
  … … … これだけです。他には何も必要在りません。
  RC2の起動中、同じように "Detecting Android-x86 ....." と表示が出ますが、この結果としてインストール済みの r1 のデバイス(私の場合は USBメモリ)が認識されます。そして起動しようとして(何故か)ハングアップして、勝手にリブートします。あとは普通に RC2 の CD-ROMを抜いて r1 を立ち上げれば、あら不思議。さっきまでどうしても起動時に無効化されてしまっていた TouchPad が何事もなかったように認識されて普通に使えるようになります(元の状況に戻っただけですが)。
  

3.以下は蛇足。読み飛ばして大丈夫です。
  ネットで検索すると、どうもやはり RC2から r1にしたら TouchPad が使えなくなった、という事例は国内外でかなり起きているようです。国内の方々でこれを解決できた、という例がみつからなかったのですが(見かけた全てのページで 外付USBマウスを付けて対処してしまっている)、海外では idc ファイルが無いんじゃね?とか、RC2の idc コピったら動くんじゃね?みたいな回答がついてて、問題提起者も大体それで納得(解決)しているようです。私はこれでは解決し無かったので、誰か同じようなトラブルに遭っておられる方の一助になれば、と思って久しぶりのブログ更新となった次第。

  一応、idc の例もざっくり書いておくと、( /systemを read-only にしている場合はそもそも nouse な topic です)
  (1)端末エミュレータを立ち上げる

  (2)su

でスーパーユーザになる
  (3)dumpsys input | less

    で表示される出力から、タッチパッドだと思われるもののデバイス名を得る。
    私の場合は、"SynPS/2 Synaptics TouchPad" というのがそれ。

  (4)cd /system/usr/idc/
ls -la

で、(3)で得たデバイス名に対応した idc ファイルがあるかどうか確認する。
    この場合、"/" や " "(空白)は "_" に変換して考える。
    ex.私の例だと、
      SynPS/2 Synaptics TouchPad → SynPS_2_Synaptics_TouchPad.idc
が有ることを確認(ありました)。
     そもそも、(3)の時点で SynPS/2 Synaptics TouchPad の
       ConfigurationFile: /system/usr/idc/SynPS_2_Synaptics_TouchPad.idc
     として認識されてましたし。このConfigurationFileが GenericTouchPad.idc とかに、空欄に成ってると問題あるかも、ですが…。

  (5) (4)で対応するidcファイルが無い場合は、そこに有る適当な idc ファイルをコピーして作ってしまう。
    有効になるかどうか確認するだけなら、内容はとりあえず最初は考えなくて良いと思う。

  (6) (4),(5)で確認/作成した、対応するidcファイル以外の idcファイルは /system/usr/idc/ 以外の適当なディレクトリに退避してしまう。

  … 以上です。

  私の場合、idcファイルは存在していた&内容も間違って無かった(当たり前)ので、このケースには該当しません。特に、(6)を主張する意見(GenericTouch.idcが有るからそっちが参照されて使えなくなってるんだろ、的な)が結構多いようなのですが、このファイルの存在有無は全く影響しませんでした(有ろうが無かろうが、無効化される状況は変わらない)。

 4. 無責任に考察してみる

  Android-x86 を実機に入れよう、という酔狂な方はまだ日本では少ないのか、それともトラブるレスに使えている人が多いのか分かりませんが、そもそも事例が少ないですよね。

  で、今回のトラブるなのですが、RC2の LiveCD で起動する前には当然、r1 のLiveCDでも試しています。でも、r1 の LiveCD では何も解決せず、え゛ー…と思いながらダメモトで RC2 の LiveCD で一旦起動したら前述ように解決してしまったのでした。ちなみに、RC2ではこういうトラブルは起きなかった気がするけど、そもそもRC2での検証期間が1日位だったので定かではありません(でも、ネット上で同じように TouchPad トラブルに見舞われてる人達の例を見ると,多分大丈夫な気がする)。

  当てずっぽですが、まずこれ、RC2 と r1 とで、sleepやstandbyで メモリなどを書き出して保存している(と思われる)「状態保存ファイル」、( = windows で言う所の hybernate.sys だっけ?)の扱いが変わってしまったのではないかという気がします。RC2では、起動時(再起動時)にはこの状態保存ファイルを読み込まずに起動していた(sleep/standby時にはどうせ上書きなので問題無し)のが、r1 では起動時(再起動時)にもこのファイルを読み込んでしまっているのでは無いかと思います。でないと、RC2で起動しただけであっさり解決した理由が説明できない。

  で、もう一点、そもそもどうして無効化された状態が保存されてしまったのか、最初に無効状態を記録したのは誰か、なのですが、これは当然 Android-x86 自身です。無効化状態を保存したのではなくて、デバイスの状態を何らかの理由で(disk fullとか…orz)書き出し損なったか、或いはやはり何らかのバグで異常な値を書き込むシーケンスが有って、でもその書き出し損ねた状態保存ファイルが異常であることを認識できず/異常でも異常なりに読み込もうとして、
   ・記録の無いデバイスは無効化
   ・状態が確認できないデバイスも無効化(記録が有っても状態がnullだったり、brokenだったりillgalだったりunknownだったり、意味不明なstatusが記録されていた場合まで、全ての場合を無効化として扱う)。このケース、普通はデバイスの(電源off前の状態を復原するのは諦めて新たに)ステータスを再取得するべきケースだと思うのですが、そうはしないで「無効化」という荒技に出ている。
  じゃないかと思うのです。実は r1 になってから、あまり意識してないのですがスピーカとか無線LANも勝手に無効化されて立ち上がってくる事が時々あって、これらはソフトキーのON/OFFで直ったりしていたのですが(無線LANはダメだった気がする…なぜか直ったんだけど、この時はあまり事象を追いかけなかった…)、タッチパッドの場合、2510pには中途半端にスティックポインタがあるので(デバイスとしてそっちが認識されてるから)二進も三進も行かない状況になってしまうのではないかと。

 どっちにしても、これら2点が本当なら、バグと言って良い気がするのですが(前者は「仕様」と言えなくもないけど、状態保存ファイルの初期ができない/初期化手段が用意されてない、というのは仕様バグだと思います)、誰か確認してくれないかなー、とか。

 ついでに、この状態保存フィルの在り処と名前が分かれば、RC2のLiveCD なんて不要で対処できる気がするのですけれど、何方かファイル名・場所・削除方法とか、ご存知在りませんかね…?(切実)
posted by ムム at 22:22| Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。