2010-12-30

LinuxでWLI-UC-AG300Nを使う

Debian(squeeze)でBUFFALOのUSB無線LANアダプタ WLI-UC-AG300N (アマゾン) を使えるようにするメモ。

作業概要

  1. あらかじめ入っているモジュールだとダメ(自動的にロードされないようにする)
  2. 正しいドライバをコンパイルしてインストール
  3. 設定

あらかじめ入ってるモジュールだとダメ

とりあえず何も考えずにマシンに WLI-UC-AG300N を挿すと、「rt2800usb」などのモジュールがロードされるのだけど、これだとつながりません。
/etc/modprobe.d/blacklist.conf に下記の行を追加して、自動的にロードされないようにします。
blacklist rt2800usb

ネット上では rt2x00usb・rt2x00lib もブラックリストに入れてる例がありますが、rt2800usb を止めればあと2つはロードされないので、書かなくても大丈夫です。(書いても実害ありませんが)

チップメーカーからドライバを入手してコンパイル

この製品のチップを作ったRalink社のサイトから、ドライバのソースをダウンロードします。
「RT2870USB(RT2870/RT2770)」をクリックして、名前とメールアドレスを入力するとダウンロード開始。
私がダウンロードしたときは 2010_0709_RT2870_Linux_STA_v2.4.0.1.tar.bz2 というバージョンでした。

makeする前に、ソースをいじります。
  1. WLI-UC-AG300N のベンダID/プロダクトIDを common/rtusb_dev_id.c のそれっぽい箇所に追加。
    (略)
      {USB_DEVICE(0x1737,0x0071)}, /* Linksys WUSB600N */
      {USB_DEVICE(0x0411,0x00e8)}, /* Buffalo WLI-UC-G300N*/
      {USB_DEVICE(0x0411,0x012e)}, /* Buffalo WLI-UC-AG300N*/
      {USB_DEVICE(0x050d,0x815c)}, /* Belkin F5D8053 */
    (略)

    ちなみにそのIDは lsusb で調べられます。
    # lsusb -v
    (略)
    Bus 001 Device 002: ID 0411:012e MelCo., Inc. Buffalo WLI-UC-AG300N Wireless LAN Adapter
    Device Descriptor:
    (略)
      idVendor           0x0411 MelCo., Inc.
      idProduct          0x012e Buffalo WLI-UC-AG300N Wireless LAN Adapter
    (略)
  2. もう一つ、wpa_supplicantを利用するために、os/linux/config.mk の下記2箇所を n から y に変更します。(README_STA に書かれています)
    # Support Wpa_Supplicant
    HAS_WPA_SUPPLICANT=y
    
    # Support Native WpaSupplicant for Network Maganger
    HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y

準備できたら、コンパイルとインストール。
$ make
# make install

設定

設定の前に、必要なパッケージをインストールしておきます。
# aptitude install wireless-tools wpasupplicant
  1. まず、このアダプタの設定ファイル /etc/Wireless/RT2870STA/RT2870STA.dat をちょっと編集します。
    CountryRegionABand=1
    CountryCode=JP
    利用するチャンネルを自分の環境に合わせます。何に設定すればいいのかはソース同梱の iwpriv_usage.txt を参考に。

    (CountryRegionABand がデフォルトの 7 のままでもつながりますが、場合によっては日本国内では使っちゃいけない周波数の電波を出すおそれがあります……)
  2. 接続に必要な情報を書いた wpa_supplicant の設定ファイルを作ります。
    # wpa_passphrase (SSID) (PASSPHRASE) > /etc/wpa_supplicant/wpa_supplicant.conf
    これでSSIDとパスフレーズの書かれたファイルができるので、さらに追記。
    network={
            ssid=********
            psk=********
            proto=WPA
            key_mgmt=WPA-PSK
            pairwise=CCMP
            group=CCMP
    }



  3. アダプタを有効にするために /etc/network/interfaces に追記します。
    allow-hotplug ra0
    iface ra0 inet dhcp
     wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
    
    固定IPで運用したければ以下。
    allow-hotplug ra0
    iface ra0 inet static
     address 192.168.0.***
     netmask 255.255.255.0
     gateway 192.168.0.1
     wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf



2010-12-26

Linuxマシンをタイマーで自動起動させるには(ACPI wakeup)

Debianをインストールした小型ファンレスマシンM350、PCIスロットがあるのでPT2でも挿そうと思います。というかPT2のために買いました。
ファンレスなので常時起動では熱が心配です。停電も怖いし。
そこで「あらかじめ設定した日時に自動的に起動する」ことはできるのでしょうか?

調べてみると、ACPIの機能を使えばできそうです。
参考資料:ACPI Wakeup (MythTV)

電源OFFの状態からタイマー起動できるか?

まずこのマシンの仕様を調べます。
$ grep -i rtc /var/log/kern.log
Dec 25 19:51:39 M350 kernel: [    3.159784] rtc_cmos 00:07: RTC can wake from S4
どうやらS4(Suspend to disk/ハイバネーション、Windowsで言うところの「休止状態」)からならタイマー起動できる模様。
S5(電源オフ)からは無理ということでしょうか。

ちなみにBIOS設定だと下記2つの「S5から起動」オプションがあります。ただ、どちらもタイマー起動とは別の話。
  • Wake on LAN from S5 :
    ネットワーク経由で起動信号(Magic Packet)を送りつけて遠隔起動する設定
  • Wake system from S5 :
    あらかじめBIOSで指定した日時に自動起動する設定。「毎日朝5時に自動起動」というような使い方ならできる

S5からタイマー起動できればラクだったのですが、仕方ないのでS4の環境を整えます。

S4(Suspend to disk)に対応しているか?

# cat /sys/power/state
standby mem disk
「disk」が表示されれば、たぶんOK。

S4に入るだけなら次のコマンドでも行けます。
# echo disk > /sys/power/state
ただし実際にはS4に入る前や復帰後にいろいろ処理をしたほうがいいので、pm-utils に任せたほうがラクです。
パッケージが入ってなければ、まずはインストール。
# aptitude install pm-utils

pm-utilsの準備ができたら、以下コマンドでハイバネート。
# pm-hibernate
HDDに状態を書き出し終わると電源が切れます。
S3(スリープ/Suspend to RAM)と違って電源はオフになるので、サスペンド中に停電があっても(タイマーの時刻までに電源供給が復旧していれば)ちゃんと起動してくれます。

ではテスト

とりあえず手動テストしてみます。
# echo `date +%s -d +2min` > /sys/class/rtc/rtc0/wakealarm
これで2分後に自動起動します。念のため確認。
# cat /proc/driver/rtc
rtc_time        : 17:25:17
rtc_date        : 2010-12-25
alrm_time       : 17:27:14
alrm_date       : 2010-12-25
(後略)
rtc~が現在日時、alrm~がタイマー起動日時。確かに2分後に設定されています。(時刻は日本標準時じゃなくてUTCなので注意)
ハイバネートして待っていると……2分後、ちゃんと自動起動してくれました!

※ハイバネート処理が2分じゃ終わらない場合は、適宜時間を長くしてください。ちなみにこのマシンはコンソール(CUI)オンリーなので2分あれば余裕でした。

あれ…S5からもタイマー起動できる?

ついでなので、S5(電源オフ)状態からはタイマー起動できないことを確認しようと、pm-hibernate のかわりに shotdown -h now と打って待っていたら……あれ? 起動した!?
どうもこのマシン、S5からもタイマーで起動できたみたいです。pm-utils を入れる必要なかったとは……。

タイマー起動できない場合は、ハードウェア時計の同期を無効に

さて、このマシンの場合は実は何も考えずにタイマー起動できちゃうことが判明しましたが、「うちのマシンは起動しない…」という場合、終了時にシステムが自動実行するスクリプトを書き換えれば改善されることがあるようです。

曰く、多くのLinuxディストロでは、シャットダウン時に「システム時計をハードウェア時計に書き戻す処理」(hwclock --systohc)が入っており、その際にセットしておいたタイマー起動が無効になってしまうのだとか。
具体的にどう対処するかは、先の参考資料の Disable HWclock updates の項目をどうぞ。

2010-12-25

Debian(squeeze)を入れようとして rtl8168d-1.fw がないと言われたら

超小型ファンレスPC・M350にLinux(Debian)を入れたときのメモ。

M350とは?

M350約20cm平方の超小型ファンレスPC。CPUはネットブック用のAtomで、電源はACアダプタと省電力です。
小さいPCは数ありますが、PCIカードが挿さるのがこの機械のいちばんの特長。

[CPU] Atom N270 (1.6GHz)
[マザーボード] Intel D945GSEJT
[メモリ] DDR2-533MHz SODIMM(1スロット/最大2GB)
[ストレージ] SATA 2.5インチ×2(PCIカード挿すと2基はつらいかも)
[LAN] ギガビット(Realtek)
[映像] DVI-D/D-sub
[電源] ACアダプタ(12V)、60~80W

ガリガリ使うには非力ですし熱が心配ですが、使いようによってはなかなか面白い機械です。
(ファンレスですが、筐体には4cmファンを装着する場所は用意されています)
私のメインPC(ThinkPad R400)のACアダプタが90W/20Vですから、それよりも省電力。

インテルSSD(40GB)+メモリ1GBの完成品(ACアダプタ80W)が46,200円。
ディスクとメモリは自分で用意するし組み立ても厭わない、という人はベアボーンが23,800円。(ただしベアボーンのACアダプタは60W)

どのバージョンのDebianを入れる?

Debianの今の安定版(stable)は5.0(Lenny)だけど、もうじき6.0(squeeze)が安定版になるそう。
新しいほうで行ってみます。

インストーラーの入手と起動

http://www.jp.debian.org/devel/debian-installer/ から Debian Installer 6.0 Beta 2 を入手。いろんなタイプのインストーラーがあるようですが、ラインナップの一番上にあった netinst CD を使います。
そのへんにあった DVD+RW ディスクに焼いて、USB経由で起動しようとしたらブートメニューに現れません。原因を探るのも面倒だったので、筐体を開けて、空いてたSATA端子に直接挿してしまいます。

インストーラが起動して最初に出てくるメニューが、表示はチカチカしてるわ、キー入力しても反応しないわでいきなり不安になりますが、適当なキー押したあとしばらく放っておいたら操作できるようになりました。まだインストーラーがベータだからでしょうか。

LANチップのファームウェアがない?

ハードウェアの自動認識の結果、「ネットワークハードウェアのファームウェア rtl8168d-1.fw がない」とのメッセージが出現。
Debianは「非フリー」のファイルをインストーラーに含まないため、マザーボード(Intel D945GSEJT)のオンボードネットワークコントローラ Realtek 8111DL が引っかかったようです。

画面には「ファームウェアを別途リムーバブルメディアからロードできる」とあるので、じゃあ手に入れてくるかと思ったら……ファームウェアがどこにあるのか不明。Debianのnon-freeパッケージにもないですし、検索した感じでは、世の中にそもそも存在するのかどうかすらも怪しい。
仕方ないので、とりあえずスキップして先に進みます。

インストールを進めていくと、何事もなくサーバーから追加ファイルを取得しています。通信ができているということは、ファームウェアがなくてもネットワークが正常稼動しているということでしょうか。
ファームウェアのファイルは「無いなら無い」で大丈夫なのかもしれません。

他はつつがなくインストール完了。

2010-12-17

GALAXY Tab、汎用USB-ACアダプタだと充電中に操作できない?

前回のIS01はUSB-ACアダプタで充電できるか?につづき、もひとつAndroidをUSB-ACアダプタで充電する話です。

サムスン/ドコモのGALAXY Tab (SC-01C) を、本体同梱のUSB-ACアダプタを使わずに汎用アダプタで充電していたら、妙な現象に気付きました。
汎用ACアダプタに挿すと、充電はできるのですが操作ができないのです。タッチパネルをいくら押しても無反応。

故障や初期不良を疑いましたが、本体同梱のアダプタを使うと充電中でも操作可能。なにやら仕掛けがありそうです。
純正アダプタの定格を見ると5V/2Aとあります。私が使った汎用アダプタは5V/1Aでしたから、もしかしたら、出力の足りないアダプタの場合は操作できなくしているとか? たとえば「充電しつつ操作もされちゃう(アプリとか動かされちゃう)と、充電に必要な電流が確保できないかも」という理由で。

もしそういう事情があるのなら、それはそれで仕方ありません。とはいえACアダプタもケーブルも専用品を使わないといけないのは、今どきの製品としては残念なところ。(GALAXY Tabは本体側コネクタが独自形状のため、ケーブルも専用品となっています)

それにしてもGALAXY Tab、ちょっと肩透かしでした。操作の追随感が悪いというか、思ったとおりに動いてくれなくてイラッとすることが多いです。
Androidは次のメジャーバージョンアップ(3.0/Honeycomb)でタブレットに最適化するとの話ですが……サムスンが3.0へのアップグレードパスを用意してくれることを祈るばかりです。IS01ユーザーとしては

ちなみに:GALAXY S(SC-02B)は汎用品でOK(動作も快適)

ちなみに兄弟機(?)のGALAXY S(SC-02B)は、本体側コネクタがmicroUSB。アダプタもケーブルも汎用品を使えて便利です。

GALAXY SはiPhone 4より軽いのがいいです。大きさはGALAXY Sのほうがほんの一回り大きいですが、iPhone 4が137gなのに対し、GALAXY Sは118g。……と書くとたいして変わらないような気がしますが、両方を交互に使っているとはっきりと違いが分かります。iPhone 4を手に持つと、ズッシリとした印象。
もっともここは受け取り方が分かれるところで、「軽いので持ち歩くなら断然GALAXY S」と言う人もいれば、「GALAXY Sはプラスティッキーで安っぽいオモチャみたい」と感想を述べた人もいました。

軽いし操作性もそう悪くないGALAXY Sですが、難点を挙げるなら、画面の発色がちょっとドギツい
有機ELのおかげで黒は締まり赤の発色も確かに良く、液晶にできない芸当なのは認めますが、ちょっとケバケバしい方向にチューニングし過ぎに感じます。液晶のGALAXY Tabは、発色はやはりケバめながらも画面設定で彩度調整ができるのですが、Sには彩度の項目がそもそも存在せず。

逆に言えば、色味が気にならないなら、GALAXY Sはけっこういい端末だと思います。
ただ、徹底的に「ええかっこしぃ」なiOSと比べちゃうと、Androidは背伸びしつつもまだ垢抜けないというか野暮ったいというか、バランスの悪さは感じます。とは言えそろそろ「Androidならでは」の立ち位置が確立できてきて、そろそろ棲み分けが成り立つようになってきたのは喜ばしいことです。

あ、iPhoneと比べてGALAXY Sが圧倒的に優れている点がありました。ストラップホールがあります!
特にGALAXY Sは裏はプラスティック、表はすべすべガラスなので、いつか手を滑らせるんじゃないかとヒヤヒヤしながら使うことになります。ストラップはぜひ通しておきたいところです。