NEC Life Touch NOTE に Debian GNU/Linux を導入

NECのAndroid端末「Life Touch NOTE」にDebian GNU/Linux をインストールした時の覚え書きです。

root 権限の奪還

ホストマシンにAndroid SDKのインストールしたら、USBでホストとLTNをつないで、以下の手順でroot権限を取り返します。

まず、SuperOneClickのZIPをダウンロードし、適当な場所に解凍しておきます。配布物はWindows向けのアーカイブですが、気にせず解凍します。unzip後のディレクトリに移った後、

[bash]
adb push Exploits/psneuter /data/local/tmp
adb push Dependencies/busybox /data/local/tmp
adb push Root/su-v1 /data/local/tmp
adb push Root/su-v2 /data/local/tmp
[/bash]

と、必要そうなファイルをLTNの/data/local/tmpに転送します。次に、LTNに接続し、転送したものに実行権限を与えてからpsneuterを実行します。

[bash]
adb shell
(adb) cd /data/local/tmp
(adb) chmod 755 *
(adb) ./psneuter
[/bash]

上手くいけば勝手に切断されるので、接続しなおします。接続後、プロンプトが「#」になりスーパーユーザになっていることを確認してください。

[bash]
adb shell
[/bash]

次にデフォルトのPATHが設定されている位置に busybox をインストールします。

[bash]
(adb) set

/system/xbin がパスに登録されているが、このディレクトリは存在しない。

カスタムコマンドを設置するにはもってこい。

(adb) df

/system は /dev/block/mmcblk3p6 らしい。

(adb) mount -o remount,rw /dev/block/mmcblk3p6 /system
(adb) mkdir /system/xbin
(adb) chmod 755 /system/xbin
(adb) cd /system/xbin

cp コマンドがなかったので、busybox のアプレットで busybox をコピーする

(adb) /data/local/busybox cp /data/local/busybox .

リンクを展開

(adb) ./busybox –install .
[/bash]

ConnectBot で localhost 接続して、busybox が使える状態になっているか確認します。

[bash]
$ which wget
/system/xbin/wget
$ dc
1 2 + p
3
$ vi
[/bash]

よし、いい具合。これでroot権限が使え、かつ自由に作業する為の足がかりが整いました。

2. Debian GNU/Linux の導入

59414d41さんのハックの賜物であるLTN用Debian(Lenny)配布ページに従ってインストールします。ページを見ると詳しい事が書いてありますが、ここでは要点だけかいつまんで書いておきます。

まず、ホストマシンにSDカードを差して、起動用SDカードを作成します。ホストマシン上で次のコマンドを実行しました。

[bash]
mkdir backup
cp -r /mnt/sdcard/* backup/
su # ←ここからroot権限
mkfs.ext3 /dev/mmcblk0p1
mount -t ext3 -o rw /mnt/sdcard /dev/mmcblk0p1
cd /mnt/sdcard
wget http://205.196.121.246/q4mgjdew5pag/0rnq7nc7lc1d0uq/ltna-debian-010.tar.gz
tar xfpz ltna-debian-010.tar.gz
[/bash]

この時、カレントディレクトリである/mnt/sdcardには次のようなファイルが詰まっています。

busybox … 作業用 busybox。
ltna-debian-010 tar gz … 落としてきたアーカイブ。解凍したのでもう不要。
ltna-debian-rootfs cpio gz … SD カードに展開する予定のルート・ファイルシステム。
recovery2 img … init を書き換えた改造リカバリ領域データ。
setup_recovery sh … リカバリ領域のバックアップと上書きをするスクリプト。
setup_rootfs sh … 必要ファイルをコピーし、ルート・ファイルシステムを展開するスクリプト。
sh … 作業用シェル。

アンマウントしてホストのrootを抜けます。

[bash]
cd
umount /mnt/sdcard
exit
[/bash]

SD カードをホストマシンから LTN に差し替え、USB デバッグ接続します。SDカードを/sdcardにマウントして中を見てみると、準備したファイル群が見えると思います。それらを実行します。

[bash]
(ホストから)$ adb shell

root権限

mount -t ext3 /dev/block/mmcblk2p1 /sdcard
cd /sdcard
./setup_rootfs.sh ….. ルートファイルシステムを SD カード内に展開。
extract…
copy wpa_supplicant.conf
copy /system/lib/BCM4329B1.hcd
copy bcm4329 files…
copy /system/lib/hw/wlan/usibcm4329-RC218-nvram.txt
debian rootfs ready.
adb# ./setup_recovery.sh … リカバリ領域のバックアップと改造データでの上書き。
Backup recovery…
New recovery ready.
cp recovery_org.img /data/local/tmp …. オリジナルのリカバリ領域を移しておく。
cd /
umount /sdcard
exit
[/bash]

LTNで起動中の Android を普通に終了します。電源ボタンから「電源を切る」でOKです。
完全に電源が切れたことを確認し、HOMEボタンを押しながら電源を投入します。これにより、リカバリモードで起動します。NECのロゴが消えるまで、HOMEボタンを押しておけば確実です。

[bash]
Login: root
Password: (root)
passwd
ifup eth0
ping www.yahoo.co.jp .. 外とつながってるか調べる。
apt-get update …….. うちでは失敗したので、リポジトリを修正する。
vi /etc/apt/source.list
– deb http://ftp.ja.debian.org/debian lenny main non-free contrib
+ deb http://ftp2.ja.debian.org/debian lenny main non-free contrib
apt-get update …….. 今度はうまくいった。
apt-get install aptitude
aptitude install bluez-utils ntp ssh vim
aptitude install x-window-system ttf-mona ttf-kochi-gothic ttf-kochi-mincho
aptitude install xserver-xorg-input-evtouch rxvt-unicode ratpoison gdm
cp /opt/ltna/xorg.conf /etc/X11/
echo ‘inet:x:3003:user’ >> /etc/group
[/bash]

ここまで来て、startxとしたいところを我慢して、念の為再起動すると、Android が立ち上がりました。しまった!と思って、ホストマシンと繋ぎ直し、setup_recovery.sh を実行しなおしました。電源を一度切り、HOMEボタンを押しながら電源投入すると、Linux の起動メッセージが流れた後、嬉しい事に GDM がお出迎えしてくれました。

その後、

[bash]aptitude install locales && dpkg-reconfigure locales[/bash]

で日本語化を行いました。

2.1. SD カードの入れ替え

2.2. バッテリー残量を得るスクリプト

モバイル WiFi + Debian on LTN 環境で、バッテリー残量が取れないと不便だった。インストールしてみた acpi では上手く取れなかったので、簡単なスクリプトを書いてみました。もっと上手い方法があるかもしれませんが、これで十分かな。

[bash]

!/bin/sh

dev="/sys/devices/nvec/nvec_battery/power_supply/battery"
[ ! -e $device ] && exit 1

stat=$(cat $dev/status)

emp=$(cat $dev/charge_empty)
ful=$(cat $dev/charge_full)
now=$(cat $dev/charge_now)

par=$(expr $now * 100 / $(expr $ful – $emp))
[ $par -gt 100 ] && par=100

echo $par% $stat
[/bash]

実行すると、残量のパーセンテージと電源の状態(充電中か、など)が表示されます。

NEC LifeTouch NOTE with SKK for Android IS01 ed. その2

NEC LifeTouch NOTE に、SHARP IS01 のハードウェアキーボード向けにカスタマイズされた SKK for Android をインストールし使ってみた感想を書きましたが、作者の ray_m さんにコメントを頂き、修正を施したとの事だったので、早速使ってみました。

修正がほどこされた点をかいつまんで紹介します。

  • Shift キー押下しっぱなしでの連続入力に対応。修正前のバージョンでは、「入れる」と入力する際、タイプでは「IReru」となりますが、I と R を Shift キーを押しっぱなしにして連続で入力する事が出来ませんでした。( Shift+i、Shift+r の間で、Shift キーを”離す”必要があった。) ray_m さんによると、IS01 のタイプ方法をベースに作成されていた為という事でそれを受けてすぐに修正して頂きました。LifeTouch NOTE は持ってらっしゃらないようなのに、迅速に修正して頂けるなんて頭が下がるばかりです。

IS01 の特殊キーは、同時押しではなく、キーを押した次のキーに作用するように出来ています。 これは QWERTY ハードウェアキーボードを搭載していても、サイズ自体が小さい為、同時押しがしづらい物理的な問題に対処するものだと考えられます。例えば、IS01 で大文字の ‘A’ を入力する場合、Shift キーを押した上で、( 押しっぱなしにしても、離してしまっても、Shift 押下状態が続くので、その直後に ) a キーを押す事によって入力する事が出来ます。自分の IS01 は電話専用機になってしまっているので、SKK を導入する必要はないですが、LifeTouch NOTE や Dynabook AZ のようなネットブックに匹敵するサイズの QWERTY キーボードを搭載している Android 端末上では、SKKer にとって、キラーアプリになるくらい外せないアプリになっています。

  • z キーでの記号入力に対応。カタカナ入力モードのトグルキーである q キーや、半角英数モードにする l キーは以前から利用出来ていましたが、日本語でよく利用する記号を 2 タイプで呼び出す z キー機能がありませんでした。これ自体はクリティカルに SKK の使い勝手を落とすわけではないのですが、新しいバージョンではサポートされるようになりました。これで、『』~・…‥←↓↑→ といった記号を 2 タイプで入力する事が出来ます。
  • 一時的に半角英数を入力する際、▽の表示に対応。ちょっと細かな話ですが、/ キーを押して一時的に半角英数文字をタイプする際に、最初の 1 文字を入力するまで、SKK による入力中である事を示す▽が出てきませんでした。最新版では、これもちゃんと出ている模様で、/ キーを押した状態で「えーと、スペルどうだっけ」と一瞬ディスプレイから目を離した時に、再度、/ キーを押してしまって「▽/」という入力状態にならなくなりました。
  • 通常の Android 端末にはまず付いていないであろう Delete キーは、LifeTouch NOTE 専用のテキストエディタである「ライフノート」では、IM がオンの状態でも使う事が出来ます。コピー C-c、ペースト C-v、カット C-x、アンドゥ C-z、全選択 C-a などのライフノート・ショートカットキーを使うにはは、IM をオフにする必要があります。

前回の記事は、SKK for Android をインストールしたその夜に使い勝手を調べながら書いたものですが、それから 1 ヶ月以上使ってみて、ますます満足しています。残すは変換候補の表示位置のみといったところでしょうか。

LifeTouch NOTE は、せっかく左にある Menu キー( IBM-PC キーボードで言う CapsLock の位置 )を Ctrl キーに変更する設定項目まで搭載してくれているのに、Android 自体の仕様が全体的に Ctrl キーをサポートしていないのが残念な限りです。自分に課題を出すとすれば、確定 C-j やキャンセル C-g を多用している SKKer としても、”C” になるキーを指定させてそれらをサポートしたいところです。

2011/09/23 追記

ray_m さんから新しいバージョン 1.4 のご連絡があり,早速試してみると,変換候補の表示位置がずれてしまう現象が解消されたようです.

また,上の記事には書いていませんでしたが x キーによる小文字(っ,ぁ,ぃ,ぅ …など)にも今回のバージョンから対応しているようで,使用感はほとんど Emacs や SKKIME と変わらなくなっています.

さらに SKK 使いでフルキーボードを搭載している Android 端末ユーザには,離せないアプリになっていると思います.

※ 2020/07/02 度重なるブログ移転・ブログシステムのアップデートにより崩れた記事を校正。