FreeBSD/amd64 8.0-RELEASEにNVIDIA Driver 195.22ベータ版インストール

もう結構前だけど、NVIDIAからFreeBSD/amd64向けドライバのベータ版がリリースされた。FreeBSD/amd64に触れてみたかった事もあって、このドライバをインストールしてみた。
FreeBSD/amd64 8.0-RELEASEが既にインストール済みのシステムにX.orgをインストールする所から始める。
グラフィクスチップはNVIDIA GeForce 8400GS。

目次

X.orgのインストール&設定
まずはxorgのインストール

# portinstall x11/xorg

それから設定ファイルの作成。
X11 Configuration

xorgに大まかな設定ファイルxorg.conf.newを作ってもらう。

# Xorg -configure

上記URLでは、ここで出来たxorg.conf.newを使ってテストするのだけど、うちの環境ではテストに失敗した*1。すなわち黒い画面が出て止まってしまった。
よく分からないけど、その後のxorg.conf.newに設定を加えてから試したらちゃんと画面が出るようになった*2。書き加えた設定は以下の通り。

Monitorセクション。使用するモニタに合わせた設定にする。うちのモニタはSAMSUNGのSyncMaster 204B

Section "Monitor"
        Identifier   "Monitor0"
        VendorName   "SAMSUNG"
        ModelName    "SyncMaster 204B"
        HorizSync     30-81
        VertRefresh  56-75
        Option       "DPMS"
EndSection

Screenセクション。解像度1280x1024、色深度24bit

Section "Screen"
        Identifier "Screen0"
        Device     "Card0"
        Monitor    "Monitor0"
        DefaultDepth 24
        SubSection "Display"
                Viewport   0 0
                Depth     24
                Modes     "1280x1024"
        EndSubSection
EndSection

あと、キーボードとマウスに関する設定(InputDeviceセクション)は削除した。X.org 7.4からはデフォルトでHALを使用してキーボードやマウスを扱うようになり、xorg.confに設定を書いても無視されるからだ。*3
キーボードやマウスはHALのおかげで自動検知されるけど、このままではキーボードが英語配列になってしまう。そこで日本語キーボードの設定を/usr/local/etc/hal/fdi/policy/x11-input.fdiに書き込む。

<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
  <device>

    <!-- KVM emulates a USB graphics tablet which works in absolute coordinate mode -->
    <match key="input.product" contains="QEMU USB Tablet">
       <merge key="input.x11_driver" type="string">evdev</merge>
    </match>

    <match key="info.capabilities" contains="input.tablet">
      <match key="/org/freedesktop/Hal/devices/computer:system.kernel.name"
             string="Linux">
        <merge key="input.x11_driver" type="string">evdev</merge>
      </match>
    </match>

    <match key="info.capabilities" contains="input.keyboard">
      <!-- If we're using Linux, we use evdev by default (falling back to
           keyboard otherwise). -->
      <merge key="input.x11_driver" type="string">kbd</merge>

      <merge key="input.x11_options.XkbRules" type="string">xorg</merge>
      <merge key="input.x11_options.XkbLayout" type="string">jp</merge>
      <merge key="input.x11_options.XkbModel" type="string">jp106</merge>

      <match key="/org/freedesktop/Hal/devices/computer:system.kernel.name"
             string="Linux">
        <merge key="input.x11_driver" type="string">evdev</merge>
      </match>
    </match>
  </device>
</deviceinfo>

設定は終わりなのでテスト

# Xorg -config xorg.conf.new -retro

正しく灰色の編目模様の画面が出てきた。マウスも動く。
ここで終了しようとCtrl+Alt+Backspaceを押しても反応はない。X.org7.4からはデフォルトで無効になったようだ。Xを終了させるには、Ctrl+Alt+Fn*4で仮想コンソールに戻ってCtrl+Cする。((Xを除く仮想コンソール間の移動はAlt+Fn)。
最後に設定ファイルを/etc/X11にコピーして、X.orgの設定終了。

# cp xorg.conf.new /etc/X11/xorg.conf
XをCtrl+Alt+Backspaceで終了するようにする

設定ファイルを少しいじる必要がある。

  1. /usr/local/etc/hal/fdi/policy/x11-input.fdiをいじる。
  2.   <match key="info.capabilities" contains="input.keyboard">
    

    の次の行に以下を追加。

          <merge key="input.x11_options.XkbOptions" type="string">terminate:ctrl_alt_bksp</merge>
    

  3. /etc/X11/xorg.confのServerLayoutセクションに以下を追加。
  4. Option "DontZap"   "off"
    

X.orgおわり。

NVIDIAの最新ドライバ195.22ベータ版をインストール

NVIDIA Driver 195.22ベータ版を使うにはまずlinux_base-f10をインストールしないといけない。

linux_base-f10のインストール
FreeBSD Daily Topics 2009年8月17日 ≪Tips≫Linuxバイナリ互換環境linux_base-f10をインストールして使う方法

簡単な手順としてシェルでのコマンドだけ並べて書いておく。

# echo "VERRIDE_LINUX_BASE_PORT=f10" >> /etc/make.conf
# echo "OVERRIDE_LINUX_NONBASE_PORTS=f10" >> /etc/make.conf
# kldload linux
# portinstall emulators/linux_base-f10
# echo "linux_enable="YES" >> /etc/rc.conf
# echo "linprocfs /compat/linux/proc linprocfs rw 0 0" >> /etc/fstab
# mount linprocfs; /etc/rc.d/abi start
# fetch ftp://ftp.kddlabs.co.jp/pub/Linux/packages/fedora/updates/10/x86_64/tzdata-2009o-2.fc10.noarch.rpm
# rpm2cpio tzdata-2009o-2.fc10.noarch.rpm | cpio -idv | grep Tokyo
# cp ./usr/share/zoneinfo/Asia/Tokyo /usr/compat/linux/etc/localtime

おわり

NVIDIA Driver 195.22ベータ版のインストール
<2009/12/16追記>195.22ベータはportsにコミットされました。単純にx11/nvidia-driverをインストールするだけで利用できます。/etc/X11/xorg.confへの変更を除いて、以下の作業は不要です。
http://www.freebsd.org/cgi/getmsg.cgi?fetch=474379+0+current/cvs-ports


FreeBSD Daily Topics2009年12月8日 ≪注目≫FreeBSD/amd64版向けNVIDIA Driver 195.22ベータ版登場

portsx11/nvidia-driverを195.22用に改変してしまう。

# fetch ftp://download.nvidia.com/XFree86/FreeBSD-x86_64/195.22/NVIDIA-FreeBSD-x86_64-195.22.tar.gz
# mv NVIDIA-FreeBSD-x86_64-195.22.tar.gz /usr/ports/distfiles/
# cp -a /usr/ports/x11/nvidia-driver /usr/ports/x11/nvidia-driver.orig
# cd /usr/ports/x11/nvidia-driver
# cat > Makefile.new << EOF
@@ -6,17 +6,17 @@
 #
 
 PORTNAME=	nvidia-driver
-DISTVERSION?=	185.18.36
+DISTVERSION?=	195.22
 PORTREVISION?=	0			# As a reminder it can be overridden
 CATEGORIES=	x11 kld
 MASTER_SITES=	${MASTER_SITE_NVIDIA}
 MASTER_SITE_SUBDIR=	freebsd/${DISTVERSION}
-DISTNAME=	NVIDIA-FreeBSD-x86-${DISTVERSION}
+DISTNAME=	NVIDIA-FreeBSD-x86_64-${DISTVERSION}
 
 MAINTAINER=	danfe@FreeBSD.org
 COMMENT=	NVidia graphics card binary drivers for hardware OpenGL rendering
 
-ONLY_FOR_ARCHS=	i386
+ONLY_FOR_ARCHS=	i386 amd64
 
 NO_PACKAGE=	should be recompiled for a particular FreeBSD kernel
 USE_GL=		gl
EOF
# patch Makefile < Makefile.new
# cat  > distinfo.new << EOF
@@ -1,3 +1,6 @@
+MD5 (NVIDIA-FreeBSD-x86_64-195.22.tar.gz) = c9b0cdeb68d573556a38e16c02ffed55
+SHA256 (NVIDIA-FreeBSD-x86_64-195.22.tar.gz) = 3a6a0fc3003615c07090c04f2d5b41fa86cf8493309bf48eff8bcaa37126508c
+SIZE (NVIDIA-FreeBSD-x86_64-195.22.tar.gz) = 25503618
 MD5 (NVIDIA-FreeBSD-x86-185.18.36.tar.gz) = feff4da79a8c3a2f194f46c95c545adb
 SHA256 (NVIDIA-FreeBSD-x86-185.18.36.tar.gz) = 890b9543d3c81bccc72d60c653647a719c9037f8fc7a88144a18b2a012fbd4a7
 SIZE (NVIDIA-FreeBSD-x86-185.18.36.tar.gz) = 19245550
EOF
# patch distinfo < distinfo.new
# rm distinfo.new Makefile.new
# portinstall x11/nvidia-driver
# kldload nvidia


最後に、/etc/X11/xorg.confのDeviceセクションのDriverにnvidiaを指定すればおk
起動時に自動的にnvidiaドライバを読み込むようにするには/boot/loader.confにnvidia_load="YES"を追加しておく。

startxでちゃんと起動する事を確認できた。
/var/log/Xorg.0.logの中にバージョン番号の"195.22"を確認できた。
途中で、X起動中にCtrl+Alt+F1が効かないとかアンダースコアの入力ができないとかの不具合が出たけど、再起動したら直った。

おわり

*1:ちゃんと-retro付けたのに

*2:多分、Monitorセクションでの周波数の設定が無かったことが原因?

*3:xorg.confのInputDeviceセクションを有効にするにはOption "AutoAddDevices" "false"をServerFlagsセクションに追加すればいいらしい

*4:最初の仮想コンソールならF1