インテルのオンボードグラフィックで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 を普通に使えるようになりました。 そのためのステップは、
- /etc/modprobe.d/i915-kms.conf を書き換える
- カーネルを 2.6.38 にアップグレードする
- xserver-xorg-video-intelの最新版を取ってくる
- /etc/X11/xorg.confを書き換える
- 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にアップグレードすることでフリーズはなくなりました。
展開した後、「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"
EndSectionSection "Monitor"
Identifier "Configured Monitor"
EndSectionSection "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と大幅に上がり、描画はかなり速くなりました。めでたしめでたし。