Monday, 25 June 2007

Dell D630 Graphics Fixed!

I built the Intel 3D driver following the excellent instructions on the Intel website here. I've had no trouble at all building the drivers on Fedora 7 - so if you are thinking about it, don't be put off. Having built and installed the drivers however, I still had no 3D functionality. beryl no longer whitescreened: it didn't do anything. The Intel instructions tell you to run glxinfo to check that direct rendering has been enabled. You should see something like this:

$ glxinfo grep direct
direct rendering: Yes

(grep is one of the wonders of the unix world. I can't believe Microsoft didn't clone it in the early days.) What I saw was "direct rendering: no"

One of my problems is that I'm having to learn Linux as I go along, and it takes me a while to find out about the basic stuff that I really should know about. Every time the X Window System starts up, it creates a a log file at /var/log/Xorg.0.log. This log file is packed with information, and tells you just about everything you need to know about what's happening with your graphics setup. For example:

(II) Loading /usr/lib/xorg/modules/drivers//intel_drv.so
(II) Module intel: vendor="X.Org Foundation"
compiled for 1.3.0, module version = 2.0.0

I wish I'd checked this before upgrading the 2D driver. I would love to know if version 2.0.0 is installed when you install Fedora 7. If you know, please leave a comment.

Looking through Xorg.0.log I saw the following entry:

drmOpenDevice: node name is /dev/dri/card0
drmOpenDevice: open result is -1, (No such device)

There are lots of questions on the Linux forums along the lines The directory /dev/dri exists, but there is no card0 device. How can I create it? The answer is that you don't: the X server creates it as needed. What allows the X server to create the card0 device is drm. My mistake was that I hadn't rebuilt drm along with the graphics drivers. I rebuilt drm (again following the Intel instructions) and then rebuilt the 3D graphics drivers just in case. After a reboot /dev/dri/card0 was present and glxinfo reported "direct rendering: Yes"

I started beryl. Still nothing. By starting beryl in a terminal window with the -d switch, I could see errors like this:

$ beryl-manager -d

[...]

Xlib: extension "XVideo" missing on display ":0.0".
xvinfo: No X-Video Extension on :0.0

[...]

Checking for XSync extension : failed

No sync extension
beryl: No sync extension
Xlib: extension "SHAPE" missing on display ":0.0".

The X library "extensions" are loaded via libextmod.so, which was present on the system, so what was going on? The solution was simple (once I knew what it was.) All I had to do was to explicitly tell the X Windows System to load the module by adding Load "extmod" to the "Module" section of the /etc/X11/xorg.conf file:

Section "Module"
Load "glx"
Load "dri"
Load "extmod"
EndSection

That was it - job done! After a restart everything worked and beryl was back. I'm still struggling with the D630 screen. It is not as clear as when the same machine was running Vista, but that is only part of the problem. This a 1440x900 resolution screen that is physically only 30cm x 19cm in size; 14.1" wide aspect. My 19" desktop monitor runs at 1280x1024. Even on Vista most people would want to use larger scale 120dpi fonts. It requires a lot of fine tuning.

2 comments:

Gideon said...

I just want to say thank you for your detailed description of installing Fedora 7 on D630. I got some problems on the display driver, but after I recompiled the drivers from the intellinuxgraphics it's crystal clear now.

I just wonder, you figured out the blurry problem yet? I was confused at the install paths, so I need to locate all the newly compiled .ko and .so, and then copied them to the right location. After that's done, display is perfect now.

Ghassan said...

David,
I'm having lots of pblms configuring the video on a D630 under RHEL5, I could not get the git to build the driver for the intel graphics card. Can you please email it to me (hoping that yours will work under RHEL5)?

Thanks in advance