emobile D11LC @ Debian sid

晦日にアキバのソフマップ東芝 NB100 を IYH してしまった。

TOSHIBA モバイルノートPC PANB100NL

TOSHIBA モバイルノートPC PANB100NL

その後調子こいてイーモバの D11LC を IYH したんだけど、これを Linux で使う方法について最後までまとめてるところがなさげなので書いてみる。

一度 WindowsMac で使う

なんか初回処理でもあるんだろうか。ショップで動作確認を口実にしてもいいから、とにかく最初に一度、純正ドライバを使って接続する必要があるみたい。でないと以下の USB_ModeSwitch が何回やっても成功しなかった。

USB_ModeSwitch

D11LC をドライバ未インストールのマシンにつなぐと、最初 USB マスストレージとして認識され、ドライバの入ったドライブが見えるようになっている。ここでインストールを終えてから再びデバイスを挿すと、今度はドライバがマジックコマンドを送ることで、USB マスストレージではなく USB モデムとして使えるようになる。

Linux で USB モデムを使うのは普通にできるので、このモード切替さえ実装できれば D11LC その他「ゼロインストール」をうたうデータカードを Linux から使うことができるようになる。

で、そのツールが USB_ModeSwitch. ここの Download セクションから tar.bz2 を落としてきて展開してコンパイル(compile.sh; libusb-dev が必要)し、パスの通るところに置いておく。実行に root が要るので /usr/local/sbin/ とかに置く。

次に同じところにある usb_modeswitch.conf をダウンロードして /etc/ に置く。このファイルを開いて、

########################################################
# Alcatel OT-X020 (aka MBD-100HU, aka Nuton 3.5G), works with Emobile D11LC
#
# Contributor: Aleksandar Samardzic

DefaultVendor=  0x1c9e
DefaultProduct= 0x1001

TargetVendor=   0x1c9e
TargetProduct=  0x6061

MessageEndpoint=0x05
MessageContent="55534243123456780000000000000606f50402527000000000000000000000"

ここのセクションだけ行頭の ; をはずして保存する。

つぎに /usr/local/sbin に d11lc.sh などという名前で以下のシェルスクリプトを置く。

#!/bin/sh

# パスは自分が usb_modeswitch を置いたところに変える。
/usr/local/sbin/usb_modeswitch
# マシンによってはもっと長く待たないとダメかも。
sleep 1
# usb_modeswitch.conf の TargetVendor, TargetProduct と一致させる
/sbin/modprobe usbserial vendor=0x1c9e product=0x6061

ここで D11LC を挿してみる。自動マウント関係のサービスが動いていると、ドライバの入ったマウントポイントが見えるようになるはずである。自動マウントをしていないのなら、dmesg とかで /dev/sd* が増えたと言っているので見ておく。

さっきの d11lc.sh を root で実行する。ストレージが消えて /dev/ttyUSB[0-2] が現れる。lsusb してみれば 1c9e:6061 というデバイスが現れているはずである。

ここまでが動作確認。シェルスクリプトは最終的には使わない。

udev ルール

以下の内容のテキストファイルを /etc/udev/rules.d/ に作成する。ファイル名はあとで決める。

# USB ストレージとして認識されたときのアクション
SUBSYSTEM=="usb", ATTR{idVendor}=="1c9e", ATTR{idProduct}=="1001", RUN+="/usr/local/sbin/usb_modeswitch -Q"
# usb_modeswitch で、USB モデムとして認識されたときのアクション
SUBSYSTEM=="usb", ATTR{idVendor}=="1c9e", ATTR{idProduct}=="6061", RUN+="/sbin/modprobe usbserial vendor=0x$attr{idVendor} product=0x$attr{idProduct}"

2 行目の ATTR{idVendor/idProduct} の値は、/etc/usb_modeswitch.conf の DefaultVendor/DefaultProduct と一致させる。

4 行目の ATTR{idVendor/idProduct} の値は、TargetVendor/TargetProduct と一致させる。modprobe のパラメータにある $attr{...} はこのままでいい。

最初に D11LC が USB に挿されたときは、1c9e:1001 と認識されるので 2 行目のルールが発動し、USB_ModeSwitch が実行される。これで USB ストレージははずれる。

D11LC が USB モデムとして認識されると、1c9e:6061 と認識されるので 4 行目のルールが発動し、usbserial ドライバが正しい vendor/product の値で modprobe される。

このルールのファイル名は、000_d11lc.rules などと若い連番を付けておくことで、ほかの USB ストレージに反応するルールよりも先に来るようにする。

udev を /etc/init.d/udev reload などでリロードさせ、D11LC を抜き差ししてみる。少し経つと /dev/ttyUSB[0-2] ができているはずである。

これで前項のシェルスクリプトは不要となった。手でウェイトを入れなくても、デバイスが認識されたタイミングで udev がコマンドを実行してくれる。

PPP の設定

ppp と pppconfig パッケージをインストールする。

pppconfig を root で起動し、Create を選んで、以下の値を入力。これらは順番に答えるだけ。

Provider Name em
Nameservers Dynamic
Authentication method PAP
Username em
Password em
Speed 460800
Pulse or Tone Tone
Phone Number *99***1#
Modem Config Method Auto
Select Modem Port Manual, /dev/ttyUSB0

設定がすんだら Finished - Quit と選んで終了。

あとは root で pon em とすれば接続開始、poff で切断。

ほかの「ゼロインストール」データカードで試すときのヒント

D11LC でしか試してませんけど。

  • データカードを挿す前後で lsusb の出力を比較して、idVendor/idProduct を調べる
  • /etc/usb_modeswitch.conf の DefaultVendor/DefaultProduct に対応するものがないか探す
  • あれば、そのセクションのコメントをはずして、そのセクションの値で上記手順を適用する
  • 機種によっては option ドライバや cdc-acm ドライバを使うものがあるかもしれない。udev ルールの modprobe へのパラメータを調整する。option ドライバが当たれば modprobe はいらないらしい。
  • ドライバが変わるとデバイス名も変わる。/dev/ttyACM0 とか。
  • あとは USB_ModeSwitch のページを読む。