Ubuntu Weekly Recipe

第158回UbuntuとXLinkでレッツ狩猟生活!

厳寒の頃、みなさん元気に狩猟していますか? 筆者も昨年末に発売されたプレイステーションポータブル(以下PSP)用ゲーム、モンスターハンターポータブル3(以下MHP3)をプレイする激務を連日こなしていたりします。

そこで今週のレシピは仲間といっしょにPSPで狩りに出かけるための必須ソフト、XLinkをUbuntu上で動かす方法を紹介します。

XLinkとは?

PSPは本体に無線LAN機能を搭載しており、ゲームによっては無線LANのアドホックモードを利用して協力/対戦プレイを行うことができます。アドホックモードは機器同士を直接接続する無線LANの動作方式[1]ですので、ゲームを遊ぶためには「同一の場所にプレイする全員が集まる」必要があります。友達の家に集まって遊ぶような場合には問題ありませんが、やはり各人が自宅からインターネット越しに遊べたほうが便利です。そこで登場するのがXLinkです。XLinkは「インターネット越しにアドホック通信」を実現するためのサービスとソフトウェアで、Linux版も公開されています[2]⁠。

XLinkを用いたアドホック通信のイメージ(XLinkサーバは図から省略⁠⁠。本来PSP同士で行うアドホック通信を、PCとインターネットが中継する
XLinkを用いたアドホック通信のイメージ(XLinkサーバは図から省略)。本来PSP同士で行うアドホック通信を、PCとインターネットが中継する

無線LANアダプタを準備する

XLinkでゲームをプレイするためには、PSPとUbuntuをアドホック接続するための無線LANアダプタが必須です。つまりPCには、Ubuntu自身がインターネットに接続するためと、PSPを接続するための2つのネットワークアダプタが装着されている必要があります。

そして日本版カスタムであるXLink KaiのサーバをPLANEXが運営していることもあり、アドホック通信に使う無線LANアダプタにはPLANEX製のものが推奨されています。筆者はUbuntu 10.04.1上で、91回でも紹介されている、PLANEX GW-USMicroNを使用しました。おそらくRalinkのRT2870かRT3070を搭載したモデルであれば、本稿と同じ手順で接続が可能なのではないかと思います[3]⁠。

デバイスドライバのコンパイル

PLANEX GW-USMicroNをUbuntu 10.04.1に接続すると、/lib/modules/2.6.32-27-generic/kernel/drivers/staging/rt2870/rt2870sta.koがロードされ使用可能になります。しかしこのカーネルに含まれるドライバでは、XLinkへの接続がうまくいきません。そこで最新のドライバをコンパイルして導入します。まずRalinkのページからRT8070/RT3070/RT3370 USB用ドライバをダウンロードします。本稿執筆時点でのバージョンは2.5.0.1でした。

Ubuntu 10.04.1カーネルに含まれるドライバ情報
$ modinfo rt2870sta
filename:       /lib/modules/2.6.32-27-generic/kernel/drivers/staging/rt2870/rt2870sta.ko
alias:          rt3070sta
version:        2.0.1.0
license:        GPL
description:    RTxx70 Wireless LAN Linux Driver
(...略...)

ダウンロードしたファイルは2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO.tar.bz2というファイル名になりますが、実はファイルの拡張子が間違っています。正しくはtar.gzですので、リネームしてください。

ファイルのリネームと展開
$ mv 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO.tar.{bz2,gz}
$ tar zxvf 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO.tar.gz
$ cd 2011_0107_RT3070_RT3370_Linux_STA_v2.5.0.1_DPO

アーカイブを展開したら、ソースに修正を加えます。まず、GW-USMicroNのVenderIDとProductIDを追記します。これらのIDはlsusbコマンドで調べることができ、GW-USMicroNの場合は、VenderID : 2019 ProductID : ed14 になります。common/rtusb_dev_id.cの65行目付近にPLANEX製デバイスのIDが記述されていますので、このあたりにGW-USMicroNのIDを追記しておくとよいでしょう。

デバイスのIDの確認とソースへの追記
$ lsusb
(...略...)
Bus 001 Device 003: ID 2019:ed14 PLANEX             ← VenderID : 2019 ProductID : ed14 になる

$ vi common/rtusb_dev_id.c
USB_DEVICE(0x2019,0xED14)}, /* Planex Communications, Inc. RT2870 */          ← ソースの65行目付近にこの一行を追記する

次にドライバのライセンス情報を追記します。以下のようにドライバモジュールに自身のライセンスを埋めこんでおかないと、ドライバのロード時に「module license 'unspecified' taints kernel.」というtaints kernelメッセージが表示されます。

$ vi os/linux/usb_main_dev.c 
MODULE_AUTHOR("Paul Lin <paul_lin@ralinktech.com>");
MODULE_DESCRIPTION("RT2870 Wireless Lan Linux Driver");
MODULE_LICENSE("GPL");                      ← この行を追加
#ifdef CONFIG_STA_SUPPORT

さらにconfig.mkとRT2870STA.datを書き換えて、XLinkを使用できるようにします。またHAS_WPA_SUPPLICANTとHAS_NATIVE_WPA_SUPPLICANT_SUPPORTをyにすることで、NetworkManagerからの操作が可能になります[4]⁠。

ドライバのコンフィグと設定ファイルの編集
$ vi os/linux/config.mk 
# Support XLINK mode 
HAS_XLINK=y
# Support Wpa_Supplicant
HAS_WPA_SUPPLICANT=y
# Support Native WpaSupplicant for Network Maganger
HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y

$ vi RT2870STA.dat
PSP_XLINK_MODE=1

最後にMakefileを編集します。デフォルトのMakefileではルートディレクトリにtftpbootという名前でカーネルモジュールを作成しようとするため、make時にroot権限が必要になってしまいます。さらに言えば/tftpbootのようなファイルは必要ないため、387行目の該当部分をコメントアウトしておきます。

$ vi Makefile
#cp -f $(RT28xx_DIR)/os/linux/rt$(CHIPSET)sta.ko /tftpboot      ← この行をコメントアウト

上記すべてが完了したら、makeとinstallを行います。またカーネル標準のドライバが読み込まれないよう、あらかじめ退避しておきましょう。これで、GW-USMicroNの接続時に新しいrt3070staドライバのバージョン2.5.0.1がロードされるようになります。

stagingドライバの退避と新しいドライバのインストール
$ sudo mv /lib/modules/2.6.32-27-generic/kernel/drivers/staging/rt2870/rt2870sta.ko{,.bak}
$ make
$ sudo make install
ロードされたドライバの確認
$ modinfo rt3070sta
filename:       /lib/modules/2.6.32-27-generic/kernel/drivers/net/wireless/rt3070sta.ko
version:        2.5.0.1
license:        GPL
description:    RT2870 Wireless Lan Linux Driver
author:         Paul Lin <paul_lin@ralinktech.com>
(...略...)

XLinkのインストール

アカウントの作成とインストール

まずXLinkにログインするため、Xtagと呼ばれるアカウントを作成します。XLink公式ページ上部の「SIGN UP」をクリックし、ユーザ情報を入力してください。Submitすると、登録したメールアドレス宛てにConfirmメールが送られてきますので、指示に従ってアカウントのアクティベーションを行なってください。

Xtagの登録をWeb上から行なう
Xtagの登録をWeb上から行なう

アカウントが作成できたら、XLinkのプログラムをダウンロードしてインストールしましょう。今度はXLink公式ページ上部の「Downloads」をクリックして、⁠XLink Kai: Evolution 7.4」をダウンロードします。ダウンロードした「kaiEngine-7.4.18-linux-x86.tgz」を展開すると、kaiengineというバイナリが得られます。このkaiengineを実行することでXLinkが起動します。

なおkaiengineの動作には、ライブラリ libwx_gtk2u_richtext-2.8.so.0 が必要です。もし起動時にライブラリが見つからないというエラーが出た場合は、libwxgtk2.8-0パッケージをインストールしてください。

ライブラリが見つからない場合は、libwxgtk2.8-0をインストールする
$ sudo ./kaiengine
./kaiengine: error while loading shared libraries: libwx_gtk2u_richtext-2.8.so.0: cannot open shared object file: No such file or directory

$ sudo apt-get install libwxgtk2.8-0
Linux版のバイナリをダウンロードする
Linux版のバイナリをダウンロードする

インターフェイスの文字化け対策

展開したkaiengineをそのまま実行しただけでは、日本語チャットが文字化けしてしまいます。これはXLink上の日本語チャットにShiftJISが使われているためで、文字化けを回避するためにはkaiengineをShiftJISロケールで起動する必要があります。しかしUbuntuにはデフォルトでShiftJISロケールが存在しませんので、まずロケールを定義します。

ロケールが定義できたら、環境変数LANGを指定してkaiengineを起動しましょう。kaiengineはネットワークアダプタを使用するため、sudoで実行する必要があります。kaiengineが起動すると、自動的にWebブラウザが起動してlocalhostのポート34522番に接続します。以後XLinkの操作はこのブラウザ上から行いますが、ブラウザもroot権限で実行されていることに注意してください。

日本語チャットやアリーナの説明文が文字化けしてしまっている状態
日本語チャットやアリーナの説明文が文字化けしてしまっている状態
ShiftJISロケールの定義とkaiengineの起動
$ sudo localedef -f SHIFT_JIS -i ja_JP ja_JP.SJIS
$ locale -a | grep ja
ja_JP.sjis              ← sjisのロケールが追加されている
ja_JP.utf8
$ sudo LANG=ja_JP.sjis ./kaiengine

XLinkの設定

ブラウザが起動すると、XLinkのログイン画面が表示されているはずです。まずは「XLink Kai設定」をクリックして初期設定を行いましょう。設定画面で必ず設定しなければならないことは、PSPとの接続に使用するネットワークアダプタです。rt3070staドライバを使用している場合はra0を選択してください。

ポート番号はXLinkが使用するポートで、外部からUDPで接続が出来るようにしておく必要があります。デフォルトではUDPのポート30000が指定されていますので、もしもufwやiptablesでポートを閉じている場合は該当ポートの開放を行ってください。またブロードバンドルータなどの下にUbuntuマシンがある場合は、機器のマニュアルを参照してポートの転送設定を行う必要があります。

XLinkのログイン画面
XLinkのログイン画面
XLinkの設定画面
XLinkの設定画面

XLinkへの接続

それではいよいよPSPとUbuntuをアドホック接続し、XLinkへ接続しましょう。操作の手順としては以下のようになるため、前項でkaiengineが実行されたままになっている場合はいったん終了してください。

  1. PSPでゲームを起動し、アドホックプレイが可能な状態にする 注5
  2. UbuntuからPSPにアドホック接続する
  3. kaiengineを起動する

RutilT WLAN Manager

GnomeのNetworkManageではPSPとのアドホック接続がうまくいかず、接続直後に切断されてしまいます。そこでRT2x00系カードのユーティリティである、RutilT WLAN Managerを使用してアドホック接続を行います。Networkmanagerは使用しませんので、パネル上のNetworkManagerのアイコンを右クリックして、⁠無線を有効にする」のチェックを外しておいてください。

RutilT WLAN Managerのインストール
$ sudo apt-get install rutilt

「アプリケーション⁠⁠->「インターネット⁠⁠->「RutilT WLAN Manager」を起動します。無線LANアダプタが複数ある場合は対象とするインターフェイスを訊いてきますので、ra0を選択してください。⁠Site survey」タブの「Scan」をクリックすると、周囲にあるアクセスポイントを検索します[6]⁠。MHP3の場合は「PSP_AULJM05800_L_MHP3Q000」のようなSSIDとして機器が見えますので、これを選択して「接続」してください[7]⁠。すると接続用プロファイルを新規作成するダイアログが開かれますので、⁠IP settings⁠⁠->「Disabled」を設定しておきます。アドホック接続ではIPアドレスが付与されませんので、デフォルトのDHCP設定だとうまく接続ができないためです。

使用する無線LANアダプタを選択する
使用する無線LANアダプタを選択する
検出されたアクセスポイントと機器
検出されたアクセスポイントと機器
プロファイルの設定では、IPアドレスを「Disabled」にしておく
プロファイルの設定では、IPアドレスを「Disabled」にしておく
Link StatusにModeやSignal levelが表示されれば、接続は成功
Link StatusにModeやSignal levelが表示されれば、接続は成功

アドホック接続が完了したら、kaiengineを起動してください。⁠診断」をクリックして「Found Consoles」にPSPのMACアドレスが表示されていたら、正しくPSPが接続されています。あとは遊びたいゲームのアリーナに参加して、心ゆくまで狩猟生活を堪能しましょう! なおXLink上の操作は、Windows版のガイドも参考になります。

PSPが正しく接続されているかどうかは、⁠診断」をクリックして確認できる
PSPが正しく接続されているかどうかは、「診断」をクリックして確認できる

おすすめ記事

記事・ニュース一覧