msi Wind Netbook u100 の無線LAN繋がった。

Notebook購入してから実に3年、勉強がてら軽く調査したことはありましたが、簡単には解決せず、
またそれほど無線LANを使わなければならないという機会もなかったのとで、使えないままずーっと放置してました。


が、ExtJSセミナーを来週(投稿時点では早くも明日w)に控え、「是が非でもNotebookの無線LANを使えるようにしなければ!」と、今回ばかりは意気込んで環境構築に臨んだところ、怪しいながらも何とか使えるようになりました!
しっかし今まで使えてなかった原因の一つに気がついて俺はおしっこちびりそうになりましたよ。


「内臓無線LANアダプターの電源が入ってなかった」


ショックでかいです。
恐ろしく快適な無線LANライフですが、快適であればあるほど、3年も無駄にしていたのかと。。
今となっては嫁さんの実家からもつなげられてしまうなんて、もう有線には戻れない。


とりあえず作業ログとも言えない不正確な情報をまとめておこう。


環境

OS:Ubuntu 11.04
PC:msi Wind Netbook u100

OSはともかく、PCのモデルから周辺機器情報を調べると、
PCの背面に

RT Module Insite
Ralink Technolosy Corporation
RT2700E(MS-6890)

と記載がありました。で、搭載されているチップを更に調べると、ここに気になる記述が。PCの型番が微妙に違いますが、Wind Netbook u100 Plus の行の「見つかった問題点」の列にこんな記述が。

無線LANモジュールがRT2700Eの個体の場合、標準ドライバでは一部認識できないアクセスポイントあり。Ralink社が提供するRT2860STAのドライバを入れると正常に認識。

てことは、RT2860STAのドライバを入れさえすれば問題なさげです。
ここまで情報を得ることができたので、現状のubuntuがこのハードウェアをどう扱っているか調べていきます。


lspci

まずはこの無線LANアダプタがハードウェア的に認識されているかどうか確認します。
PCIバス接続されているハードウェアを確認するには、「lspci」コマンドを実行します。
実行すると、認識しているハードウェア情報が出力されます。
チップセットっぽい名前も表示されるらしいですが、運が悪い(ハードだった)場合は表示されないこともあるようです。
型番チェックで使用する感じでしょうか。


実行してみると、自分のPCではこうなりました。

~ $ lspci
00:00.0 Host bridge: Intel Corporation Mobile 945GME Express Memory Controller Hub (rev 03)
00:02.0 VGA compatible controller: Intel Corporation Mobile 945GME Express Integrated Graphics Controller (rev 03)
00:02.1 Display controller: Intel Corporation Mobile 945GM/GMS/GME, 943/940GML Express Integrated Graphics Controller (rev 03)
00:1b.0 Audio device: Intel Corporation N10/ICH 7 Family High Definition Audio Controller (rev 02)
00:1c.0 PCI bridge: Intel Corporation N10/ICH 7 Family PCI Express Port 1 (rev 02)
00:1c.1 PCI bridge: Intel Corporation N10/ICH 7 Family PCI Express Port 2 (rev 02)
00:1d.0 USB Controller: Intel Corporation N10/ICH 7 Family USB UHCI Controller #1 (rev 02)
00:1d.1 USB Controller: Intel Corporation N10/ICH 7 Family USB UHCI Controller #2 (rev 02)
00:1d.2 USB Controller: Intel Corporation N10/ICH 7 Family USB UHCI Controller #3 (rev 02)
00:1d.3 USB Controller: Intel Corporation N10/ICH 7 Family USB UHCI Controller #4 (rev 02)
00:1d.7 USB Controller: Intel Corporation N10/ICH 7 Family USB2 EHCI Controller (rev 02)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev e2)
00:1f.0 ISA bridge: Intel Corporation 82801GBM (ICH7-M) LPC Interface Bridge (rev 02)
00:1f.2 IDE interface: Intel Corporation 82801GBM/GHM (ICH7 Family) SATA IDE Controller (rev 02)
01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8101E/RTL8102E PCI Express Fast Ethernet controller (rev 02)
02:00.0 Network controller: Ralink corp. RT2860
~ $ 

最後の行、

02:00.0 Network controller: Ralink corp. RT2860

これがWireless LANアダプタですね。幸せな事に思いっきり正しいチップセットっぽい名前が表示されてます。RT2860STAドライバで問題なさげです。
ちなみにUSB接続の無線LANクライアントを購入した場合は、lspciではなく、次のコマンドで詳細情報を得るらしいです。

lsusb

USBで接続されてハードウェア的に認識しているデバイスを表示するコマンドです。
ネットワークアダプタが外付けUSBみたいなモノを使っている場合、このコマンドでハードウェアの情報を取得できるらしいですが、今回の場合はPCI接続の内臓無線LANアダプタだったので使わないコマンドでした。

lsmod

次に、カーネルがこの無線LANアダプタにアクセスできる状態にあるかどうかを確認します。
無線LANアダプタに限らず、ハードウェアにアクセスするにはそのハードウェアのドライバが必要で、ドライバは普通カーネルモジュールという形で提供されます。
今回の場合はRT2860STAモジュールが確認できればOKです。

確認するには「lsmod」コマンドを使用し、動作中?だか組み込まれ中?だかのカーネルモジュール一覧を表示させて確認します。
現段階で自分の環境では次のように出力されます。

~ $ lsmod
Module                  Size  Used by
binfmt_misc            13213  1 
parport_pc             32111  0 
ppdev                  12849  0 
rfcomm                 38125  8 
snd_hda_codec_realtek   255882  1 
sco                    17827  2 
joydev                 17322  0 
snd_hda_intel          24113  2 
bnep                   17785  2 
snd_hda_codec          90901  2 snd_hda_codec_realtek,snd_hda_intel
l2cap                  48656  16 rfcomm,bnep
snd_hwdep              13274  1 snd_hda_codec
snd_pcm                80042  2 snd_hda_intel,snd_hda_codec
i915                  451033  3 
snd_seq_midi           13132  0 
snd_rawmidi            25269  1 snd_seq_midi
snd_seq_midi_event     14475  1 snd_seq_midi
uvcvideo               66851  0 
snd_seq                51291  2 snd_seq_midi,snd_seq_midi_event
btusb                  18160  2 
snd_timer              28659  2 snd_pcm,snd_seq
bluetooth              65493  9 rfcomm,sco,bnep,l2cap,btusb
snd_seq_device         14110  3 snd_seq_midi,snd_rawmidi,snd_seq
psmouse                73312  0 
usb_storage            43946  0 
snd                    55295  13 snd_hda_codec_realtek,snd_hda_intel,snd_hda_codec,snd_hwdep,snd_pcm,snd_rawmidi,snd_seq,snd_timer,snd_seq_device
videodev               75143  1 uvcvideo
drm_kms_helper         40745  1 i915
rt2860sta             494649  1 
drm                   184164  4 i915,drm_kms_helper
uas                    17676  0 
serio_raw              12990  0 
crc_ccitt              12595  1 rt2860sta
i2c_algo_bit           13184  1 i915
soundcore              12600  1 snd
snd_page_alloc         14073  2 snd_hda_intel,snd_pcm
video                  18951  1 i915
lp                     13349  0 
parport                36746  3 parport_pc,ppdev,lp
r8169                  42534  0 
~ $ 

途中で、

rt2860sta             494649  1 

が表示されており、ドライバがインストールされているのが分かります。
ただ、これ問題がありまして、確かデフォルトでこのドライバは認識されていたのですが、実はその状態では動かないようでした。
ここに記述があって助かったのですが、このドライバは「/etc/Wireless/RT2860STA/RT2860STA.dat」というファイルを読み込む必要があるようなのですが、実際にはこのディレクトリもdatファイルも存在していませんでした。
面倒なので、この記事の通りに、ドライバも最新にしてしまえとばかりにRalink社のダウンロードページから該当する最新のドライバをダウンロードし、makeとかmake install とかしました。
すると上記ディレクトリもdatファイルも出来上がっていますので、「sudo /etc/init.d/networking restart」コマンドを実行します。
以前試した時はこれをやっていなかった可能性が高いです。(ディレクトリが存在していませんでしたからねぇ。)
また、更にこれだけではやはり使えないようです。
何が問題かと言うとこの無線LANアダプタ、この段階ではrt2860staとrt2800pciのどちらのモジュールでも使える「はず」なのですが、実際はrt2800pciだと動作してくれないようです。
にも関わらず、実際にはrt2800pciで動作させようとしているらしいのですね。
具体的にどちらのモジュールを使っているかを確認するには、lsmodにオプションをつけて実行するようです。

~ $ lspci -vnns 02:00.0
02:00.0 Network controller [0280]: Ralink corp. RT2860 [1814:0781]
	Subsystem: Micro-Star International Co., Ltd. Device [1462:6890]
	Physical Slot: 0-1
	Flags: bus master, fast devsel, latency 0, IRQ 17
	Memory at dfc00000 (32-bit, non-prefetchable) [size=64K]
	Capabilities: <access denied>
	Kernel driver in use: rt2860
	Kernel modules: rt2860sta, rt2800pci

~ $ 

「-vnns」の後ろにつけた情報は、lspciを単独で実行した際に、お目当ての無線LANアダプタの情報が表示された行の先頭に記述されていた情報です。これを指定するとより詳細な情報を得ることができます。
上記コマンドの出力結果は、現状での出力結果です。

	Kernel driver in use: rt2860

と出力されていますが、うまく動作していない状況下では次のように表示されていたのでしょう。

	Kernel driver in use: rt2800pci

確認したいけど面倒なのでしませんw
次回ubuntu再インストールするときにこのブログを修正がてら確認します。


さて、rt2800pciがロードされている状態の場合、これがロードされないようにしてあげる必要があります。
そこで、モジュールロードの設定にブラックリストファイルを作成し、このモジュールがロードされないようにしてやる必要があります。
自分は次のように設定しました。

~ $ cat /etc/modprobe.d/blacklist-rt2800pci.conf 
blacklist rt2800pci
~ $ 

このファイルは存在していなかったので管理者権限で作成しました。
この状態で・・・再起動したんだっけっかな。。ひょっとしたら「/etc/init.d/networking restart」実行するだけでイケるのかも。。覚えてないやw

とりあえず再起動すれば大丈夫だと思います。(すげー適当だw)


んで、再起動したら再度「lspci -vnns 02:00.0」を実行し、今度は

	Kernel driver in use: rt2860

と出力されていることを確認します。

modprob

お目当てのモジュールがロードされていなかった場合は、このコマンドを使ってモジュールをカーネルに追加したり削除したりします。
「今回の調査では」このコマンドは使用しなかった気がします。
ちなみに・・・このコマンドは昔いろいろいじったときも実行した記憶があるのですが、
コマンド実行しただけだとPCを再起動したときにリセットされてしまったような。。
そんで毎回実行しなくて済むようにするにはなんか設定ファイルを修正したような。。
(嫁さんのノートPCだったかな?)

ifconfig

使用可能なネットワークアダプターの情報を表示するコマンド。
lo、eth0、これらに加えて、自分の環境では「wlan0」が表示されました。
これが無線LANアダプターになります。
無線LANアダプタが表示されなかった場合、次のiwconfigを実行し、無線LANアダプタの名称を確認した上で、

~ $ ifconfig アダプタ名 up

を実行すると指定したアダプタが有効になるようです。
自分が実行した時には既に表示されていました。

iwconfig

無線LANアダプターの情報を表示するコマンド。
ちがった。有線LANネットワークアダプターも表示しますが、有線LANの場合は「no wireless extensions.」と表示されるだけになります。
で、無線LANアダプターの場合は接続に関連する詳細情報が表示されたりします。
あ、無線LANアダプターを指定して設定を変更したりもできます。
設定する場合は管理者権限が必要です。
自分の環境で実行するとこんな感じになってます。

~ $ iwconfig
lo        no wireless extensions.

eth0      no wireless extensions.

wlan0     Ralink STA  ESSID:"XXXXXXXXXX"  Nickname:"RT2860STA"
          Mode:Managed  Frequency=2.417 GHz  Access Point: 06:26:87:01:A6:FE   
          Bit Rate=54 Mb/s   
          RTS thr:off   Fragment thr:off
          Link Quality=100/100  Signal level:-66 dBm  Noise level:-81 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

~ $ 

wlan0のエントリ−が無線LANアダプタの諸情報になります。
繋がらなかった時代はESSIDが""の状態のままでした。
wlan0を、ESSIDがXXXXXXXXXXのアクセスポイントに継げたい場合は次のようなコマンドラインを実行します。

~ $ sudo iwconfig wlan0 essid "XXXXXXXXXXX"

で、ここが「怪しいながらも何とか使えるようになりました」ってトコなんですが、
自分の自宅でオンラインにしたい場合、アダプタがアクセスポイントと接続しようとしている最中にこのコマンドを実行しないと繋がってくれません。
なんでだろう。。だれか教えてくださいエロイ人。


さて、実際に調査していた時にはここまでやっても無線LAN接続することができませんでした。
あ、記述わすれてましたが、問題切り分けの為に、アクセスポイント側の設定はセキュリティがザルの状態で試していました。
で、更に調べていたらそもそもアクセスポインタ見えてるの?という下りをどっかで見つけたんですが、どこの記事だったか忘れてしまいました。。
とにかくその人が言うには次のコマンドでそれが確認できるとのこと!

iwlist

scanオプションを指定してノートPCから見える電波の一覧を表示することができるコマンドっぽいです。(ホント適当だなw)
てか、scanオプションしていしないパターンで使ってないので、他に何ができるか知りませんw
で、これを実行すると、その時はこんな風に見えてました。

~ $ iwlist scan
lo        Interface doesn't support scanning.

eth0      Interface doesn't support scanning.

wlan0     No scan results

~ $ 

ミエテネーヨ。で、ここでその記事で困ってる人と同じ状況になったんですね。
そしたら相談に乗ってる人が、


無線LANに電源入ってる?」


と言ったもんで、自分も「!!!」ってな感じに。
いそいでこのNotebookの内臓無線LANの電源を有効にする方法を調査した結果、

Fnキー + F11キー

の組み合わせで電源のオンオフをすることが可能ということを初めて知りましたw
で、これやってみると、トグルキーのような感じで本体のキーボード右下にズラリとならんでいるランプのうちの左から2番目のランプが点いたり消えたりw

点いてる状態で

sudo iwconfig wlan0 essid "XXXXXXXXXX"

やったら、繋がるようになりました。




内臓無線LANだから電源あるよなそりゃ。。
デスクトップじゃないんだから、常に電源入ってたらバッテリー無駄に消費しちゃうわけで。。


でも電源入って無くて3年無駄にしちゃったとか・・・マヌケだ。。