xorg の nvidia ドライバーに大苦労した話

先日Dell の大型モニタが届いた.このモニタには Mac を接続する予定なのだが,到着はもう少し先になりそうなので,とりあえず Linux マシンをつないで凌ぐことにしたのだが,設定に大苦労したというお話.

このモニタの解像度は 2560x1600 で,DVI 接続ではデュアルリンクが必要である.これはケーブルがデュアルリンク対応というだけでなく,グラフィックカード側もデュアルリンク出力をする必要がある.Linux マシンのグラフィックカードnVidia Quadro FX 380 というもので,仕様的には十分対応できるものである.

xorg 付属ドライバを試す

Linux マシンも届いたばかりなので,まずはいつもの通り Debian をインストールし,squeeze に upgrade した.そして X Window をインストール開始.

$ sudo aptitude install xorg twm
$ vi ~/.xsession
exec twm
$ chmod +x ~/.xsession
$ startx

... 真っ暗.何故か kill ではうまく終了させられないので,リモートログインから,

$ sudo telinit s

で終了させる.で,いつものごとく /etc/X11/xorg.conf をいじろうとしたのだが...無い!

$ sudo dpkg-reconfigure xserver-xorg

としても何も起こらない.「Xサーバ1.7→1.8、HAL から udev | Kawaji's Weblog」などによると,最近の X はハードウェア環境について HAL や udev から情報を取得して自らを構成するようになっていて,xorg.conf は必要なくなっているそうだ.しかし xorg.conf が無いと話が始まらない./var/log/Xorg.0.log を見たところ,内部で利用している xorg.conf の内容が表示されていたので,それを元に generic な xorg.conf を作成した.

Section "ServerLayout"
    Identifier     "Builtin Default Layout"
    Screen         "Builtin Default nv Screen 0"
EndSection

Section "Device"
    Identifier     "Builtin Default nv Device 0"
    Driver         "nv"
EndSection

Section "Screen"
    Identifier     "Builtin Default nv Screen 0"
    Device         "Builtin Default nv Device 0"
    DefaultDepth    24
    SubSection     "Display"
        Depth       24
        Modes      "2560x1600"
    EndSubSection
EndSection

まず man nv をチェックしたところ,Option "AllowDualLinkModes" "boolean" というのを発見した.

Section "Device"
    Identifier     "Builtin Default nv Device 0"
    Driver         "nv"
    Option         "AllowDualLinkModes" "true"
EndSection

としてみた.その結果,表示されるにはされたが,画面が点滅を繰り返して使い物にならない.いろいろ実験した結果,vesa ドライバで 1600x1200 ならなんとか表示されることが判明した.

Section "Device"
    Identifier     "Builtin Default nv Device 0"
    Driver         "vesa"
EndSection

Section "Screen"
    Identifier     "Builtin Default nv Screen 0"
    Device         "Builtin Default nv Device 0"
    DefaultDepth    24
    SubSection     "Display"
        Depth       24
        Modes      "1600x1200"
    EndSubSection
EndSection

nVidia 製ドライバのインストール

しかしこれでは宝の持ち腐れである.そこで nVidia 謹製のドライバをインストールすることを決意.さっそくダウンロードしてインストールしてみたところ,全然だめなことが判明した.

そこで検索したところ,「http://tinyplanet.ca/~lsorense/debian/debian-nvidia-dri-howto.html」というページを発見!だが,このページの通りにやったところ,m-a clean,a-i -i -t -f nvidia-kernel-source のところで,BUILD FAIL! となって失敗に終わった.

調べてみると,nvidia-kernel-source パッケージのバグ報告ページに既に報告されていた.そこには,nvidia-kernel-source を一旦消して,apt リポジトリを sid に一時的に変更してビルドするというヤレヤレな workaround が報告されていた.いろいろやったところ成功したので,手順を記しておく.

まず,話をややこしくしないために,クリーンインストールを行い,上記の Option "AllowDualLinkModes" "boolean"xorg.conf に記入したところまでリプレイした.以下,「http://tinyplanet.ca/~lsorense/debian/debian-nvidia-dri-howto.html」に従って nvidia ドライバをビルドする.

# aptitude install nvidia-kernel-common module-assistant
# aptitude install pkg-config  # 後に sid からインストールされるのを防ぐため
# m-a -i -t prepare
# m-a clean,a-i -i -t -f nvidia-kernel-source
BUILD FAIL!
# vi /etc/apt/sources.list
{squeeze を sid に書き換え}
# apt-get update  # 安全のため aptitude でなく apt-get を使った
# m-a clean,a-i -i -t -f nvidia-kernel-source
# depmod -a
# apt-get install nvidia-glx nvidia-glx-dev nvidia-xconfig nvidia-settings
# vi /etc/apt/sources.list
{sid を squeeze に書き換え}
# aptitude update
# nvidia-xconfig

で無事成功!