ALSA環境の構築して Linux上で音楽を鳴らす
Linuxの音声再生環境を整える
ALSA (Advanced Linux Sound Architechture) は Linux用のサウンドAPI群です
1999年頃 前身である OSS(Open Sound System)が普及するまでは
サウンドボード毎にドライバも異なり再生環境を構築するのは特殊な作業でした
アプリケーションが OSSに対応し始めると一気に Linuxのサウンド環境が改善し
今まで「無音状態」だった Linuxシステムにマルチメディアという魅力が付与されたのです
Linux-2.6では ALSAがカーネルに取り込まれ標準機能となると
Windowsと同じように「何も意識しなくても再生環境は整っている」状況までなりました
ALSAが一気に普及できたのは OSSよりも高機能な上
OSS互換APIを持っていたため アプリケーションの移行がスムーズに進んだためです
ここでは 下記の検証環境で ALSAの環境構築までをレポートします
CPU | AMD Turion-MT37 2GHz |
---|---|
メモリ | DDR-400 1.5GB |
サウンド | SoundBlaster Live! Value |
OS | Linux-2.6.39 |
GCC | gcc-4.6.2 |
alsa-lib | alsa-lib-1.0.25 |
alsa-utils | alsa-utils-1.0.25 |
awesfx | awesfx-0.5.1d |
ALSAパッケージ構成とインストール
ALSA関連のパッケージは複数に別れています
ALSA公式ページ で配布されている各パッケージの役割を整理すると
alsa-firmware | 特定のサウンドボード向けファームウェア | |
alsa-driver | ドライバ本体 Linux-2.6以降は不要 | |
alsa-oss | liboss ALSA自体が既にOSSエミュレーションするので通常不要 | |
alsa-plugins | 追加プラグイン 通常不要 | |
alsa-lib | 基本ライブラリ libasound 必要 | |
alsa-utils | alsamixer や aplay などの基本アプリ | |
Linux-2.6以上であれば alsa-lib と alsa-utils のみで十分です
alsa-lib は下記のオプションでインストールしました
$ ./configure --prefix=/usr/local checking build system type... i686-pc-linux-gnu checking host system type... i686-pc-linux-gnu checking for a BSD-compatible install... /bin/install -c 〜 config.status: creating include/config.h config.status: executing depfiles commands Creating asoundlib.h... $ make 〜 $ su 〜 # make install 〜 #
aserverコマンドや libasoundライブラリがインストールされます
alsa-utils は下記オプションでインストールしました
$ ./configure --prefix=/usr/local --disable-xmlto --with-udev-rules-dir=/etc/udev/rules.d --with-asound-state-dir=/var/state checking for a BSD-compatible install... /bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /bin/mkdir -p 〜 config.status: creating po/POTFILES config.status: creating po/Makefile config.status: executing depfiles commands $ make 〜 $ su 〜 # make install 〜 #
こちらは基本ツールがメインで bin/ 以下に下記のツールがインストールされます
aconnect alsamixer amidi aplay arecord aseqdump iecset alsaloop alsaucm amixer aplaymidi arecordmidi aseqnet speaker-test
音楽再生 MIDI再生 録音 設定ツール が一通り揃っています
speaker-test で音声が鳴るのを確認したら ALSA関連のインストールは完了です
後は mpg123など libasound対応のアプリを好きなだけインストールしましょう
$ speaker-test speaker-test 1.0.25 Playback device is default Stream parameters are 48000Hz, S16_LE, 1 channels Using 16 octaves of pink noise Rate set to 48000Hz (requested 48000Hz) Buffer size range from 128 to 32768 Period size range from 32 to 32768 Using max buffer size 32768 Periods = 4 was set period_size = 8192 was set buffer_size = 32768 0 - Front Left ^C $
もし SoundBlasterシリーズの音源カードを利用されているなら
MIDI再生の環境も整えてしまいましょう
ほとんどの SoundBlasterシリーズのカードは「サウンドフォント」をサポートしていて
ハードウェアでMIDIを鳴らすことができます
最近はゲーム等でも MIDIを鳴らす機会が減ってしまいましたが
SoundBlasterシリーズの魅力の一つとして このサウンドフォントサポートが挙げられます
ここでは サウンドフォントをシステムに読み込むための asfxloadをインストールして
実際にサンプルMIDIを演奏するところまでを紹介します
asfxloadは awesfxパッケージに含まれています
ソースコードを展開して configure 〜 make 〜 make install します
$ ./configure --prefix=/usr/local --with-sfpath=/usr/local/share/sounds/sf2 checking for a BSD-compatible install... /bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /bin/mkdir -p 〜 config.status: creating etc/Makefile config.status: creating include/config.h config.status: executing depfiles commands $ make Making all in awelib 〜 gcc -g -O2 -o sfxtest sfxtest.o seq.o awelib/libawe.a /usr/local/lib/libasound.so -lrt -lm -ldl -lpthread -Wl,--rpath -Wl,/usr/local/lib -Wl,--rpath -Wl,/usr/local/lib make[1]: Leaving directory `/home/deer/admin/Alsa/awesfx-0.5.1d' $ su # make install 〜 #
configureではサウンドフォント配置先を /usr/local/share/sounds/sf2/ としました
インストールされるコマンドは 下記のとおりです
asfxload aweset gusload setfx sf2text sfxload sfxtest text2sf
サウンドフォントは SoundBlasterのドライバCDなどに含まれている
8mbgmsfx.sf2 を使いました ファイル名の通りGM準拠で8MBの容量があります
サウンドフォントディレクトリに 8mbgmsfx.sf2 をコピーして asfxloadでシステムにロードします
# ls /usr/local/share/sounds/sf2/ 8mbgmsfx.sf2 default-2m.bnk test.bnk xgmap.bnk README-bank emu8m.bnk xgdefault.bnk xgsfx.bnk ch12msup.bnk setfx-sample.cfg xgdrum.bnk # cat /proc/asound/Live/wavetableD1 Device: Emu10k1 Ports: 4 Addresses: 17:0 17:1 17:2 17:3 Use Counter: 0 Max Voices: 64 Allocated Voices: 0 Memory Size: 134217728 Memory Available: 134213632 Allocated Blocks: 1 SoundFonts: 0 Instruments: 0 Samples: 0 Locked Instruments: 0 Locked Samples: 0 # asfxload /usr/local/share/sounds/sf2/8mbgmsfx.sf2 # cat /proc/asound/Live/wavetableD1 Device: Emu10k1 Ports: 4 Addresses: 17:0 17:1 17:2 17:3 Use Counter: 0 Max Voices: 64 Allocated Voices: 0 Memory Size: 134217728 Memory Available: 126786844 Allocated Blocks: 527 SoundFonts: 1 Instruments: 1849 Samples: 526 Locked Instruments: 1849 Locked Samples: 526 #
SoundFontsの項がカウントアップされているのがわかります
(サウンドフォントはメモリの許す限り複数ロードできますが 検証環境では試してません)
また MIDI用のポートが 17:0 17:1 17:2 17:3 と 4つあることもわかります
ではサンプルとしてどこからか拾ってきた ワルキューレの伝説 を鳴らしましょう
$ aplaymidi -p 17:0 LEGENDofVALKYRIE.mid $
サウンドが鳴れば 無事にMIDI環境が動作しています
asfload のロードはシステム起動時に実行する必要があるため 起動スクリプト等に組込んで完成です
8bit 16bit 時代では高価な MIDI専用機を購入しなければ手に入らなかった
MIDI再生環境が 今やLinux上で再現できてしまいます 感慨深いものです
一方 ハードウェア音源の例では 上記 Roland SD-20 のようなものが挙げられます
最近の MIDI再生機器も小型化され USB接続可能となるなどの進化を遂げており
(通常 MIDI機器は専用のMIDIインターフェースで音源ボードと接続する)
実際筆者はこの SD-20を所持していて クリアな発声などそれなりの魅力もありますが
やはり ハードウェア音源はお金持ち向けという印象がぬぐえません
ちなみに Windows+DirectXは ソフトウェア音源上で MIDIを演奏する動作になってます
従って安物のオンボードサウンドチップでも 何も考えずにMIDIが鳴ります
(MIDI再生に必要なリソースは CPUが負担しているため
SoundBlasterご利用なら MIDI出力をサウンドフォント用ポートに切り替えたほうがよいでしょう)
トラブル事例
筆者の検証環境のみの特殊事例かもしれませんが 当初下記エラーが出て困っていました
$ aplay -L
Segmentation fault
$
$ aplay -L Segmentation fault $
で全く音声が鳴らないという事象です
原因を調査した結果 「-lライブラリ にて実行時リンクするライブラリに対して 動的リンクも行い長いシンボル名を dlopen() dlsym() dlclose() 繰り返すと不正終了する」
といった 日本語で表現するのも難しいほど 理解不能な現象でした
下記検証プログラム t_main.c で Segmentation fault が再現されました
#include#include int main () { int i; void *handle = NULL; void *target = NULL; for ( i = 0; i != 10; i++ ) { handle = dlopen ( "libz.so", RTLD_NOW ); if ( handle ) target = dlsym ( handle, "long___________long" ); else printf ( "failed dlopen()\n" ); dlclose ( handle ); printf ( "count=%d\n", i ); } return ( 0 ); }
/usr/local/lib/libz.so を実行時リンクする下記のバイナリを作って実行すると
$ gcc -lz -ldl -o t_main t_main.c $ ./t_main count=0 count=1 Segmentation fault $
カーネルの問題なのか glibcの問題なのか判りません 検証環境のみの現象かもしれません
alisa-lib が丁度この条件に引っかかったようでしたので
src/dlmisc.c の snd_dlopen() 関数部分を修正して対策しました
51 void *snd_dlopen(const char *name, int mode) 52 { 53 return dlopen(name, mode); 54 #ifndef PIC 55 if (name == NULL) 56 return &snd_dlsym_start; 57 #else 58 #ifdef HAVE_LIBDL 59 if (name == NULL) { 60 static const char * self = NULL; 61 if (self == NULL) { 62 Dl_info dlinfo; 63 if (dladdr(snd_dlopen, &dlinfo) > 0) 64 self = dlinfo.dli_fname; 65 } 66 name = self; 67 } 68 #endif 69 #endif 70 #ifdef HAVE_LIBDL 71 return dlopen(name, mode); 72 #else 73 return NULL; 74 #endif 75 }
53行目にあるように いきなり return dlopen(name, mode); で返るように修正しました
name= にあたる部分の /usr/local/lib/libasound.so.2 が長い名前だったことが
今回の不具合に該当してしまったようです
$ aplay -L null Discard all samples (playback) or generate zero samples (capture) default:CARD=Live SB Live! Value [CT4670], ADC Capture/Standard PCM Playback Default Audio Device sysdefault:CARD=Live SB Live! Value [CT4670], ADC Capture/Standard PCM Playback Default Audio Device front:CARD=Live,DEV=0 SB Live! Value [CT4670], ADC Capture/Standard PCM Playback Front speakers rear:CARD=Live,DEV=0 SB Live! Value [CT4670], ADC Capture/Standard PCM Playback Rear speakers center_lfe:CARD=Live,DEV=0 SB Live! Value [CT4670], ADC Capture/Standard PCM Playback Center and Subwoofer speakers surround40:CARD=Live,DEV=0 SB Live! Value [CT4670], ADC Capture/Standard PCM Playback 4.0 Surround output to Front and Rear speakers surround41:CARD=Live,DEV=0 SB Live! Value [CT4670], ADC Capture/Standard PCM Playback 4.1 Surround output to Front, Rear and Subwoofer speakers surround50:CARD=Live,DEV=0 SB Live! Value [CT4670], ADC Capture/Standard PCM Playback 5.0 Surround output to Front, Center and Rear speakers surround51:CARD=Live,DEV=0 SB Live! Value [CT4670], ADC Capture/Standard PCM Playback 5.1 Surround output to Front, Center, Rear and Subwoofer speakers iec958:CARD=Live,DEV=0 SB Live! Value [CT4670], Multichannel Capture/PT Playback IEC958 (S/PDIF) Digital Audio Output $
aplay -L も正しく結果を返すようになり 音楽も鳴りました
フレッツ光ネクスト + OCN 導入
NTTの フレッツ光ネクスト でトリプルプレイを導入した
2010-11-27 に申し込んで 2010-12-14 に開通したので
大体 3週間くらいかかったことになり このあたりは auひかりと同じでした
もともと auひかりのエリア範囲だったので ギガ得プランの継続と工事を申し込んでいたのですが
2週間ほどまたされた挙句 「光ファイバが通らない区間があるので開通できない」と断られたのです
同じ関東圏のサービスエリアであっても条件によって光ファイバが開通できないこともあり
NTTフレッツの方が若干サービスエリアが広いようです
フレッツ光での宅内構成は下記の通りです

ほぼ auひかりと同じですが 光集線ボックスとホームゲートウェイの間にあった ONUがなくなって
ホームゲートウェイにONU機能が含まれています 従ってホームゲートウェイまでが光ファイバです
ひかりTV用の STBです

手のひらよりひとまわり大きめのサイズです

左から電源入力 UTP入力 D端子出力 RCA出力 HDMI出力 光デジタル音声出力
HD画質が楽しむために HDMIを使える環境が欲しいところです

リモコンはこんな感じになっています
次にメインとなる ホームゲートウェイですが PR-S300SE というフレッツ光ネクスト専用ルータです

STBと同じくらいの大きさです
IPv6対応 ONU内蔵 ファイアウォール機能,NAT機能,DHCP機能 を備える高機能ルータで
Webによる設定も可能です
さらに面白い機能としては VoIP内線子機を持てる点ですがこれは後述します

上から UTPポート(SW-HUB) 電話コード(契約により 2回線持てる?) 電源と 光ファイバです

使用済のポートの中をのぞいてみると UTPケーブルが配線されています
実はこのルータ 中身は ルータ装置とONU装置をくっつけた構成のようです

製造シールも 2枚貼られているし ニコイチですかねやっぱり

工事は エアコンのダクトを流用して外の光ファイバを引き込む方式をとってもらいました
他の引き込み方法としては 電話回線の引き込み口を流用する方法も多いそうです

光終端部分の拡大図
外向けの光ファイバと内向けの光ファイバを接続している部分で 内外の責任分界点です

内向け光ファイバの配線状況です
線のフレキシブル具合に注目です 最近の宅内ファイバはこんなに曲げても使えるのですね

ルータ周りの配線後の状況です
左下にある小さいのは 100Mbps SW-HUBです ゲーム機等に分配しています
ルータの Gbpsポートは合計4ポートあります
1ポートをSTBとの接続に 1ポートをSW-HUBと接続したため 残り2ポートはパソコンに接続しました
ルータの設定
ルータへの各種設定は Web画面を通じて行います
パソコンを繋いだら ルータから IPアドレスが割り当てられているはずです
ブラウザを開いて http://192.168.1.1/ を開いてみます
アカウントパスワードが求められますが認証をパスすると下記画面となります

Webを使った GUIな操作で各種設定ができます
接続先設定の部分は PPPoEによる NTTとの接続設定となります
開通業者が初期設定してくれるので特にいじる必要はありません

電話設定の項目です
画面では IP phone とありますが 実は 手持ちのVoIP端末を内線子機として利用できるのです
使いかたによっては 位置固定の原則を打ち破れるような使いかたも可能
ここ が参考になります

無線カードがあれば 設定できます

DHCPに関する設定です
特定のMACアドレスに 特定のIPアドレスを割り当てる設定ができないのが使いづらい部分です

パケットフィルタに関する設定です
外部からの侵入を防ぐための基本的な設定がデフォルトで入っています

IPアドレス ポート番号 変換によるポート開放もできます

IPアドレス変換による サービス公開用の設定ができます

その他設定項目です

メンテナンスでは 機器の再起動や pingによる疎通チェックができます
UNIX系のOSが組み込まれているのでしょうか

情報欄では 機器の動作ログが確認できます
auひかりのルータと比較すると 使い勝手はほぼ一緒ですが
USBポートがない分 VoIP機能が使えたりと 独自機能で個性が出ていて面白いと思います
ひかりTV
次は STBメインの話になります
リモコンでコントロールします

初回起動の画面です 初期設定が必要となります

お客様ID を登録します

ネットワーク上で認証後 初回設定は終了です
地デジのチャンネル設定はすぐ後で行います

メインメニューです
HD画質対応のため フォントは見やすいです
配信終了間近 と書いてあるのは オンデマンド配信ビデオのことです
auひかりでもそうでしたが コンテンツをどんどん配信終了にされるとライブラリが充実しないのでは
ないかと思います ( コンテンツを持ちつづけることにライセンス料が発生するのでしょうか? )

プレミアム ではオプション有料チャンネル オンデマンドビデオ カラオケ などが選択できます

番組表は HDの高解像度を利用した見やすい表示となっています

地デジのチャンネル設定を行わないと 上記メッセージが出ます
早速チャンネル設定を済ませます

設定メニューから

チャンネルスキャンすれば 地デジの番組一覧が自動認識されます
STBへは IP配信のはずなのにチャンネルスキャンの作業は必要なのでしょうか??

システム情報表示です ほとんど伏字ですが
IPv6対応しているのは 大手キャリアならではといったところでしょうか

USB-HDDがあれば 録画も可能です
ひかりTVでは 1300円/月 で 500GBHDD内蔵STBのレンタルも可能ですが
自前でHDDを用意すれば 特にレンタルするまでもないかなと思います
(10ヵ月も待たずに元が取れる計算です)

なんと 外出先から iPhone Android端末を使って番組予約も可能
詳しくは ここを参照ください

リモート予約できる 端末を追加するためにはパスワードによる登録作業が必要です

お知らせから各種情報が入手できます

NHKオンデマンドも利用可能
昔見たアニメでもう1回見たいのがあったのですが ライブラリになかった
いまいち使い勝手がよろしくありません

オンデマンド購入したビデオは 一定期間ここから選択して見れる(はず)

オンラインショッピングもできます
品揃えとしては ひかりTV向け機器や ギフトセットなどのみでした
インターネット普通にできるのだから Amazon使ったほうがはるかに便利
将来的に期待したいのは 番組で放映された各種アイテムや関連商品が
リアルタイムで商品一覧に表示されて ボタン1つで買い物カゴに入るところ
ここまで出来たら神です Amazon越えられます
Google TV がそんなの目指してるのかも

カラオケも可能です 18000曲以上毎月更新されています
1日歌いたい放題で 500円プランあるので 自宅カラオケ大会やる分には安いでしょう
でもアパートでは無理 使ってません

オンデマンドビデオ試聴も リモコンで選択できます
図のとおり 100円ビデオとかキャンペーンもやってます
配信終了の概念がなければ もっといいのですが
その他
その他付加サービスとしては 「フレッツウィルスクリアv6」というのがあります
ウィルスバスター相当の ウィルス対策ソフトが 3ライセンス 400円/月 で提供されます

ネットを経由して インストーラをダウンロードする形式です
月額420円(税込)だったら 年間5000円の計算なので市販のウィルスソフトとほぼ同じの価格です
しかも 3ライセンス分使えることを考えると 値段的には市販ウィルスソフトと比較すると安いです
当初は すぐに解約してやろうかと思ってましたが ずるずる利用中…
ただ本当に「ウィルスバスター」相当なら ウィルスバスターは他の市販ウィルスソフトと比較して
ウィルスの検出能力に弱いとのことなので ここは注意が必要です
最後に
ネット 電話 TV と光ファイバでまかなえるようになって かなり便利になったと思います
今は解約したけど 2008年に導入した auひかりの記事はこちら
Xine メディアプレーヤー
Xine インストールログ
Linuxでも 動画や DVDを見る環境がだいぶ充実しました
Xine(クシーン? ザイン?)を紹介します
これがあれば 動画再生は満ち足りるというほど充実してます
CPU | AMD Turion-MT37 2GHz |
---|---|
メモリ | 1GB |
グラフィック | nVidia GeForce6600 |
DVD | BenQ DVD DC DW1670 |
OS | Linux 2.6.30.5 |
ウィンドウシステム | Xorg-1.5.1 + fluxbox-1.1.1 |
OpenGL | Mesa-7.5 + NVIDIA-Linux-x86-185.18.14 |
GCC | gcc-4.1.2 |
Cライブラリ | glibc-2.5 |
Firefox | 3.5 |
Xineの特徴としては
- DVD VCD AVIファイル Mpegファイル DivX Win32codec など幅広いフォーマットに対応
- 入出力(ファイルやビデオ)をプラグイン化することで拡張性が高い
- xine-lib(各種 コーデック プラグイン) と UIが分離している
- さまざまな UIがある
従って 流れとしては
- コーデック 必要なライブラリ を別途入手して インストール
- xine-libをインストール
- UIをインストール
いろいろなインターフェースがあります 上の図は Ubuntuに採用されている totemです
コーデックのインストール
実は Xineは Windowsのコーデックを無理矢理 Linuxで使うというようなことをやってます
コーデックのパックが配布されているところがあるので 各種 .dll を拝借します
リンク元が分からないため 私が拾ってきたコーデックパックを ここに載せます
essential-20071007.tar.bz2 (MPlayer のサイトで配布されていたものだと思います)
$ su # cd /usr/local/lib # mkdir win32 # cd win32 # tar -xjf ~admin/essential-20071007.tar.bz2 --strip-path=1 # ls AvidQTAVUICodec.qtx cook.so.6.0 l3codeca.acm qtmlClient.dll vmnc.dll BeHereiVideo.qtx ctadp32.acm l3codecx.ax rt32dcmp.dll voxmsdec.ax CLRVIDDC.DLL ddnt.so.6.0 lhacm.acm scg726.acm vp31vfw.dll CtWbJpg.DLL divx.dll lsvxdec.dll sipr.so.6.0 vp4vfw.dll DECVW_32.DLL divx_c32.ax m3jp2k32.dll sp5x_32.dll vp5vfw.dll LCMW2.dll divxa32.acm m3jpeg32.dll tm20dec.ax vp6vfw.dll LCODCCMW2E.dll divxc32.dll m3jpegdec.ax tokf.so.6.0 vp7vfw.dll LCodcCMP.dll divxdec.ax mcdvd_32.dll tokr.so.6.0 vssh264.dll QuickTime.qts dnet.so.6.0 mcmjpg32.dll tsccvid.dll vssh264core.dll QuickTimeEssentials.qtx drv2.so.6.0 mi-sc4.acm tsd32.dll vssh264dec.dll QuickTimeInternetExtras.qtx drv3.so.6.0 mpg4c32.dll tssoft32.acm vsshdsd.dll VDODEC32.dll drv4.so.6.0 mpg4ds32.ax tvqdec.dll vsslight.dll ViVD2.dll drvc.so msadp32.acm ubv263d+.ax vsswlt.dll acelpdec.ax dspr.so.6.0 msg711.acm ubvmp4d.dll wma9dmod.dll alf2cd.acm huffyuv.dll msgsm32.acm ultimo.dll wmadmod.dll aslcodec_dshow.dll i263_32.drv msh261.drv vdowave.drv wmsdmod.dll aslcodec_vfw.dll iac25_32.ax msms001.vwp vgpix32d.dll wmspdmod.dll asusasv2.dll iccvid.dll msnaudio.acm vid_3ivX.xa wmv8ds32.ax asusasvd.dll icmw_32.dll msrle32.dll vid_cvid.xa wmv9dmod.dll ativcr2.dll imaadp32.acm msscds32.ax vid_cyuv.xa wmvadvd.dll atrac3.acm imc32.acm msvidc32.dll vid_h261.xa wmvdmod.dll atrc.so.6.0 ir32_32.dll mvoiced.vwp vid_h263.xa wmvds32.ax avimszh.dll ir41_32.dll nsrt2432.acm vid_iv32.xa wnvplay1.dll avizlib.dll ir50_32.dll pclepim1.dll vid_iv41.xa wnvwinx.dll clrviddd.dll ivvideo.dll qdv.dll vid_iv50.xa wvc1dmod.dll cook.so jp2avi.dll qpeg32.dll vivog723.acm xanlib.dll #
ライブラリのインストール
DVDを見るには libdvdcss が必要です
解凍後
./configure –prefix=/usr/local
make
su
make install
でインストールされます
これは DVDの画像に施されている 暗号化を解除するためのライブラリです
他にも libogg や libvorbis などの必要なライブラリを入れます
(詳細は 忘れてしまいましたが 後述の Xineのビルド時にチェックできます)
xine-libのインストール
いよいよ Xineの核となる xine-lib です
$ tar -xjf xine-lib-1.1.16.2.tar.bz2 $ cd xine-lib-1.1.16.2 $ $ ./configure --enable-directfb --enable-static --with-w32-path=/usr/loc al/lib/win32 --prefix=/usr/local checking for a BSD-compatible install... /bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /bin/mkdir -p checking for gawk... gawk checking whether make sets $(MAKE)... yes checking build system type... i686-pc-linux-gnu … … xine-lib summary: ---------------- * input plugins: - file - net - stdin_fifo - rtp - http - mms - pnm - rtsp - dvb - dvd (internal libs) - vcd (internal libs) - vcdo - cdda - gnome-vfs - v4l * demultiplexer plugins: - avi - mpeg - mpeg_block - mpeg_audio - mpeg_elem - mpeg_pes - mpeg_ts - qt/mpeg-4 - film - roq - fli - smjpeg - idcin - wav - wc3 mve - voc - vqa - aiff - cdda - snd/au - yuv4mpeg2 - real/realaudio - ea wve - raw dv - interplay mve - psx str - ws aud - pva - vox - nsv - 4xm - FLAC - aac - iff - matroska - vmd - flv - nsf - ogg - ac3 (internal library) * video decoder plugins: - MPEG 1,2 - Amiga Bitplane - Raw RGB - Raw YUV - ffmpeg (internal library): - MPEG-4 (ISO, Microsoft, DivX*, XviD) - Creative YUV - Motion JPEG - Cinepak - MS Video-1 - FLI/FLC - MS RLE - Id RoQ - Id Cin - Apple Graphics - Apple Video - Apple Animation - Interplay Video - Westwood VQA - Origin Xan - H.263 - Intel Indeo 3 - SVQ1 - SVQ3 - Real Video 1.0 - Real Video 2.0 - 4X Video - Sierra Video - Asus v1/v2 - HuffYUV - On2 VP3 - DV - 8BPS - Duck TrueMotion v1 - ATI VCR1 - Flash Video - ZLIB - MSZH - dxr3_video - w32dll - gdk-pixbuf * audio decoder plugins: - GSM 06.10 - linear PCM - ffmpeg (internal library): - Windows Media Audio v1/v2 - DV - logarithmic PCM - 14k4 - 28k8 - MS ADPCM - IMA ADPCM - XA ADPCM - Game DPCM/ADPCM - Mace 3:13 - Mace 6:1 - FLAC - Nosefart (NSF) - vorbis - w32dll - MAD (MPG 1/2/3) (internal library) - DTS (internal library) - A52/ra-dnet (internal library) - MusePack (internal library) * subtitle decoder plugins: - spu - spucc - spucmml - sputext - spudvb - dxr3_spu * post effect plugins: * planar video effects: - invert - expand - eq - eq2 - boxblur - denoise3d - unsharp - tvtime * SFX: - goom - oscope - fftscope - mosaico * video driver plugins: - XShm (X11 shared memory) - SyncFB (for Matrox G200/G400 cards) - Xv (XVideo *shared*) - OpenGL - xcb-shm (X shared memory using XCB) - xcb-xv (XVideo using XCB) - aa (Ascii ART) - fb (Linux framebuffer device) - sdl (Simple DirectMedia Layer) - dxr3 (Hollywood+ and Creative dxr3, mpeg video only) - vidix (X11 and framebuffer support) * audio driver plugins: - oss (Open Sound System) - alsa ---
最後にでる xine-lib summary というのが重要です
xine-libの ビルドで使えるようになると思われる プラグインが表示されます
上記のは 実際の今回検証環境のもので DVD avi mpg DivX あらかたのものが再生できます
上記を参考にいただいて 足りない環境があれば 個別にそろえてください
$ make … … libtool: compile: gcc -DHAVE_CONFIG_H -I. -I../../../../include -I../../../../src/input/vcd/libcdio -I../../../../include -I../../../../lib -I../../../../lib -D_REENTRANT -D_FILE_OFFSET_BITS=64 -DXINE_COMPILE -mtune=pentiumpro -O3 -pipe -fomit-frame-pointer -falign-functions=4 -falign-loops=4 -falign-jumps=4 -fexpensive-optimizations -fschedule-insns2 -ffast-math -finline-functions -Wpointer-arith -g -O2 -Wall -Wchar-subscripts -Wnested-externs -Wcast-align -Wmissing-declarations -Wmissing-prototypes -Wmissing-format-attribute -Wno-pointer-sign -Wformat=2 -Wno-format-zero-length -Wstrict-aliasing=2 -DNDEBUG -MT _cdio_linux.lo -MD -MP -MF .deps/_cdio_linux.Tpo -c _cdio_linux.c -fPIC -DPIC -o .libs/_cdio_linux.o In file included from _cdio_linux.c:66: /usr/src/linux/include/scsi/scsi.h:145: error: expected specifier-qualifier-list before 'u8' /usr/src/linux/include/scsi/scsi.h: In function 'scsi_varlen_cdb_length': /usr/src/linux/include/scsi/scsi.h:156: error: 'struct scsi_varlen_cdb_hdr' has no member named 'additional_cdb_length' _cdio_linux.c: In function '_read_mode2_sector_linux': _cdio_linux.c:724: 警告: dereferencing type-punned pointer might break strict-aliasing rules make[5]: *** [_cdio_linux.lo] エラー 1 make[5]: Leaving directory `/home/admin/xine-lib-1.1.16.2/src/input/vcd/libcdio' make[4]: *** [all-recursive] エラー 1 make[4]: Leaving directory `/home/admin/xine-lib-1.1.16.2/src/input/vcd/libcdio' make[3]: *** [all-recursive] エラー 1 make[3]: Leaving directory `/home/admin/xine-lib-1.1.16.2/src/input/vcd' make[2]: *** [all-recursive] エラー 1 make[2]: Leaving directory `/home/admin/xine-lib-1.1.16.2/src/input' make[1]: *** [all-recursive] エラー 1 make[1]: Leaving directory `/home/admin/xine-lib-1.1.16.2/src' make: *** [all-recursive] エラー 1 $
私の環境では 「u8 が未定義」 だと怒られました
linux-kernel によると typedef unsigned char u8; は asm-generic/int-ll64.h で定義されていますが
gccに -D__KERNEL__ が必要になるため u8自体 そもそもカーネルモジュール用の型と思われます
以下のように src/input/vcd/libcdio/_cdio_linux.c へ定義を追加して 回避しました (64行目に typedef 文追加)
55 56 #include57 #include 58 #include 59 #include 60 #include 61 #include 62 #include 63 64 typedef unsigned char u8; 65 #include 66 #include 67 #include 68 #include 69 #include 70
$ make … … Making all in win32 make[1]: Entering directory `/home/admin/xine-lib-1.1.16.2/win32' Making all in include make[2]: Entering directory `/home/admin/xine-lib-1.1.16.2/win32/include' make[2]: `all' に対して行うべき事はありません。 make[2]: Leaving directory `/home/admin/xine-lib-1.1.16.2/win32/include' make[2]: Entering directory `/home/admin/xine-lib-1.1.16.2/win32' make[2]: `all-am' に対して行うべき事はありません。 make[2]: Leaving directory `/home/admin/xine-lib-1.1.16.2/win32' make[1]: Leaving directory `/home/admin/xine-lib-1.1.16.2/win32' make[1]: Entering directory `/home/admin/xine-lib-1.1.16.2' make[1]: `all-am' に対して行うべき事はありません。 make[1]: Leaving directory `/home/admin/xine-lib-1.1.16.2' $ su # make install … … find . -name \*.so | \ xargs strings -a | \ /bin/grep -E '^([-a-z]+/[-+.a-z0-9]+:[^:]+:[^;]+;[ \t]*)+' | \ sed -e 's/:[^;]\+;/\n/g' | \ sort -u | \ sed -e '1 d' >/usr/local/lib/xine/plugins/1.25/mime.types make[3]: Leaving directory `/home/admin/xine-lib-1.1.16.2' test -z "/usr/local/share/doc/xine-lib" || /bin/mkdir -p "/usr/local/share/doc/xine-lib" /bin/install -c -m 644 'COPYING' '/usr/local/share/doc/xine-lib/COPYING' /bin/install -c -m 644 'NEWS' '/usr/local/share/doc/xine-lib/NEWS' /bin/install -c -m 644 'README' '/usr/local/share/doc/xine-lib/README' /bin/install -c -m 644 'TODO' '/usr/local/share/doc/xine-lib/TODO' /bin/install -c -m 644 'CREDITS' '/usr/local/share/doc/xine-lib/CREDITS' /bin/install -c -m 644 'ChangeLog' '/usr/local/share/doc/xine-lib/ChangeLog' make install-data-hook make[3]: Entering directory `/home/admin/xine-lib-1.1.16.2' make[3]: Leaving directory `/home/admin/xine-lib-1.1.16.2' make[2]: Leaving directory `/home/admin/xine-lib-1.1.16.2' make[1]: Leaving directory `/home/admin/xine-lib-1.1.16.2' #
足りない環境に必要なライブラリを探して インストールする方にむしろ時間がかかると思います
UIのインストール
次に UIですが いくつか選択肢があります
- xine-ui は標準で用意されてます これでも十分使えます
- gxine も xine-uiと同じ場所で配布されています
- totem も Ubuntuなどに採用されている人気のある UIです
上の絵は 私の環境の古い xine-ui-0.99.4 ですが
Xorgを入れ替えたタイミングで コントロールパネルがバグって使いものになりません
本来ならこんな感じのパネルが使えます
ファイルや DVDを開いたり 画像の拡大 アスペクト比変更 ほとんどできます
gxine では Mozilla(Firefox?)用プラグインがある
という話なので 今回こちらの使用感をレポートします
$ tar -xjf gxine-0.5.903.tar.bz2 $ cd gxine-0.5.903 $ ./configure checking for a BSD-compatible install... /bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /bin/mkdir -p checking for gawk... gawk … config.status: executing po-directories commands config.status: creating misc/po/POTFILES config.status: creating misc/po/Makefile config.status: creating po/POTFILES config.status: creating po/Makefile config.status: executing default commands $ make Makefile:764: 警告: ターゲット `dist' へのコマンドを置き換えます Makefile:546: 警告: ターゲット `dist' への古いコマンドは無視されます exec > gxine.desktop; cat gxine.desktop.in; /usr/local/bin/xine-list-1.1; echo make all-recursive make[1]: Entering directory `/home/admin/gxine-0.5.903' Makefile:764: 警告: ターゲット `dist' へのコマンドを置き換えます Makefile:546: 警告: ターゲット `dist' への古いコマンドは無視されます Making all in m4 mv -f .deps/console_output.Tpo .deps/console_output.Po gcc -DHAVE_CONFIG_H -I. -I../include -I../include -I../include -I/usr/local/include -I../pixmaps -std=gnu99 -I/usr/local/include -I/usr/X11R7/include -I/usr/local/include/gtk-2.0 -I/usr/local/lib/gtk-2.0/include -I/usr/local/include/atk-1.0 -I/usr/local/include/cairo -I/usr/local/include/pango-1.0 -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -I/usr/local/include -I/usr/local/include/freetype2 -I/usr/local/include/libpng12 -I/usr/X11R7/include -pthread -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -DDBUS_API_SUBJECT_TO_CHANGE -I/usr/local/include/hal -I/usr/local/include/dbus-1.0 -I/usr/local/lib/dbus-1.0/include -DXP_UNIX -DJS_THREADSAFE -I/usr/local/include/xulrunner-1.9.1.3/stable -DLOCALEDIR=\"/usr/local/share/locale\" -MT desktop_integration.o -MD -MP -MF .deps/desktop_integration.Tpo -c -o desktop_integration.o desktop_integration.c globals.h:39 から include されたファイル中, desktop_integration.c:27 から: script_engine.h:34:19: error: jsapi.h: そのようなファイルやディレクトリはありません In file included from globals.h:39, from desktop_integration.c:27: script_engine.h:40: 警告: type defaults to 'int' in declaration of 'JSErrorReport' script_engine.h:40: error: expected ';', ',' or ')' before '*' token script_engine.h:59: error: expected specifier-qualifier-list before 'JSContext' script_engine.h:75: error: expected specifier-qualifier-list before 'JSFunction' script_engine.h:119: error: expected specifier-qualifier-list before 'JSObject' script_engine.h:146: 警告: type defaults to 'int' in declaration of 'JSErrorReport' script_engine.h:146: error: expected ';', ',' or ')' before '*' token script_engine.h:151: error: expected declaration specifiers or '...' before 'se_error_cb_t' script_engine.h:155: error: expected declaration specifiers or '...' before 'JSInt32' script_engine.h:156: error: expected declaration specifiers or '...' before 'JSFloat64' script_engine.h:157: error: expected declaration specifiers or '...' before 'JSBool' script_engine.h:158: error: expected declaration specifiers or '...' before 'JSInt32' script_engine.h:159: error: expected declaration specifiers or '...' before 'JSFloat64' script_engine.h:179: error: expected specifier-qualifier-list before 'JSNative' script_engine.h:186: error: expected declaration specifiers or '...' before 'JSNative' script_engine.h:186: error: expected declaration specifiers or '...' before 'uintN' script_engine.h:186: error: expected declaration specifiers or '...' before 'uintN' script_engine.h:242: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'se_warn_initialisation' make[2]: *** [desktop_integration.o] エラー 1 make[2]: Leaving directory `/home/admin/gxine-0.5.903/src' make[1]: *** [all-recursive] エラー 1 make[1]: Leaving directory `/home/admin/gxine-0.5.903' make: *** [all] エラー 2 $
という エラーに遭遇しました jsapi.h が見つからないというものです
これは Firefox(というより XULRunner)の問題のようです
jsapi.hは 実際は /usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h にあるのに
XULRunnerのビルドでインストールされた /usr/local/lib/pkgconfig/mozilla-js.pc を見ると
prefix=/usr/local sdkdir=/usr/local/lib/xulrunner-devel-1.9.1.3 includedir=/usr/local/include/xulrunner-1.9.1.3 Name: JavaScript Description: The Mozilla JavaScript Library Version: 1.9.1.3 Requires: mozilla-nspr >= 4.8.0 Libs: -L${sdkdir}/lib -lmozjs Cflags: -I${includedir}/stable -DXP_UNIX -DJS_THREADSAFE
/usr/local/include/xulrunner-1.9.1.3/stable にしか インクルードパスが張られていません
ここでは gxineソースディレクトリ側を修正して
Makefile
src/Makefile
の JS_LIBS の設定にインクルードパスを直接追加しました
JS_CFLAGS = -DXP_UNIX -DJS_THREADSAFE -I/usr/local/include/xulrunner-1.9.1.3/stable -I /usr/local/include/xulrunner-1.9.1.3/unstable
-I /usr/local/include/xulrunner-1.9.1.3/unstable が追加部分です
(unstable というディレクトリ名が引っかかるところです)
$ make … … make[3]: Leaving directory `/home/deer/admin/Xine/gxine-0.5.903/include' make[2]: Leaving directory `/home/deer/admin/Xine/gxine-0.5.903/include' Making all in src make[2]: Entering directory `/home/deer/admin/Xine/gxine-0.5.903/src' gcc -DHAVE_CONFIG_H -I. -I../include -I../include -I../include -I/usr/local/include -I../pixmaps -std=gnu99 -I/usr/local/include -I/usr/X11R7/include -I/usr/local/include/gtk-2.0 -I/usr/local/lib/gtk-2.0/include -I/usr/local/include/atk-1.0 -I/usr/local/include/cairo -I/usr/local/include/pango-1.0 -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -I/usr/local/include -I/usr/local/include/freetype2 -I/usr/local/include/libpng12 -I/usr/X11R7/include -pthread -I/usr/local/include/glib-2.0 -I/usr/local/lib/glib-2.0/include -DDBUS_API_SUBJECT_TO_CHANGE -I/usr/local/include/hal -I/usr/local/include/dbus-1.0 -I/usr/local/lib/dbus-1.0/include -DXP_UNIX -DJS_THREADSAFE -I/usr/local/include/xulrunner-1.9.1.3/stable -I/usr/local/include/xulrunner-1.9.1.3/unstable -DLOCALEDIR=\"/usr/local/share/locale\" -MT desktop_integration.o -MD -MP -MF .deps/desktop_integration.Tpo -c -o desktop_integration.o desktop_integration.c In file included from script_engine.h:34, from globals.h:39, from desktop_integration.c:27: /usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:87: error: expected ')' before '__attribute__' /usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:87: error: expected identifier or '(' before ')' token /usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:94: error: expected ')' before '__attribute__' /usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:94: error: expected identifier or '(' before ')' token /usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:101: error: expected ')' before '__attribute__' /usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:101: error: expected identifier or '(' before ')' token /usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:108: error: expected ')' before '__attribute__' /usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:108: error: expected identifier or '(' before ')' token /usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:115: error: expected ')' before '__attribute__' /usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:115: error: expected identifier or '(' before ')' token /usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:122: error: expected ')' before '__attribute__' /usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:122: error: expected identifier or '(' before ')' token /usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:129: error: expected ')' before '__attribute__' /usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:129: error: expected identifier or '(' before ')' token /usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:179: error: expected ')' before '__attribute__' /usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:179: error: expected identifier or '(' before ')' token /usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:186: error: expected ')' before '__attribute__' /usr/local/include/xulrunner-1.9.1.3/unstable/jsapi.h:186: error: expected identifier or '(' before ')' token make[2]: *** [desktop_integration.o] エラー 1 make[2]: Leaving directory `/home/deer/admin/Xine/gxine-0.5.903/src' make[1]: *** [all-recursive] エラー 1 make[1]: Leaving directory `/home/deer/admin/Xine/gxine-0.5.903' make: *** [all] エラー 2 $
なんと jsapi.h 自体がエラーとなりました (さすが unstable ディレクトリ…)
/usr/local/include/xulrunner-1.9.1.3/unstable/jstypes.h で定義されている
JS_ALWAYS_INLINE のエラーのようです
168 #ifndef JS_INLINE 169 # if defined __cplusplus 170 # define JS_INLINE inline 171 # elif defined _MSC_VER 172 # define JS_INLINE __inline 173 # elif defined __GNUC__ 174 # define JS_INLINE __inline__ 175 # else 176 # define JS_INLINE inline 177 # endif 178 #endif 179 180 #ifndef JS_ALWAYS_INLINE 181 # if defined DEBUG 182 # define JS_ALWAYS_INLINE JS_INLINE 183 # elif defined _MSC_VER 184 # define JS_ALWAYS_INLINE __forceinline 185 # elif defined __GNUC__ 186 # define JS_ALWAYS_INLINE __attribute__((always_inline)) JS_INLINE 187 # else 188 # define JS_ALWAYS_INLINE JS_INLINE 189 # endif 190 #endif
私の gcc 環境では __attribute__((always_inline)) がうまく使えません
(これは Cの関数定義をインライン化するためのコンパイラ指示のようですが)
inline なら認識されますので 以下のように jstypes.h を修正しました
168 #ifndef JS_INLINE 169 # if defined __cplusplus 170 # define JS_INLINE inline 171 # elif defined _MSC_VER 172 # define JS_INLINE __inline 173 # elif defined __GNUC__ 174 //# define JS_INLINE __inline__ 175 # define JS_INLINE inline 176 # else 177 # define JS_INLINE inline 178 # endif 179 #endif 180 181 #ifndef JS_ALWAYS_INLINE 182 # if defined DEBUG 183 # define JS_ALWAYS_INLINE JS_INLINE 184 # elif defined _MSC_VER 185 # define JS_ALWAYS_INLINE __forceinline 186 # elif defined __GNUC__ 187 //# define JS_ALWAYS_INLINE __attribute__((always_inline)) JS_INLINE 188 # define JS_ALWAYS_INLINE JS_INLINE 189 # else 190 # define JS_ALWAYS_INLINE JS_INLINE 191 # endif 192 #endif
強引ですがビルドを継続します
$ make … … Making all in po make[2]: Entering directory `/home/admin/gxine-0.5.903/po' make[2]: `all' に対して行うべき事はありません。 make[2]: Leaving directory `/home/admin/gxine-0.5.903/po' make[2]: Entering directory `/home/admin/gxine-0.5.903' Makefile:764: 警告: ターゲット `dist' へのコマンドを置き換えます Makefile:546: 警告: ターゲット `dist' への古いコマンドは無視されます make[2]: `all-am' に対して行うべき事はありません。 make[2]: Leaving directory `/home/admin/gxine-0.5.903' make[1]: Leaving directory `/home/admin/gxine-0.5.903' $ su # make install Makefile:764: 警告: ターゲット `dist' へのコマンドを置き換えます Makefile:546: 警告: ターゲット `dist' への古いコマンドは無視されます make install-recursive make[1]: Entering directory `/home/admin/gxine-0.5.903' Makefile:764: 警告: ターゲット `dist' へのコマンドを置き換えます Makefile:546: 警告: ターゲット `dist' への古いコマンドは無視されます Making install in m4 … … test -z "/usr/local/share/applications" || /bin/mkdir -p "/usr/local/share/applications" /bin/install -c -m 644 'gxine.desktop' '/usr/local/share/applications/gxine.desktop' make[3]: Leaving directory `/home/admin/gxine-0.5.903' make[2]: Leaving directory `/home/admin/gxine-0.5.903' make[1]: Leaving directory `/home/admin/gxine-0.5.903' #
多少の工夫が必要でしたが インストールは可能です
使い勝手の検証
gxine を使ってみて xine-ui と使い勝手を比較してみました
初回起動すると ~/.config/gxine/ が作成されコンフィグを初期設定してくれます
検証の環境では CD/DVD を /dev/cdroms/cdrom0 となるように udevをカスタマイズしているため
gxineが見つけてくれず CD と DVD デバイスが認識されませんでした
通常のディストリビューションを使って入れば問題ないでしょう
gxine起動時の画面です
画像のズームや ウィンドウサイズの変更など 基本的な設定はメニュー化されています
ただし 検証の環境では 再生ウィンドウをドラッグして任意倍ズームするのが
思ったとおりのサイズにズームされず使い勝手がよろしくなかったです (fluxboxのせい?)
あらかたの動画形式は視聴できます
インターネット配信(.asx)も
.asxファイルを一旦ローカルディスクにダウンロードして gxineから開く ことで再生できました
ただし Mozillaプラグイン導入の指定をしたのにも関わらず
Firefoxでクリックして再生ウィンドウが開く とう期待通りの設定はされませんでした
また ファイル名 動画タイトル などが文字化けしています
これは 検証のシステムが EUC-JP系だからかもしれません (UTF-8なら問題なし?)
CD DVD デバイスを認識させるために ~/.config/gxine/config を編集して
以下の各行を適切に設定すれば CD DVD の視聴が可能です
media.audio_cd.device:/dev/cdroms/cdrom0
media.dvd.device:/dev/cdroms/cdrom0
media.vcd.device:/dev/cdroms/cdrom0
↑で再生されている 某メイドアニメDVD を見て分かるとおり
DVDのメニューについてもマウスで操作可能で 完璧な仕上りぶり
と思われましたが
コントロールパネルに チャプタージャンプ や タイトルジャンプ などのジャンプメニューありません
(xine-ui にはあります)
gxineの優位な点 |
メニューが日本語 (ただし EUC-JP環境では苦しい表示も) ファイル選択画面が使い易い (EUC-JPも問題なし) CD DVD 環境の自動設定 (初回起動時) 早送り機能がある (ただし 動画形式によっては不具合も) Mozillaプラグイン (ただし 検証の環境では確認できず) |
---|---|
xine-uiの優位な点 |
再生ウィンドウをマウスドラッグで任意倍拡大ができる (gxineは 使い心地が悪い) ファイル選択画面は一応日本語可能 (gxineに比べると使い勝手は悪い) DVD のジャンプメニューがある (ただしチャプター番号指定してジャンプする部分が反応しないことあり) 早送り 巻戻し 機能がある (ただし 動画形式によっては不具合も) |
…
…
結局 xine-ui使うことにしました
(期待していた Mozillaプラグインが空振りしたのと DVDでタイトル画面が呼べないのが痛い)
xine-ui の DVD観賞はこんな感じです
「メニュー切り替え」とか「ルート」を選択すると 一発でタイトルに飛びます
マウスによる メニュー選択もばっちりOK
ただし 番号を押してそのチャプターに飛ぼうとしたとき
うまく 飛んでくれる場合と反応がない場合があり いまいち使い勝手が悪い
あと
xine-uiをビルドするときに注意点があります
ソースコードをそのままビルドすると 日本語が文字化けしてしまいます
xine-uiは フォントのXLFD名をソースコード内にハードコードしているので
-*-*-*-*-*-*-14-*-*-*-*-*-jisx0208.1983-* のように日本語フォントに全置換してあげます
xine-ui-0.99.5用のパッチ を作ってみました参考にしてださい
$ tar -xzf xine-ui-0.99.5.tar.gz $ cd xine-ui-0.99.5 $ zcat ../xine-ui-0.99.5-japanese.patch.gz | patch -p1 patching file src/xitk/event_sender.c patching file src/xitk/file_browser.c patching file src/xitk/help.c patching file src/xitk/kbindings.c patching file src/xitk/mediamark.c patching file src/xitk/post.c patching file src/xitk/setup.c patching file src/xitk/skins/xinetic/skinconfig patching file src/xitk/skins.c patching file src/xitk/stream_infos.c patching file src/xitk/tvset.c patching file src/xitk/viewlog.c patching file src/xitk/xine-toolkit/font.h patching file src/xitk/xine-toolkit/test.c $ ./configure --prefix=/usr/local --disable-xft … … config.status: creating config.h config.status: executing depfiles commands config.status: executing default-1 commands config.status: creating src/xitk/xine-toolkit/po/POTFILES config.status: creating src/xitk/xine-toolkit/po/Makefile config.status: creating po/POTFILES config.status: creating po/Makefile config.status: executing default commands $ make … … make[3]: Leaving directory `/home/admin/xine-ui-0.99.5/src/fb' make[3]: Entering directory `/home/admin/xine-ui-0.99.5/src' make[3]: `all-am' に対して行うべき事はありません。 make[3]: Leaving directory `/home/admin/xine-ui-0.99.5/src' make[2]: Leaving directory `/home/admin/xine-ui-0.99.5/src' make[2]: Entering directory `/home/admin/xine-ui-0.99.5' make[2]: Leaving directory `/home/admin/xine-ui-0.99.5' make[1]: Leaving directory `/home/admin/xine-ui-0.99.5' $ su # make install … … make[2]: `install-exec-am' に対して行うべき事はありません。 make[2]: `install-data-am' に対して行うべき事はありません。 make[2]: Leaving directory `/home/admin/xine-ui-0.99.5' make[1]: Leaving directory `/home/admin//xine-ui-0.99.5' #
検証の環境では –disable-xft もしないと日本語が表示されませんでした
Linuxで WLI2-PCI-G54S WLI-UC-G (無縁LAN)
突然 パソコンと NintendoDS をつなぎたくなった
(注) 結局 DSとの接続は確認できませんでした…
CPU | AMD Turion(tm) 64 Mobile Technology MT-37 |
---|---|
OS | Linux kernel 2.6.24 |
GCC | 4.1.2 i686 |
glibc | 2.5 |
ndiswrapper | 1.52 |
DHCP | ISC-DHCP 4.1.0a1 |
無線LAN 接続機器 | PC-MV1-C1W(SHARP製ノート) WILLCOM03(PHS端末) NintendoDS(ゲーム) Wii(ゲーム) |
(NintedoDSだけが目的ではありませんが…) 導入までの流れは以下のとおりです
- インターフェースユニットの選定
- ドライバの導入
- Linux側の MACフィルタリング DHCPの設定
- 無線LANの設定
- 他の無線LAN機器との接続
インターフェースユニットの選定
ます インターフェースカードの選定に苦労しました
PCIでパソコン内部に設置できることと
802.11bよりも速い通信方式をサポートしていること
Linuxでの動作実績があること
デスクトップパソコン (PCI)で利用できる 無線LANカードは数が少ないようです (2008年購入)
今回は WLI2-PCI-G54S を購入しました
2009年初には結局 USB接続の無線機も購入しました
DS接続(802.11b + 2Mbpsレート + WEP128bit方式)をサポートしていること
Linux動作実績があるもの
なんだかんだと 安さで衝動購入してしまった WLI-UC-G も結果報告します
WLI2-PCI-G54Sドライバの導入
まず カーネルに必要なオプションを設定します
Wireless extensionsは必須です (net_device構造体に 無線LAN系の拡張がなされます)
Improved wireless configuration API はもしかしたら不要かもしれません
(いろいろ試して 少なくとも動いたのがこのオプションです)
また iptables により MACフィルタを行うので Networking Options を次のようにします
次に ドライバですが Linuxネイティブのドライバが存在せず
NDISwrapper という Windowsのドライバを利用するドライバラッパをかませます
上記サイトから ndiswrapper ソースコードを取得し展開します
インストールされるファイルは数としてはそんなにありません
$ tar -tzvf ndiswrapper-1.52.tar.gz $ cd ndiswrapper-1.52 $ make make -C driver make[1]: Entering directory `/home/admin/ndiswrapper-1.52/driver' make -C /usr/src/linux-2.6.24 SUBDIRS=/home/admin/ndiswrapper-1.52/driver make[2]: Entering directory `/usr/src/linux-2.6.24' LD /home/admin/ndiswrapper-1.52/driver/built-in.o CC [M] /home/admin/ndiswrapper-1.52/driver/crt.o CC [M] /home/admin/ndiswrapper-1.52/driver/hal.o CC [M] /home/admin/ndiswrapper-1.52/driver/iw_ndis.o CC [M] /home/admin/ndiswrapper-1.52/driver/loader.o CC [M] /home/admin/ndiswrapper-1.52/driver/ndis.o CC [M] /home/admin/ndiswrapper-1.52/driver/ntoskernel.o CC [M] /home/admin/ndiswrapper-1.52/driver/ntoskernel_io.o CC [M] /home/admin/ndiswrapper-1.52/driver/pe_linker.o CC [M] /home/admin/ndiswrapper-1.52/driver/pnp.o CC [M] /home/admin/ndiswrapper-1.52/driver/proc.o CC [M] /home/admin/ndiswrapper-1.52/driver/rtl.o CC [M] /home/admin/ndiswrapper-1.52/driver/wrapmem.o CC [M] /home/admin/ndiswrapper-1.52/driver/wrapndis.o CC [M] /home/admin/ndiswrapper-1.52/driver/wrapper.o CC [M] /home/admin/ndiswrapper-1.52/driver/usb.o CC [M] /home/admin/ndiswrapper-1.52/driver/divdi3.o LD [M] /home/admin/ndiswrapper-1.52/driver/ndiswrapper.o Building modules, stage 2. MODPOST 1 modules CC /home/admin/ndiswrapper-1.52/driver/ndiswrapper.mod.o LD [M] /home/admin/ndiswrapper-1.52/driver/ndiswrapper.ko make[2]: Leaving directory `/usr/src/linux-2.6.24' make[1]: Leaving directory `/home/admin/ndiswrapper-1.52/driver' make -C utils make[1]: Entering directory `/home/admin/ndiswrapper-1.52/utils' gcc -g -Wall -I../driver -o loadndisdriver loadndisdriver.c make[1]: Leaving directory `/home/admin/ndiswrapper-1.52/utils' $ su # make install make -C driver install make[1]: Entering directory `/home/admin/ndiswrapper-1.52/driver' make -C /usr/src/linux-2.6.24 SUBDIRS=/home/admin/ndiswrapper-1.52/driver make[2]: Entering directory `/usr/src/linux-2.6.24' Building modules, stage 2. MODPOST 1 modules make[2]: Leaving directory `/usr/src/linux-2.6.24' echo /lib/modules/2.6.24/misc /lib/modules/2.6.24/misc mkdir -p /lib/modules/2.6.24/misc install -m 0644 ndiswrapper.ko /lib/modules/2.6.24/misc /sbin/depmod -a 2.6.24 -b / make[1]: /sbin/depmod: コマンドが見つかりませんでした make[1]: [install] エラー 127 (無視されました) make[1]: Leaving directory `/home/admin/ndiswrapper-1.52/driver' make -C utils install make[1]: Entering directory `/home/admin/ndiswrapper-1.52/utils' install -D -m 755 loadndisdriver /sbin/loadndisdriver install -D -m 755 ndiswrapper /usr/sbin/ndiswrapper install -D -m 755 ndiswrapper-buginfo /usr/sbin/ndiswrapper-buginfo NOTE: Windows driver configuration file format has changed since 1.5. You must re-install Windows drivers if they were installed before. make[1]: Leaving directory `/home/admin/ndiswrapper-1.52/utils' mkdir -p -m 0755 /usr/man/man8 install -m 644 ndiswrapper.8 /usr/man/man8 install -m 644 loadndisdriver.8 /usr/man/man8 #
続いて Linuxの設定 MACフィルタの設定を行います
Linuxの ファイアウォール機能である iptablesを用いて セキュリティを確保します
ファイアウォールポリシーとしては 以下のとおりです
「3台(Mebius WILLCOM03 NintendoDS)の MACアドレス以外から通信を受けない」
# iptables -A INPUT -j ACCEPT -i wlan0 -m mac --mac-source **:**:**:**:**:** # iptables -A INPUT -j ACCEPT -i wlan0 -m mac --mac-source **:**:**:**:**:** # iptables -A INPUT -j ACCEPT -i wlan0 -m mac --mac-source **:**:**:**:**:**
3台の MACアドレスの部分は伏字にしてます 実際は MACアドレスを調べて登録します
デフォルトポリシーを iptables -P INPUT DROP としているので
上記ポリシー追加により 指定の MACアドレスからの通信のみ許可されることになります
参考のために 自環境の iptables設定を紹介します
# iptables -L -v Chain INPUT (policy DROP 5920 packets, 1818K bytes) pkts bytes target prot opt in out source destination 60335 4298K ACCEPT all -- lo any anywhere anywhere 60846 78M ACCEPT all -- eth1 any anywhere anywhere 9122 1621K ACCEPT all -- wlan0 any anywhere anywhere MAC **:**:**:**:**:** 0 0 ACCEPT all -- wlan0 any anywhere anywhere MAC **:**:**:**:**:** 14 2472 ACCEPT all -- wlan0 any anywhere anywhere MAC **:**:**:**:**:** 57978 37M ACCEPT !icmp -- eth0 any anywhere anywhere ctstate RELATED,ESTABLISHED 0 0 ACCEPT icmp -- eth0 any anywhere anywhere icmp echo-reply 0 0 ACCEPT icmp -- eth0 any anywhere anywhere icmp echo-request 3 200 ACCEPT icmp -- eth0 any anywhere anywhere icmp destination-unreachable 1 63 ACCEPT udp -- eth0 any anywhere anywhere udp spt:domain Chain FORWARD (policy ACCEPT 261K packets, 225M bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 197K packets, 18M bytes) pkts bytes target prot opt in out source destination # # iptables -L -v -t nat Chain PREROUTING (policy ACCEPT 8397 packets, 2224K bytes) pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 7665 packets, 592K bytes) pkts bytes target prot opt in out source destination 173 8316 MASQUERADE all -- any any 192.168.0.0/23 !192.168.0.0/23 Chain OUTPUT (policy ACCEPT 7660 packets, 592K bytes) pkts bytes target prot opt in out source destination #
自マシンが LAN/無縁LAN/インターネット のGWを兼ねていて NIC構成は以下の通りです
(eth0) インターネット向け
(eth1) LAN (192.168.0/24)
(wlan0) 無線LAN (192.168.1/24)
ファイアウォールの設定はなるべく簡素にしています (不要な通信が外に抜けないか警戒する必要があります)
- INPUTチェインのみ デフォルト DROP とし 必要な通信のみ許可設定を入れる
- FORWARDING OUTPUT チェインは設定しない デフォルト ACCEPT
- 外部(192.168.0.0/23以外)への通信は NATするように設定
では 次の設定です DHCP です 無線LAN用に dhcpd.wlan0.conf を用意しました
option domain-name "local"; option domain-name-servers 192.168.1.1; default-lease-time 600; max-lease-time 7200; ddns-update-style none; authoritative; log-facility daemon; subnet 192.168.1.0 netmask 255.255.255.0 { option routers 192.168.1.1; option broadcast-address 192.168.1.255; host mebius { hardware ethernet **:**:**:**:**:**; fixed-address 192.168.1.2; } host ds { hardware ethernet **:**:**:**:**:**; fixed-address 192.168.1.3; } host w03 { hardware ethernet **:**:**:**:**:**; fixed-address 192.168.1.4; } }
MACアドレスは伏字です
各自 無線LANのネットワーク環境にあわせて設定します
以降に紹介する手順では省略しますが 無線LANのインターフェースである wlan0 が有効化したときに
# dhcpd -q -pf /var/run/dhcpd.wlan0.pid -cf /usr/local/etc/dhcpd.wlan0.conf wlan0
のコマンドをいれて wlan0 用の dhcpd を常駐させるようにしましょう
WLI2-PCI-G54S の Windowsドライバが動作するか検証します
手順としては
1. Windowsドライバをダウンロードして一時的なディレクトリの中に展開
2. 適切な .infファイルを ndiswrapperに読み込ませる
ftp.dell.com にある network/R81433.EXE (unzipで解凍可能)での動作実績が
他のホームページでも紹介されていましたが 私の環境では動作しませんでした
同じ dell.com の ドライバダウンロードサイトから
R140747.EXE を使いました 以下の手順で .infファイルを ndiswrapperに読み込ませます
$ mkdir r140747 $ cd r140747 $ unzip R140747.EXE Archive: /home/admin/WLI2-PCI-G54S/r140747.exe inflating: msvcr71.DLL inflating: preflib.dll inflating: README.rtf inflating: setup.exe inflating: setup.inx inflating: Setup.ini inflating: setup.iss inflating: WLBCGCBPRO731.DLL inflating: wltray.exe 〜 〜 inflating: is.exe extracting: launcher.ini inflating: layout.bin inflating: MFC71.DLL inflating: msvcp71.DLL inflating: Version.txt $ cd DRIVER $ ls bcm43xx.cat bcm43xx64.cat bcmwl5.inf bcmwl5.sys bcmwl564.sys $ ndiswrapper -i bcmwl5.inf installing bcmwl5 ... $ ndiswrapper -l bcmwl5 : driver installed
最後の ndiswrapper -l でドライバの一覧を確認しています
一般ユーザ権限でドライバを導入できることに ある意味ビックリしましたが
モジュールのロードには root権限が必要です
$ su # modprobe ndiswrapper # lsmod Module Size Used by ndiswrapper 145084 0 nvidia 4702512 22 # ifconfig wlan0 wlan0 Link encap:Ethernet HWaddr **:**:**:**:**:** unspec addr:[NONE SET] Bcast:[NONE SET] Mask:[NONE SET] BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 Interrupt:21 Memory:ef010000-ef012000
HWaddr の部分は伏字としてますが 16進数の MACアドレスが見えてればOKです
dmesgの出力は
ndiswrapper version 1.52 loaded (smp=no, preempt=no) ndiswrapper: driver bcmwl5 (Broadcom,10/12/2006, 4.100.15.5) loaded ACPI: PCI Interrupt 0000:00:08.0[A] -> GSI 16 (level, low) -> IRQ 21 ndiswrapper: using IRQ 21 wlan0: ethernet device **:**:**:**:**:** using NDIS driver: bcmwl5, version: 0x4 640f05, NDIS version: 0x501, vendor: 'NDIS Network Adapter', 14E4:4318.5.conf wlan0: encryption modes supported: WEP; TKIP with WPA, WPA2, WPA2PSK; AES/CCMP with WPA, WPA2, WPA2PSK usbcore: registered new interface driver ndiswrapper ACPI: PCI Interrupt 0000:01:00.0[A] -> GSI 16 (level, low) -> IRQ 21
最後に iwconfig でのインターフェース設定を行います
# iwconfig wlan0 mode ad-hoc essid '****' key s:'*****' commit # iwconfig wlan0 wlan0 IEEE 802.11b ESSID:"****" Mode:Ad-Hoc Frequency:2.462 GHz Cell: **:**:**:**:**:** Bit Rate=11 Mb/s Tx-Power:32 dBm RTS thr:2347 B Fragment thr:2346 B Encryption key:7368-696B-61 Security mode:restricted Power Management:off Link Quality:0 Signal level:0 Noise level:0 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0
まず essid ですが任意のアクセスポイント名(英数字)を決めて設定します(一応伏字)
key ですがこれは WEPキー(暗号化)を表します s: に続けて文字列で設定します
WEPキーは 5文字(40/64bit) もしくは 13文字(128bit) で指定します
設定は完了ですが iwconfig の画面で疑問点があります IEEE802.11b(11Mbps)の規格なのです
ハードウェアとしては もっと速い IEEE802.11g(54Mbps)に対応してるはずなのですが
では Mebiusノートの接続から 検証開始します

(↑の写真は SHARP の製品ページ からのパクリものです)

まず 内蔵無線LAN を使用開始にします タッチパッド左手前の無線LANランプが点灯していることを確認します
(ランプが消灯していれば Fnキー + F1キー で無線LANを有効にします)

無線LAN設定ツールを開いて設定します 設定箇所は 赤枠の2箇所です
まず ESSIDを 先ほど Linux側で設定した ESSIDに合わせます
(もしくは スキャンボタンを押して アクセスポイントとして検出されることを確認します)
次に WEPキーを入力します これも先ほどアクセスポイントで設定した 5文字/13文字 です
ノートパソコンと Linux側で DHCPの設定が正しければ ノートパソコンでインターネットが見れるようになります
私の環境では動作OKでした
WILLCOM03の設定です

赤↑の箇所をタッチして 無線デバイスの設定を呼び出します

無線LANデバイスを有効にします 赤↑の箇所をタッチするとデバイスが有効になり MACアドレスが表示されます

無線LANの設定を行います 左上のスタートメニューから「設定」を開いて
「接続」タブを選択します 「ネットワークカード」が設定ツールです

アクセスポイントが検出されると 絵のように ESSIDが見えます
これに対して必要な登録を行います

まず ネットワーク名 として ESSIDが表示されているので正しいことを確認して「次へ」

次が設定のキモの部分です 「データ暗号化」に WEP を指定して
「ネットワークキー」の部分に WEPキー を入力します

IEEE802.1xというのは 端末とアクセスポイントの認証方式で
WILLCOM03 はこの機構をサポートしているようです
WLI2-PCI-G54Sは この機構をサポートしてないためか何も設定できません
最後に「完了」を押して設定完了です

DHCPの設定等が正しければ そのうち「接続済」のステータスとなり
めでたくインターネットにつながります WILLCOM03 もうまく接続できました
次に NintendoDS の検証です
ちょうど ファイナルファンタジー3 のソフトに Wi-Fi の設定ツールが付属しているので
それを使ってみます

Wi-Fi設定のトップ画面です 青いパネルをタッチして設定開始します

3箇所まで設定できます 1箇所目の設定をタッチして
「アクセスポイントの検索」をタッチします

ESSID名が表示されアクセスポイントが認識されました これを選択します
続いて WEPキーの入力画面に移りますので WEPキー を入力します
そのまま 接続テスト の画面に移行した後…

こんな画面で 接続失敗となってしまいます
接続確認でエラー 51300 について ネットを検索してみましたが解決には至りませんでした
wlan0 に対して tcpdump を実施しましたが 通信自体が流れていないことが分かりました
無線LAN物理層の設定が悪いのか 任天堂独自プロトコル?? WEPキーの設定のミスでしょうか
後から調べて分かった話ですが
DSでは WEP 128bit/40bit 802.11b 2Mbps で接続しているようです
今回の WLI2-PCI-G54S は 11Mbps(固定?) だったので通信速度が合わなかったと思われます
ちなみに Buffalo社の AOSSという接続の規格がありますが
これは IPで言うところの DHCP に近い機能で WEPの ESSID と キー を自動設定するものです
今回の失敗の件とは直接関係がないと思われます
別の WLI2-PCI-G54S のドライバを試してみます
いろいろ検索して 他のドライバもあたってみましたが 次に紹介するものが私の環境で動作しました
bcmwl5a.inf
bcmwl5.sys
直リンクです(ごめんなさい) 2つのファイルを同じディレクトリにダウンロードして
# rmmod ndiswrapper # ndiswrapper -r bcmwl5 # ndiswrapper -i bcmwl5a.inf installing bcmwl5a ... forcing parameter IBSSGMode from 0 to 2 forcing parameter IBSSGMode from 0 to 2 #
一旦古いドライバを ndiswrapper -r で削除して入れ直しました
# modprobe ndiswrapper # dmesg 〜 usbcore: deregistering interface driver ndiswrapper ndiswrapper version 1.52 loaded (smp=no, preempt=no) ndiswrapper: driver bcmwl5a (Broadcom,12/22/2004, 3.100.46.0) loaded ACPI: PCI Interrupt 0000:00:08.0[A] -> GSI 16 (level, low) -> IRQ 21 ndiswrapper: using IRQ 21 wlan0: ethernet device **:**:**:**:**:** using NDIS driver: bcmwl5a, version: 0x3642e00, NDIS version: 0x501, vendor: 'NDIS Network Adapter', 14E4:4318.5.conf wlan0: encryption modes supported: WEP; TKIP with WPA, WPA2, WPA2PSK; AES/CCMP with WPA, WPA2, WPA2PSK usbcore: registered new interface driver ndiswrapper
とりあえず ドライバはロードできたみたいです
# ifconfig wlan0 192.168.1.1 netmask 255.255.255.0 up # iwconfig wlan0 mode ad-hoc essid '*******' key s:'*****' commit # iwconfig wlan0 wlan0 IEEE 802.11g ESSID:"*******" Mode:Ad-Hoc Frequency:2.462 GHz Cell: **:**:**:**:**:** Bit Rate=54 Mb/s Tx-Power:25 dBm RTS thr:2347 B Fragment thr:2346 B Encryption key:****-****-****-****-****-****-** Security mode:restricted Power Management:off Link Quality:0 Signal level:0 Noise level:0 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0 #
お IEEE802.11gで認識されているではありませんか
ドライバを入れ換えることで 通信規格が選択できるかも(面倒くさいが)
で これは期待できます NitendoDS と通信できるかも で試した結果
Mebius(PC-MV1-C1W) | 通信OK |
---|---|
WILLCOM03 | つながらない |
NintendoDS | つながらない アクセスポイントは発見できる |
で WILLCOM03 がつながらなかった分さっきよりも結果は悪くなってしまいました
でも確か WILLCOM03は IEEE802.11g サポートされてるはず… ??
結果的に NintendoDS が相変わらず無反応でしたが
とりあえず Linuxで無線LANが使える環境になりました
WILLCOM03の無線機能を ONにしていると明らかに端末が熱をおび
バッテリーを消費してるんだなぁ と分かります 使わない場合は無線機能は OFF にしましょう
WLI-UC-Gドライバの導入
ものの情報によれば
この USBデバイスは Linuxの rt2x00 rt73 ドライバで動作するとのこと
まず Linuxのソースツリーに このドライバがあるか確認してみました
$ cd /usr/src/linux $ find . -name '*rt73*' ./drivers/net/wireless/rt2x00/rt73usb.c ./drivers/net/wireless/rt2x00/rt73usb.h $ $ less drivers/net/wireless/rt2x00/Kconfig config RT2X00 tristate "Ralink driver support" depends on MAC80211 && WLAN_80211 && EXPERIMENTAL ---help--- This will enable the experimental support for the Ralink drivers, developed in the rt2x00 project http://rt2x00.serialmonkey.com. These drivers will make use of the Devicescape ieee80211 stack. When building one of the individual drivers, the rt2x00 library will also be created. That library (when the driver is built as a module) will be called "rt2x00lib.ko". 〜 config RT73USB tristate "Ralink rt73 usb support" depends on RT2X00 && USB select RT2X00_LIB_USB select RT2X00_LIB_FIRMWARE ---help--- This is an experimental driver for the Ralink rt73 wireless chip. When compiled as a module, this driver will be called "rt73usb.ko". 〜 $
以下の内容が読み取れます
rt73 は rt2x00 に依存している
rt2x00 は MAC80211 と WLAN_80211 と EXPERIMENTAL に依存している
従って カーネルのコンフィグ設定画面では
“Prompt for development and/or incomplete code/drivers” を有効にした上で
WLAN_80211 は WLI2-PCI-G54Sの作業のときに有効にしていたので
次は rt73 を有効にします
今回の WLI-UC-G の USB上での ベンダID, 製品ID はそれぞれ 0x0411, 0x0137 でした
rt73ドライバが この IDを認識するように追加する必要があります
カーネルソースの drivers/net/wireless/rt2x00/rt73usb.c を書き換えます
2033 /* Billionton */ 2034 { USB_DEVICE(0x1631, 0xc019), USB_DEVICE_DATA(&rt73usb_ops) }, 2035 /* Buffalo */ 2036 { USB_DEVICE(0x0411, 0x00f4), USB_DEVICE_DATA(&rt73usb_ops) }, 2037 { USB_DEVICE(0x0411, 0x0137), USB_DEVICE_DATA(&rt73usb_ops) }, 2038 /* CNet */ 2039 { USB_DEVICE(0x1371, 0x9022), USB_DEVICE_DATA(&rt73usb_ops) }, 2040 { USB_DEVICE(0x1371, 0x9032), USB_DEVICE_DATA(&rt73usb_ops) }, 2041 /* Conceptronic */ 2042 { USB_DEVICE(0x14b2, 0x3c22), USB_DEVICE_DATA(&rt73usb_ops) },