近年のノートPCを利用する場合、無線LAN(Wireless LAN; WLAN)は欠かせないものになりつつあります。UbuntuでももちろんWLANを利用することができます。今回はUbuntuで無線LANを利用する場合に役立つレシピを紹介します。
nm-editor
Ubuntuの標準状態では、通知領域に表示されているネットワークアイコン(図1 の左端)から、WLANの基本的な設定を行うことができるようになっています。
図1 ネットワークアイコン
通常はネットワークアイコンを左クリックし、図2 のようなアクセスポイントリストを表示させ、接続したいアクセスポイントを選択、ネットワークキーを入力して接続、といった流れで利用することになります[1] 。現在ではWEPによる暗号化はほとんど意味がありませんから、通常はWPAを利用することになるでしょう 。
図2 アクセスポイントのリスト
ネットワークアイコンにはWLAN専用の設定画面が用意されています。ネットワークアイコンを右クリックして表示されるメニューからアクセスできる、[ Edit Wireless Networks..]( nm-editor)がそれです(図3 ) 。
図3 nm-editorの起動
この設定画面を起動すると、図4 のように、過去に接続したことのあるアクセスポイントと、そのBSSID・セキュリティ情報・ネットワークキー(パスワード)を一覧することができます。
図4 nm-editor
[1]
WLANのアクセスポイントの設定によっては、定期的に発信されるビーコン信号を停止させ、ESSIDを周知させず、アクセスポイントリストに表示されないように設定できるものがあります(いわゆる「ステルス化」などと呼ばれる機能です) 。この設定はセキュリティ的にはほとんど意味がありません。ビーコンが発信されていないアクセスポイントであっても、モニターモードに設定した無線LANアダプタがあればESSIDを取得することは可能です(つまり、いわゆるステルス化機能は、一般的な利用者に対してのみESSIDを隠す機能でしかありません) 。その一方で、ステルス化設定を行った場合、クライアントソフトウェアの実装によっては正常に接続できない問題を引き起こす可能性があります。
ただし、PlaceEngine のようなサービスにESSIDを掲載させない、という点では *多少* の意味はあります(BSSIDは隠蔽できませんから、根本的な意味での対策にはなりえません) 。
ターミナル上で無線LANの状態を確認する(wavemon)
時にはターミナル経由でWLANの動作状況を知りたくなること(何らかの事情でSSHでリモートログインしているマシンでWLAN周りの障害が起きている場合や、あるいはウィジェット としてWLANの情報を表示するウインドウを作りたい場合などが該当するでしょう)や、より詳細なリンク状況を知りたくなることがあります。
このような場合、wavemonパッケージを利用するのが便利でしょう。wavemonはターミナル上で動作するアプリケーションで、ifconfig・iwconfigで表示される各種情報をリアルタイムで表示することができます。次のコマンドを用いるか、Synapticでwavemonパッケージをインストールしてください。
$ sudo apt-get update
$ sudo apt-get install wavemon
インストール後、[ アプリケーション] →[ アクセサリ] →[ 端末]上でwavemonを実行することで起動できます。wavemonの基本画面は図5 のようなもので、WLANのリンク状況・ノイズ情報や入出力の統計、通信状況などを包括的に表示することができます。
図5 wavemonによる各種数値の表示
デフォルト設定では画面の更新頻度が100msに設定されていますので、[ F7]を押し、設定画面で“ Statistics updates” の数値を50ms程度にし、[ Save configuration ]しておくと良いでしょう。
再度初期画面(info画面)に戻すには、操作として[F1]を押す必要がありますが、標準の端末(gnome-terminal)を利用している場合、[ F1]を押すとgnome-terminalのヘルプが起動してしまうはずです。gnome-termianlの[編集] →[ キーボード・ショートカット]を開き、リストの最下部にある「ヘルプ」の「目次」への[F1]キーの割り当てを削除してから操作してください(クリックして[BackSpace]を押します) 。また、[ F2]を押すことでこれまでの動作のヒストグラムを確認することもできます(図6 ) 。
図6 wavemonによるヒストグラム
NDISドライバの利用
WLANを利用する場合、場合によってはUbuntuからネットワークカードが認識されず、利用できない場合があります。このような場合、ndiswrapperを用いてWindows用(厳密にはNDIS仕様)のドライバを利用すると良いでしょう。筆者が個人的に所有している、Corega CG-WLCB144GN(チップはAtheros AR5416)の場合の手順を以下に示します。NDISドライバが提供されているなら、ほとんどのカードで同じ手順で利用できるでしょう[2] 。
ndiswrapperのインストール
NDIS仕様のドライバを利用する場合、ndiswrapperパッケージをインストールし、既存のNDISドライバのバイナリを読み込ませる、といった作業が必要になります。このような操作をGUIから行える、ndisgtkパッケージをインストールするのが良いでしょう。ndisgtkパッケージを導入することで、必要な他のパッケージも自動的に導入されます。次のコマンドを用いるか、Synapticでndisgtkパッケージをインストールしてください。
$ sudo apt-get install ndisgtk
Windows向けドライバの入手(Windowsの自己展開形式アーカイブの展開)
次に、NDIS仕様のWindows向けドライバを入手します。CG-WLCB144GNの場合、コレガのWebページ から入手することができます。ドライバファイル(wlcb144gn_111.exe)をダウンロードすると困るのが、拡張子がexeであることです。このような場合、fileコマンドで圧縮形式を識別することができます。
$ file wlcb144gn_111.exe
wlcb144gn_111.exe: MS-DOS executable PE for MS Windows (GUI) Intel 80386 32-bit, LHa self-extracting archive
LHaの自己展開形式であることが分かりましたから、通常通り展開することでドライバファイルを得ることができます。展開にはlha-sjisパッケージが必要です。
$ lha x wlcb144gn_111.exe
このように、自己展開形式であっても通常のアーカイブと同じように扱うことができます[3] 。
また、ファイルを展開した時点で、ドライバの実体が存在するディレクトリを確認しておきましょう。Windowsのドライバは、一般には1つのinfファイルと、1つ以上の.sysファイルで構成されています。このようなドライバパッケージを利用する場合、以下のように.infファイルを検索することで、ドライバが格納されたディレクトリを知ることができるでしょう。
$ find . -name "*.inf"
./autorun.inf
./installer/driver/cg-wlcb144gn/vista_x64/netathrx.inf
./installer/driver/cg-wlcb144gn/vista_x86/netathr.inf
./installer/driver/cg-wlcb144gn/xp2000/net5416.inf
[3] ただし、一部のインストーラは、既存のアーカイブと異なる形式を利用しており、展開できないこともあります。Install Shiled形式の自己展開アーカイブなどが該当します。このような場合はWineをインストールし、Wine環境上で実行することで展開できるでしょう。
ndisgtkによる設定
Corega CG-WLCB144GNはUbuntu 8.04では認識されませんので、そのままPCカードスロットに装着しても、次のようなdmesgが出力されるだけです。当然このままでは動作しません。
[ 1284.334307] pccard: CardBus card inserted into slot 0
この状態でndiswrapperの設定を行います。ndisgtkをインストールすると、[ システム] →[ システム管理] →[ Windows Wireless Driver]に設定メニューが追加されます。起動すると図7 のようなウインドウが開きますので、[ Install New Driver]を選択し、さきほどfindコマンドで検索したinfファイルを指定します。
図7 起動直後のndisgtk
今回は「xp2000/net5416.inf」を指定し、Windows 2000/XP用ドライバをインストールしました。インストール指定が終わると、図8 のようにドライバが認識され、利用できるようになります。以降は再起動後も自動的に認識されるようになります。
図8 ドライバが認識された状態
起動後にカードを装着すると、次のようにドライバが認識され、デバイスが設定されるのが見て取れるでしょう[4] 。
[ 120.455506] pccard: CardBus card inserted into slot 0
[ 120.517236] ndiswrapper version 1.52 loaded (smp=yes, preempt=no)
[ 120.594869] ndiswrapper: driver net5416 (Corega K.K.,2/13/2007,6.0.2.75) loaded
[ 120.595227] PCI: Enabling device 0000:16:00.0 (0000 -> 0002)
[ 120.595243] ACPI: PCI Interrupt 0000:16:00.0[A] -> GSI 16 (level, low) -> IRQ 20
[ 120.595727] PCI: Setting latency timer of device 0000:16:00.0 to 64
[ 121.028725] ndiswrapper: using IRQ 20
[ 121.227362] wlan1: ethernet device 00:0a:79:**:**:** using serialized NDIS driver: net5416, version: 0x60000, NDIS version: 0x501, vendor: 'NDIS Network Adapter', 168C:0023.5.conf
[ 121.239611] wlan1: encryption modes supported: WEP; TKIP with WPA, WPA2, WPA2PSK; AES/CCMP with WPA, WPA2, WPA2PSK
[ 121.242130] usbcore: registered new interface driver ndiswrapper
[ 121.274184] ADDRCONF(NETDEV_UP): wlan1: link is not ready
[4] ただし、ndiswrapperで設定したドライバの多くは、ホットアンプラグ(電源を入れたままのデバイスの取り外し)が行えません。筆者の環境でホットアンプラグを行うと、Kernel Panicが発生します。ホットアンプラグの前に「sudo modprobe -r ndiswrapper」を実行し、ドライバをアンロードしてください。
参考になるドキュメント