NVIDIAのGeForceやATiのRADEONには、Non-FreeのLinux用のプロプライエタリ(独占)ドライバが提供されています。
基本的には、GeForceの場合はnvidia-glxを、RADEONの場合はfglrx-driverをインストールすることで使用できますが、私がKZubuntuに載せていたGeForce2 MXの場合は、単純にインストールしただけではXが起動しませんでした。
そのときの変更内容を記載します。
NOTE:エラー内容を良く調べてから、以下の手順をトライしてください。
Xorgのエラーは/var/log/Xorg.0.logに、ドライバ関連はdmesgで見れます。
Xorgのエラーだけ見る cat /var/log/Xorg.0.log | grep EE
dmesgでNVIDIA関連のログを見る dmesg | grep NVIDIA
問題の原因に関する考察
勘のいい人なら、この項目を読んだだけで解決できる可能性があるので、初めにこの項目を書いておきます。
後述するように、GeForce用のドライバは3種類あります。
GeForce2 MXはそのうちの1.0-96xx(nvidia-glx)ドライバで動作します。
しかし、単純にnvidia-glxをインストールすると、GeForce2 MXを1.0-71xx(nvidia-glx-legacy)であると勘違いしてしまうようです。
そのため、KernelとModuleの整合性が取れなくなり、Xが起動しない、という問題が発生するようです。
さっさと解決したい人
- uname -rでkernelのバージョンを調べる。
- 適切なlinux-restricted-modulesをインストール
- nvidia-glxをインストール
- sudo nvidia-xconfig
- /lib/linux-restricted-modules/<kernel version>/のnvidiaディレクトリをnvidia_legacyにcp -rp
- 再起動(grubメニューでどのカーネルがデフォルト起動になっているか確かめること)
どのチップに問題が発生する可能性があるか
NVIDIAにあるLinux用ドライバのREADMEにざっと目を通しておきます。
その中のAppendix A. Supported NVIDIA Graphics Chipsによると、GeForce用のドライバが3種類用意されていることが分かります。
- 1.0-97xx(nvidia-glx-new):最近のGeForceチップ(GeForce FX以降)
- 1.0-96xx(nvidia-glx):古いGeForce(GeForce2 MX、3、4)
- 1.0-71xx(nvidia-glx-legacy):それ以前のもの(RIVA TNT、GeForce256、GeForce2)
問題の原因はGeForce2 MXの元モデルである、GeForce256が1.0-71xxで動作する、ということにあるのではないでしょうか。
おそらく、この問題が出るのはGeForce2 MXおよび、その改良版であるGeForce4 MXあたりではないかと思います(未実証)。
参照:Wikipedia - GeForce/GeForce2 MX、Wikipedia - GeForce/GeForce4 MX
正しいNVIDIAドライバのインストール
NVIDIAドライバのインストールを行うとき、注意する点があります。
それは、いきなりnvidia-glxをインストールしてはいけない点です。
これで動作することもあると思いますが、UbuntuのForumによると、正しい手順は以下のようです。
- マシンで使用されているカーネルにあったlinux-restricted-modulesをインストールする。
- NVIDIAドライバをインストールする。
1.の手順を踏まない場合、aptは適当と「考えられる」linux-restricted-modulesを勝手にインストールします 
私の場合は、Kernelは2.6.20-16-genericにも関わらず、Moduleは2.6.20-16.386がインストールされていました。
すべてsudoで。 $apt-get update $apt-get linux-restricted-modules-generic (使用しているカーネルに合わせる。kernelが2.6.20-16.386であれば、linux-restricted-modules-386) $nvidia-glx $nvidia-xconfig
NVIDIAドライバインストール後の対応
つぎに、kernelが動作可能なModuleをロードできるように、ファイルをいじってあげます。
linux-restricted-moduleは、/lib/linux-restricted-modules/<kernel version>いかに格納されていますので、ここをカレントディレクトリにします。
私の環境の場合 : cd /lib/linux-restricted-modules/2.6.20-16-generic/
ここをlsしてみると以下の3つのディレクトリが含まれていることが分かります。
- nvidia_new : 1.0-97xxドライバ
- nvidia : 1.0-96xxドライバ <- これを使いたい
- nvidia_legacy : 1.0-71xxドライバ <- けどこれがロードされる
問題の原因は、GeForce2 MXは1.0-96xxドライバで動作するにも関わらず、1.0-71xxドライバを読みに行ってしまうことです。なので、ディレクトリを強制的に上書きします(ぇー)。
sudoで $ mv nvidia_legacy nvidia_legacy.orig <- バックアップを取っておく $ cp -rp nvidia nvidia_legacy
これでnvidia_legacyディレクトリに、正しくnvidiaディレクトリがコピーされたはずです。
試しに、ls -lでファイルサイズを確認してみてください。
再起動します。OSのロード終了後、NVIDIAのロゴが出て(設定によっては出ません)、Xが起動すればOKです。
その他の問題点
NVIDIAプロプライエタリドライバをインストールした場合、kaffeineやtotemでの動画再生に問題が生じました。
その場合の解決方法は、音声・動画を再生する/NVIDIAプロプライエタリドライバの問題を参照してください。