Ubuntu Weekly Recipe

第7回EeePCでUbuntuを使う/無線LANドライバの追加

今回はASUS EeePCを例に、UbuntuをノートPCで使う場合に役立つレシピを紹介します。EeePC特有の設定ではなく、低解像度環境や、最新のノートPCを使う際に、無線LANドライバが認識されない場合の対処方法が中心です。なお、EeePCには「eee-ubuntu-support」という専用のモジュールが存在しており、これを用いることで周辺環境を整えることができますので、あわせて説明します。

EeePCの概要

EeePCは通称「ASUS版$199 PC」と呼ばれる、きわめて廉価なノートPCです。実際の価格は最下位モデルである2GB SSD+低容量バッテリ搭載のEeePC Surfでも$299で、$199には届きませんが、海外における低価格ノートPCの最低ラインがこれまで$499前後でしたので、大きな低価格化を実現したと言えます。日本国内では以下のコンフィギュレーションのモデルを、49,800円程度で入手できます。

  • OS: WindowsXP Home Edition
  • CPU: Intel製CPU[1]
  • メモリ: 512MB DDR2 SO-DIMM
  • ディスプレイ: 7型 800x480ドット
  • ネットワーク: 有線/無線LAN
  • ストレージ: 本体内蔵 4GB SSD
  • 端子: USB2.0 x3, 外部モニタ出力(D-SUB15pin) , SD/SD HCカードスロット, Line-Out, Mic-In
  • 重量: 0.92kg
  • バッテリ駆動時間: 約3.2時間

ディスプレイのサイズ・解像度が必要最小限であること、ストレージが4GBしかないことが制約となりますが、1kgを切るモバイルPCが5万円で入手できる、というのがEeePCのメリットとなります。

EeePCのハードウェア(参考)

EeePCのスペックの詳細は次の通りです。

なお、Linux環境では、こうした詳細なハードウェア情報をlshwコマンドを用いることで得られます(sudo lshw -short。lshwコマンドは強力なハードウェアリストツールで、-shortの場合はlspciとほぼ同様の簡易出力を、オプション無しで実行することで、バス構成などを含むより詳細な出力を得ることができます。また、sudo lshw -sanitizeを用いることで、シリアル番号などのセンシティブな情報を抑制した形で詳細情報を得ることができます⁠⁠。

多くのディストリビューションではオプショナルな位置づけのようですが、Ubuntuでは標準でlshwコマンドが導入されています。

H/W path             Device     Class       Description
=======================================================
                                system      702
/0                              bus         702
/0/0                            memory      64KB BIOS
/0/4                            processor   Intel(R) Celeron(R) M processor     
/0/4/5                          memory      32KB L1 cache
/0/4/6                          memory      512KB L2 cache
/0/4/7                          memory      L3 cache
/0/1f                           memory      2GB System Memory
/0/1f/0                         memory      2GB DIMM Synchronous 400 MHz (2.5 ns
/0/100                          bridge      Mobile 915GM/PM/GMS/910GML Express P
/0/100/2                        display     Mobile 915GM/GMS/910GML Express Grap
/0/100/2.1                      display     Mobile 915GM/GMS/910GML Express Grap
/0/100/1b                       multimedia  82801FB/FBM/FR/FW/FRW (ICH6 Family) 
/0/100/1c                       bridge      82801FB/FBM/FR/FW/FRW (ICH6 Family) 
/0/100/1c.1                     bridge      82801FB/FBM/FR/FW/FRW (ICH6 Family) 
/0/100/1c.1/0        eth0       network     L2 100 Mbit Ethernet Adapter
/0/100/1c.2                     bridge      82801FB/FBM/FR/FW/FRW (ICH6 Family) 
/0/100/1c.2/0        wifi0      network     AR5006EG 802.11 b/g Wireless PCI Exp
/0/100/1d                       bus         82801FB/FBM/FR/FW/FRW (ICH6 Family) 
/0/100/1d.1                     bus         82801FB/FBM/FR/FW/FRW (ICH6 Family) 
/0/100/1d.2                     bus         82801FB/FBM/FR/FW/FRW (ICH6 Family) 
/0/100/1d.3                     bus         82801FB/FBM/FR/FW/FRW (ICH6 Family) 
/0/100/1d.7                     bus         82801FB/FBM/FR/FW/FRW (ICH6 Family) 
/0/100/1e                       bridge      82801 Mobile PCI Bridge
/0/100/1f                       bridge      82801FBM (ICH6M) LPC Interface Bridg
/0/100/1f.2          scsi1      storage     82801FBM (ICH6M) SATA Controller

EeePCでのUbuntuの利用

ご覧のようにEeePCのハードウェア構成は普通のノートPCと大差ありません。USB接続の光学ドライブを接続することで、Ubuntuを通常通りインストールすることができます。

Ubuntuが最小限要求するストレージ容量は4GB程度であるため、EeePCのSSD上にも十分配置することが可能です。クリーンインストール直後は2?2.5GB程度の容量消費ですので、ソフトウェアの追加や、ホーム領域にもそれなりの余裕があります。また、ソフトウェアアップデートを行う場合も、インストールされたパッケージは随時削除されますので、これによって容量が致命的に圧迫されることはありません[2]⁠。

ただし7.10をインストールした場合、次のような問題に遭遇すると思われます。

  • シャットダウンが正常に行われない。
  • ハイバネートが正常に行われない。
  • 有線イーサネットポートを利用する際、電源投入後にケーブルを接続しても認識されない。
  • 無線LANが利用できない。

eee-ubuntu-support

EeePCで発生する、上述のような問題を解決するソフトウェアパッケージがeee-ubuntu-supportという名称で配布されています。これはEeePCで必要なドライバや、initスクリプトの改変などを一つにまとめたものです。

インストールは次のように行います。有線でネットワークに接続した状態で作業を行ってください。上述の通り、有線イーサネットポートは電源投入後にケーブルを挿入しても正常に認識されませんので、電源投入以前からイーサネットケーブルを挿した状態で行ってください。

$ wget http://eee-ubuntu-support.googlecode.com/files/eee-ubuntu-support_v0.7.tgz
$ tar xzf eee-ubuntu-support_v0.7.tgz
$ cd eee-ubuntu-support_v0.7
$ for i in modules acpi clock wifi sound init; do sudo ./install.sh $i ; done

これにより、シャットダウン・ハイバネートなどの電源管理に関する問題や、無線LANが使えない、といった問題が解決し、EeePCで快適にUbuntuを利用することができるようになります。また、このモジュールによって行われるスクリプトの改変により、ブートプロセスのチューニングが行われ、起動時間も短くなります。こうした、ブート時間短縮のレシピは別の機会に紹介する予定です。

なお、配布パッケージには「sudo ./install.sh all」で全てのモジュールがインストールできると記載がありますが、X11モジュールをインストールすると3D Desktopが利用できなくなるため、筆者は推奨しません[3]⁠。

一般的な環境での対処

EeePCは価格が安いために(それ以上に、廉価なノートPCとして多くの注目を集めるデバイスであるため)利用者が多く、eee-ubuntu-supportのような専用のパッケージがリリースされています。これにより、ごく簡単な手順で、デバイスが認識されないといった問題を解決することができます。

こうした配布物が存在しない場合を考えてみましょう。

Ubuntuでは、標準配布物に無線LANやSCSI HBA、Fibre ChannelアダプタやNVIDIA製・AMD(ATi)製ドライバなど、バイナリで配布されていたり、あるいはデバイスを動作させるために、ファームウェアを動的にロードする必要があるソフトウェアを、Linux Kernelと同時にインストールできるようになっています(linux-restricted-modulesパッケージ⁠⁠。

しかし、全てのドライバが標準配布物に含まれているわけではないことと、新しいデバイスの追加が半年に一度になってしまうため、最新ハードウェアや、マイナーなハードウェアは正常に認識されない、あるいは認識されていても動作しない、といった問題に遭遇することになります。

特に無線LAN関連は、デバイスにファームウェアを動的にロードさせることで動作を定義して動作させる設計が多く、かつ、そうしたファームウェアはバイナリ形式でのみ提供されている上に、デバイスごとに更新しなければならないため、⁠認識されない」あるいは「認識されるが上手く動作しない」といった問題に遭遇するケースが多くなります。こうしたデバイス動作に関する問題は、多くは次バージョンのUbuntuを待つことで解決できるのですが、最大で半年程度待つ必要が出てきてしまいます。特に、現在のノートPCでは無線LANが利用できないのは致命的です。こうした場合、手動でドライバをビルドすることになります。

なおこうした面倒なく無線LANを利用したい場合、筆者はIntel製無線LANをお勧めします(かつ、最新よりも1世代古いものを用いると確実でしょう⁠⁠。

ドライバのビルド環境の構築

ドライバのビルドを行う場合、まずビルド環境を整える必要があります。Ubuntuでは次のように、2つのパッケージをインストールすることでドライバのビルドに必要なソフトウェアがインストールされます[4]⁠。

$ sudo apt-get update
$ sudo apt-get install build-essential linux-headers-generic

server版やxen, rtなどといった異なるフレーバーのカーネルを利用している場合は、以下のように適切なフレーバーを指定してください。

$ sudo apt-get install build-essential linux-headers-{server,xen,rt}

なお、ドライバのビルドを目的としてインストールする場合、linux-headersパッケージのうち、"linux-headers-2.6.22-14-generic"といったバージョン番号やABI番号を含んだパッケージを単体ではインストールせず、linux-headers-generic(等)をインストールし、その依存関係によって導入されるようにしてください。これらのパッケージを単体でインストールした場合、"2.6.22-15-generic"といった、ABIが異なる新バージョンのカーネルがリリースされた場合にlinux-imageパッケージのみが更新されてしまい(=-headersパッケージの更新が行われず)、手動で対応が必要になる可能性があります。

無線LANドライバの追加/Atheros製品の場合

Atheros製の無線LANデバイスを動作させる場合、Linux上ではmadwifiを用います。madwifiはUbuntuの標準配布物にも含まれていますが、バージョンが古い等の理由で正しく認識できない場合があります。

このような場合、madwifiの最新版を手動でインストールすることで対処が可能です。対処は次のように行います。

  • まず、既存のmadwifi(標準配布物の、linux-resticted-modulesに含まれるもの)を無効にするため、/etc/default/linux-restricted-modules-commonを修正します。

    修正前:
    DISABLED_MODULES=""
    修正後:
    DISABLED_MODULES="ath_hal"
  • そのままでは既存のmadwifiがロードされていて、インストールに支障があるため、ドライバをアンロードします。

    $ sudo ifconfig ath0 down
    $ sudo modprobe -r ath_pci
  • madwifiの最新版をダウンロードし、展開します。

    $ wget http://downloads.sourceforge.net/madwifi/madwifi-0.9.4.tar.gz
    $ tar xzf madwifi-0.9.4.tar.gz
    $ cd madwifi-0.9.4/
  • ドライバをビルドし、インストールします。以下の例では念のためdepmod -aを実行していますが、通常はmake install時に自動的に実行されるため、不要なはずです。

    $ make 
    $ sudo make install
    $ sudo depmod -a
    $ sudo modprobe ath_pci

なお、カーネルの「セキュリティアップデートではない更新」⁠ABI番号が変更になる更新)が行われた場合、ドライバのビルド・インストールを再度やりなおす必要があります。

無線LANドライバの追加/EeePCの場合

EeePCも標準ではAtheros製無線LANデバイスが搭載されていますが、チップの関係で、特有のパッチを必要とします。

Ubuntuのコミュニティドキュメントの、EeePCの項目を参照してください。

なお、この手順ではsudo chmod 644 /etc/init.d/linux-restricted-modules-commonを実行していますが、これは現在のEeePCでは無線LANモジュール以外にRestricted Modulesを利用するデバイスが存在しないため、仕組みそのものを無効にしても問題ないためです。通常は/etc/default/linux-restricted-modules-commonでデバイス単位でdisableするようにしてください。

無線LANドライバの追加/Ranlink製品の場合

Ralink製品は日本国内ではUSB無線LANデバイスなどによく利用されています(無線LANルータなどにも良く使われているのですが、あまり意識する機会はないでしょう⁠⁠。

Ralink製品のドライバはUbuntu標準ではlinux-ubuntu-modulesパッケージに含まれており、linux-restricted-modulesと同様、標準配布物でインストールされるようになっています。が、特にUSB無線LANデバイスの場合、標準の(古い)ドライバでは動作しないことが多いようです。

Ralink製品のドライバは、http://www.ralinktech.com/ralink/Home/Support/Linux.htmlからダウンロードが可能です。利用している製品にあったドライバを利用してください。製品のデバイス名が不明な場合、前述のlshwコマンドを用いて確認することができます。

ここではRT2870のドライバを例に説明します。

  • ドライバをダウンロードし、展開します。

    $ wget  http://www.ralinktech.com.tw/data/drivers/2007_1220_RT2870_Linux_STA_v1.2.1.0.tar.bz2
    $ tar jxf 2007_1220_RT2870_Linux_STA_v1.2.1.0.tar.bz2
    $ cd 2007_1220_RT2870_Linux_STA_v1.2.1.0
  • ドライバをビルドし、インストールします。madwifiの場合と同様、⁠念のため」depmod -aを実行しています。  なお、Makefileの出来が悪く、make時に/tftpbootへ書き込む権限がないとmakeが失敗するため、make時点からsudoで実行する必要があります。

    $ sudo make
    $ sudo make install
    $ sudo depmod -a
    $ sudo modprobe rt2870sta
  • /etc/modprobe.d/rt2870staを新規作成し、rt2870staをra0として認識するようにaliasを設定します。また、/etc/modulesでrt2870staをロードするように設定します。

    /etc/modprobe.d/rt2870sta
    alias ra0 rt2870sta
    /etc/modules
    (以下を末尾に追加します)
    rt2870sta
    参考になるドキュメント
    EeePC関連のWikiページ
    http://wiki.eeeuser.com/
    EeePCに関するUbuntuのコミュニティドキュメント
    https://help.ubuntu.com/community/EeePC
    Debian WikiのEeePCのページ
    http://wiki.debian.org/DebianEeePC
    無線LANデバイスの対応状況
    https://help.ubuntu.com/community/WifiDocs/WirelessCardsSupported

おすすめ記事

記事・ニュース一覧