インテルのオンボードグラフィックでDebian squeezeのX Window Systemを動かす5つのステップ

<2011-03-23 水> 更新!本家から最新版を取ってくる必要があります。

先月、Debian GNU/Linux squeezeがリリースされました。 もちろん僕もアップグレードしました。

この話は、おそらくUbuntu ユーザにも関係があるかもしれません。

Debian GNU/Linux squeezeにアップグレードしたとき、一番困ったのがX Window Systemの設定でした。 インテルオンボードグラフィックでは xserver-xorg-video-intel というXサーバを使うのですが、これがフリーズするのです。 フリーズが解決したと思ったら、今度は描画速度がめちゃくちゃ遅いという。 特に端末の描画速度がやばいほど遅く、イライラしていました。

しょうがないから xserver-xorg-video-fbdev を使っていたのですが、今度はmplayerで -vo xv が使えず、動画の拡大再生が遅くなる問題が起きました。 解決策がわからないまま1ヶ月もの間もがき苦しんでいました。 特にカーネル2.6.38は3/15に出たばかりなので、それ以前では解決できなかったのかもしれません。*1

今、やっとの思いで xserver-xorg-video-intel を普通に使えるようになりました。 そのためのステップは、

  1. /etc/modprobe.d/i915-kms.conf を書き換える
  2. カーネルを 2.6.38 にアップグレードする
  3. xserver-xorg-video-intelの最新版を取ってくる
  4. /etc/X11/xorg.confを書き換える
  5. startxを実行する(xdmの人は実行しなくてもよい)*2

/etc/modprobe.d/i915-kms.confを書き換える

/etc/modprobe.d/i915-kms.confを以下のように書き換えます。 これでKMSが有効になります。 Linuxを立ち上げたときに、すでに解像度が広くなっていたら、設定済と思われます。


options i915 modeset=1

もしこの設定をしても解像度が広くならなければ、~/.bash_profileや~/.zprofileに以下の行を書き加えます。


sudo modprobe i915 modeset=1

カーネルを2.6.38にアップグレードする

僕の環境では、xserver-xorg-video-intelは、2.6.37までのカーネルだとフリーズしていました。 それが、2.6.38にアップグレードすることでフリーズはなくなりました。

The Linux Kernel Archives

展開した後、「make oldconfig」を実行すれば、現在の設定を引き継ぐことができます。 あのミラクルパッチも入っているので、アップグレードすると幸せになれます。 デフォルトではNoになっているので、Yesを選んでください。


CONFIG_SCHED_AUTOGROUP=y

具体的なコマンドはこんな感じです。


$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.tar.bz2; tar xjf linux-2.6.38.tar.bz2; cd linux-2.6.38
$ make oldconfig
$ sudo nice make-kpkg clean; sudo nice make-kpkg --initrd --revision=001 kernel_image kernel_headers
$ sudo dpkg -i ../linux-headers-2.6.38-rc7_001_i386.deb ../linux-image-2.6.38_001_i386.deb

xserver-xorg-video-intelの最新版を取ってくる

ここまででフリーズは解決しましたが、今度は描画速度の問題を解決します。 Debian squeezeの xserver-xorg-video-intel はDRIが無効になっています。 このせいで描画速度がガタ落ちなのです。

これは最新版 xserver-xorg-video-intel を本家から取ってコンパイルくることで解決します。 最新版では、たとえグラボが固まっても復帰してくれます。

コンパイルのためのヘッダファイルは一括して取ってこれます。

コンパイル後、squeezeにインストールされているファイルを強引に置き換えます。


$ sudo apt-get build-dep xserver-xorg-video-intel
$ wget http://cgit.freedesktop.org/xorg/driver/xf86-video-intel/snapshot/xf86-video-intel-2.14.901.tar.bz2
$ tar xjf xf86-video-intel-2.14.901.tar.bz2
$ cd xf86-video-intel-2.14.901
$ sh autogen.sh
$ make
$ cd src
$ sudo cp legacy/i810/xvmc/.libs/libI810XvMC.so.1.0.0 /usr/lib/libI810XvMC.so.1.0.0
$ sudo cp xvmc/.libs/libIntelXvMC.so.1.0.0 /usr/lib/libIntelXvMC.so.1.0.0
$ sudo cp .libs/intel_drv.so /usr/lib/xorg/modules/drivers/intel_drv.so

/etc/X11/xorg.confを書き換える

僕のxorg.confを貼り付けておきます。 この設定にしてから、まだ固まったことはありません。


Section "Device"
Identifier "Configured Video Device"
Driver "intel"
# これを入れないと固まる
Option "Shadow" "True"
EndSection

Section "Monitor"
Identifier "Configured Monitor"
EndSection

Section "Screen"
Identifier "Default Screen"
Monitor "Configured Monitor"
Device "Configured Video Device"
# 速度優先のため16bppにしている
DefaultDepth 16
SubSection "Display"
Depth 16
Modes "1920x1080"
EndSubSection
SubSection "Display"
Depth 24
Modes "1920x1080"
EndSubSection
SubSection "Display"
Depth 32
Modes "1920x1080"
EndSubSection
EndSection

DRIが有効になっているならば、以下のように表示されるはずです。 無効のときは「direct rendering: Failed」と出てきます。


$ grep 'direct render' /var/log/Xorg.0.log
(II) intel(0): direct rendering: DRI2 Enabled

その結果

xengineの値が8000→24000と大幅に上がり、描画はかなり速くなりました。めでたしめでたし。

*1:2.6.38rc7を試しましたが、OSそのものがフリーズする問題があり、使えませんでした。

*2:startxを実行している人は少数派?