2005年04月23日 土曜日

無線LANを使えるようにする

今日の攻略目標は我が家のノートPCの無線LANアダプタ。以前は、NdisWrapperを使っていた。これはWindowsのネットワークドライバをLinuxで使えるようにするという何とも凄いドライバなのだが、でかいファイルの転送(apt-getなど)を行うとドライバごとお亡くなりになる痛い問題があった。(メール読むくらいだったら全然OKだけど。) 最近ネイティブのドライバの安定しているという話を、先週のMozilla Party 6.0で三浦さんに聞いたので、早速インストール。手順は以下の通り。ちなみに我が家はDebianです。

  1. Intel PRO/Wireless 2000BG Driver for Linuxからドライバをダウンロード(正確には、apt-get install ipw2200-source)
  2. module-assistantを実行。手順に従ってipw2200を選択、ビルドまで行う。
  3. http://ipw2200.sourceforge.net/firmware.phpからファームウェアの最新版をダウンロード。
  4. ダウンロードしたファームウェア ipw-2.2-*.fwを/use/lib/hotplug/firmware/ にインストール。
  5. 先ほどビルドしたdebパッケージをdpkg -iでインストール
  6. /etc/init.d/hotplug startするとipw2200がeth3として見えるようになる。
  7. あとは/etc/network/interfacesを適当に設定
  8. 必要に応じて/etc/hibernate/hibernate.confなども修正
  9. これで、ifup eth3 するとネットにつながるはず。
    /etc/network/interfacesの書き方はこんな感じ
auto eth1
iface eth1 inet dhcp
wireless-essid ESS_ID
wireless-mode Managed
wireless-key s:Key

ESS_IDとKeyはそれぞれ各自の無線LANアクセスポイントで設定しているものを入れる。Keyの前にs:を付けるのを忘れないこと。

.xsessionの謎に迫る

漢字変換ができないとか、localeが設定できないとかいろいろな問題があった我が家の環境だけども、Gnome Sessionを起動した場合はすべてうまくいくことが今日のちょっとした調査で分かった。そんなわけで、謎は深まるばかり。と言うことで、DebianにおいてXディスプレイマネージャ経由でログインした場合の起動シーケンスを追っかけることになった。
結論としては、_~/.xsessionが無視されていた_わけだが、さてなぜかという問題となる。僕はwdmでもkdmでも、ウィンドウマネージャを選んでログインしていたのだが、これが間違い。そんなわけで、Xの起動シーケンスを追っかけました。ざっくり起動シーケンスはwdmの場合で今回関係する話のみ書くと…

  1. ログインのウィンドウでユーザ名とパスワードを入れる
  2. このとき選択したウィンドウマネージャは~/.wm_styleに書き出される
  3. /etc/X11/wdm/Xsession を起動する。引数は~/.wm_styleの中身。
  4. /etc/X11/Xsessionの実行する。ざっくり/etc/X11/Xsession.d/ 以下のファイルを順に実行
  5. 20xfree86-common_process-args を実行。/etc/X11/Xsessionの引数を$STARTUPにいれる(defaultなら引数は無し)
  6. 50xfree86-common_determine-startupを実行。もし$STARTUPが設定されていないときは…
    * Xsession.configでallow-user-sessionと記述があり、$USERSESSION(~/.xsession)か$ALTSUERSESSION(~/.Xsession)が存在し、実行可能なら STARTUPに$STARTUPを設定
    * Xsession.configでallow-user-sessionと記述があり、$USERSESSION(~/.xsession)か$ALTSUERSESSION(~/.Xsession)が存在し、実行可能でないなら STARTUP=“sh $STARTUP” を設定
  7. 99xfree86-common_startで、$STARTUP で指定したものを実行
    ということで、kdmやwdmやgdmでウィンドウマネージャを指定して、ログインするとその設定を呼び出してしまう。これはこれで便利なのですが、僕のように軽いwmを使っていると、そのための.sessionに対応するものが無いようで実行されないし、~/.xsessionも読み込んでくれないので、環境設定がなされない。
    ということで、ようやく.xsessionが認識されるようになったので、こんな感じに設定。
#!/bin/bash
LANG=ja_JP.eucJP
PATH=$HOME/bin:$PATH
CVS_RSH=ssh
DEB_MULEUCS_UNICODE=on
export LANG CVS_RSH DEB_MULEUCS_UNICODE
env SSH_ASKPASS=/usr/bin/ssh-askpass ssh-add
if type kinput2 &> /dev/null ; then
  kinput2 -canna &
fi
XMODIFIERS=@im=kinput2 ; export XMODIFIERS
mlterm &
fluxbox

そんなわけで、解決してみれば、何ともしれないお話。それにしても設定がありきたりの方法でできないのは問題だと思う。(やっぱ~/.xsessionの方が嬉しいと思う。)