Here is a basic walkthrough for anyone encountering this problem. I am currently using driver version 190.42. If a newer driver is available when you read this, try that first as the work around may no longer be necessary. This walkthrough assumes you are using a minimal xorg.conf, but can probably be easily adapted to a full xorg.conf.
For some reason, the current nvidia driver does not auto-detect that a display is attached to an internal digital port. Even if you force the driver to assume a display is attached, it is still unable to read the EDID information from the display. It is this information which tells the driver how to drive the display. Starting X yields just a blank screen. I encountered this problem on a Sony Vaio VPCCW with a GT230M card. I am running Archlinux.
The EDID information is detected fine in windows, so we can extract it from there. We then edit xorg.conf to tell the driver that a display is connected to DFP-0 (the internal port) and to use use the EDID we extracted intead of probing the monitor for it.
Please note: I am just a user and take no responsibility for any problems that may occur as a result of this workaround. Make sure you understand the purpose of each step and proceed at your own risk.
- Extract the EDID file from within windows. I used the program softMCCS which can be found here. Open the program and go to file -> Save EDID as. The filename you choose doesn't matter, but make sure use the binary (bin) format. Put this on a memory stick or use some other method to copy it to your linux filesystem.
- Boot into linux and put the EDID file in your /etx/X11 folder (it could actually go anywhere, but I found this to be convenient).
sudo mv /path/to/your/edid.bin /etc/X11/.
- Backup your current xorg.conf file (if you have one).
sudo mv xorg.conf xorg.conf_backup
- Create a new minimal xorg.conf file. Alternately, you can choose just to add to your existing one.
sudo touch /etc/X11/xorg.conf
- Edit xorg.conf and create a simple device section containing the following:
Replace "youredid.bin" with whatever you named your EDID file. The two Option lines are what does the trick. The first tells the driver you have a display connected on the internal DFP-0 port. The second tells it not to probe for an EDID, but rather to use the one you are providing.
VendorName "NVIDIA Corporation"
Option "ConnectedMonitor" "DFP-0"
Option "CustomEDID" "DFP-0:/etc/X11/youredid.bin"
- Restart X and you should see the NVIDIA logo flashing right at you.
When the driver is next updated, try commenting out the two option lines to see if the bug is fixed.