Ubuntu: Problems booting up with no display device on Sony VAIO laptop with NVIDIA drivers

First of all, I’ve had great experience on several previous laptops loading the Ubuntu desktop with NVIDIA video drivers.  These drivers make the desktop experience on Linux much more pleasant to the eyes.  Ubuntu, particularly, makes it brain-dead simple to install the drivers without a hitch and upon a reboot, there’s the GNOME X environment with hardware 3D acceleration and in its full Compiz glory.

Recently, I became an owner of a Sony VAIO laptop and the changes in the latest NVIDIA Linux video drivers have been a near nightmare on the laptop. There is one significant problem that’s full of irony: simply detecting the LCD screen!  The NVIDIA drivers are unable to detect the LCD screen attached to the laptop and boots up to a blank screen with a warning saying that “No display device was found.”  However, if you connect an external monitor to the standard VGA port on the side of the laptop, you are able to get the 3D accelerated environment. Obviously, there’s no problems with the 310M video card, it’s just that the LCD screen isn’t being detected in the first place!

Using my Google ninja skills, I was able to piece together the necessary fixes which I list below:

The short story:

The Linux OS makes available inside /proc the Extended Display Identification Data (EDID) which describes the capabilities of the monitor to a video card. For whatever reasons, the NVIDIA Linux video drivers do not process the EDID automatically during the detection of Sony Vaio LCD screens.  This results in a blank screen with a warning “no display device found”, unless you happen to have an external monitor attached to the VGA port, in which case, the detection works fine.

In order to work around this, you need to explicitly tell NVIDIA driver the EDID data of the LCD screen and make the connection to the display.

So how to get the EDID data?

One way is to use SoftMCCS for Windows: http://www.entechtaiwan.com/lib/softmccs.shtm

Dump the data to lcd_edid.bin file and transfer it to your Ubuntu machine.

[There’s also the read-edid package for Linux that will allow you to run parse-edid on  /proc/acpi/video/NGFX/LCD/EDID but I didn’t try this.]

Modify the xorg.conf and include the path to the EDID binary file.

/etc/X11/xorg.conf
# nvidia-settings: X configuration file generated by nvidia-settings
# nvidia-settings: version 1.0 (buildd@yellow) Fri Apr 9 11:51:21 UTC 2010


Section "ServerLayout"
Identifier "Layout0"
Screen 0 "Screen0" 0 0
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
Option "Xinerama" "0"
EndSection


Section "Files"
EndSection


Section "InputDevice"
# generated from default
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/psaux"
Option "Emulate3Buttons" "no"
Option "ZAxisMapping" "4 5"
EndSection

Section “InputDevice”
# generated from default
Identifier “Keyboard0”
Driver “kbd”
EndSection

Section “Monitor”
# HorizSync source: edid, VertRefresh source: edid
Identifier “Monitor0”
VendorName “Unknown”
ModelName “Sony Nvidia Default Flat Panel”
HorizSync 54.0 – 55.4
VertRefresh 50.0 – 60.0
Option “DPMS”
EndSection

Section “Device”
Identifier “Device0”
Driver “nvidia”
VendorName “NVIDIA Corporation”
BoardName “GeForce 310M”
Option “ConnectedMonitor” “DFP-0”
Option “CustomEDID” “DFP-0:/etc/X11/lcd_edid.bin”

EndSection

Section "Screen"
Identifier "Screen0"
Device "Device0"
Monitor "Monitor0"
DefaultDepth 24
Option "TwinView" "0"
Option "TwinViewXineramaInfoOrder" "DFP-0"
Option "metamodes" "DFP-0: nvidia-auto-select +0+0"
SubSection "Display"
Depth 24
EndSubSection
EndSection

Of course, you probably would also like to use the VGA port and connect the external monitor for extra desktop real estate.  Here’s the revised xorg.conf:


# nvidia-settings: X configuration file generated by nvidia-settings
# nvidia-settings: version 1.0 (buildd@yellow) Fri Apr 9 11:51:21 UTC 2010


Section "ServerLayout"
Identifier "Layout0"
Screen 0 "Screen0" 0 0
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
Option "Xinerama" "0"
EndSection

Section “Files”
EndSection

Section “InputDevice”
# generated from default
Identifier “Mouse0”
Driver “mouse”
Option “Protocol” “auto”
Option “Device” “/dev/psaux”
Option “Emulate3Buttons” “no”
Option “ZAxisMapping” “4 5”
EndSection

Section “InputDevice”
# generated from default
Identifier “Keyboard0”
Driver “kbd”
EndSection

Section “Monitor”
# HorizSync source: xconfig, VertRefresh source: xconfig
Identifier “Monitor0”
VendorName “Unknown”
ModelName “CRT-0”
HorizSync 30.0 – 83.0
VertRefresh 56.0 – 75.0
Option “DPMS”
EndSection

Section “Device”
Identifier “Device0”
Driver “nvidia”
VendorName “NVIDIA Corporation”
BoardName “GeForce 310M”
Option “ConnectedMonitor” “DFP-0,, CRT”
Option “CustomEDID” “DFP-0:/etc/X11/lcd_edid.bin”
EndSection


Section "Screen"
Identifier "Screen0"
Device "Device0"
Monitor "Monitor0"
DefaultDepth 24
Option "TwinView" "1"
Option "TwinViewXineramaInfoOrder" "DFP-0"
Option "metamodes" "CRT: 1680x1050_60 +1600+0, DFP: nvidia-auto-select +0+0"
SubSection "Display"
Depth 24
EndSubSection
EndSection

Man, after all this work, I can say I feel sorry for Linux newbies who have to grit their teeth on Sony VAIO laptops. I’m hopeful that NVIDIA will take note and spruce things up on their end to make all this painlessly automatic.

This entry was posted in Linux. Bookmark the permalink.