Jump to content

Fixing Scrambled,Stretched, or Wrong Resolution Laptop Display Problems


CharredPC
 Share

123 posts in this topic

Recommended Posts

I could never get my osx screen work (all scrambled) so I have to follow Method B. Method B asked me to go to step 6 of Method A which then told me to view the osx using a second computer by vnc but I could not even switch on screen sharing on my osx because of the scrambled screen, so how could I use vnc?

 

I am posting this because the "screen never worked" method seems to need a "screen that worked" condition to "work".

 

My computer has a dual boot (windows 7 and osx).

 

I have tried using an external monitor but the screen just gets stretched and I could never find the icon of system preferences.

 

Please help.

 

And thank you for your guide.

Link to comment
Share on other sites

  • 1 month later...

Hi,

 

Great tutorial. I followed method A, and it almost works. Without overriding my monitor only had 640x480, but after overriding I noticed that all resolutions higher than 1920x1200 are still not available under System Preferences -> Display. I use dual-link DVI to access the monitor, which can handle up to 2500x1600 (recommended resolution).

 

Any idea how to enable the higher resolutions? Are there some extra plist attributes for this?

 

Kind regards,

 

Bram Adams

 

PS: To avoid the hassle with making the terminal window wider, try "ioreg -w 0 -l > ioreg.txt". The -w flag disables the $ signs in the output, and the redirection makes it easier to search for strings in a text editor.

Link to comment
Share on other sites

 

 

Hi,
To avoid the hassle with making the terminal window wider, try "ioreg -w 0 -l > ioreg.txt". The -w flag disables the $ signs in the output, and the redirection makes it easier to search for strings in a text editor.


Good tip about avoiding the truncating $!

Do you know if your videocard / driver can output resolutions that high? Even if your display is capable, it's only half of the equation. The videocard still needs to be able to drive it.

Glad this guide helped a bit.
Link to comment
Share on other sites

Hi CharredPC,

 

Nice guide. I'm experimenting my Dell Studio with your workaround. Do you know how I can obtain vendor ID for my internal LCD monitor? Since the LCD monitor is not detected, I can't get the vendor ID from the ioreg. I tried with Everest & MonInfo but the only thing I can get is the device ID (DisplayProductID).

 

Thank you. ;)

Link to comment
Share on other sites

Hi CharredPC,

 

Nice guide. I'm experimenting my Dell Studio with your workaround. Do you know how I can obtain vendor ID for my internal LCD monitor? Since the LCD monitor is not detected, I can't get the vendor ID from the ioreg. I tried with Everest & MonInfo but the only thing I can get is the device ID (DisplayProductID).

 

Thank you. ;)

 

Is the LCD monitor not detected at all, or detected incorrectly? If the actual hardware isn't being seen/used (no DisplayVendorID at all listed in ioreg), I'm not sure if this fix will work. I'd be happy to look at your ioreg output if it would be helpful :P

Link to comment
Share on other sites

Is the LCD monitor not detected at all, or detected incorrectly? If the actual hardware isn't being seen/used (no DisplayVendorID at all listed in ioreg), I'm not sure if this fix will work. I'd be happy to look at your ioreg output if it would be helpful :)

Its not detected at all when the vanilla driver loaded. I'm not hopping anything but just want to experiment. I already collect all information needed except the vendor ID. Thanks anyway. :(

Link to comment
Share on other sites

Its not detected at all when the vanilla driver loaded. I'm not hopping anything but just want to experiment. I already collect all information needed except the vendor ID. Thanks anyway. :angel:

 

If the display hardware itself isn't being detected, I don't think this fix will work. We have to be able to reference it somehow, even if it's just by using the default 'generic' override (used when the EDID isn't picked up) of /System/Library/Displays/Overrides/DisplayVendorID-756e6b6e/DisplayProductID-717. If no screen is found, then it won't look for or use any specific override. Does that make sense?

 

Think of the overrride as a driver. To make the driver load, we have to make sure it matches the hardware somehow. So if the hardware isn't being detected at all by OSX, then there's no real way to get the driver (or override) to 'catch.'

 

Unless by "not being detected," you just mean that the display doesn't turn on / isn't being used. In that case, it might be in fact outputting, but at very wrong settings, and the default /System/Library/Displays/Overrides/DisplayVendorID-756e6b6e/DisplayProductID-717 location could be seeded with the full EDID. But this is just speculation without knowing more details about your specific setup :)

Link to comment
Share on other sites

If the display hardware itself isn't being detected, I don't think this fix will work. We have to be able to reference it somehow, even if it's just by using the default 'generic' override (used when the EDID isn't picked up) of /System/Library/Displays/Overrides/DisplayVendorID-756e6b6e/DisplayProductID-717. If no screen is found, then it won't look for or use any specific override. Does that make sense?

 

Think of the overrride as a driver. To make the driver load, we have to make sure it matches the hardware somehow. So if the hardware isn't being detected at all by OSX, then there's no real way to get the driver (or override) to 'catch.'

You can take my word for it when I said the internal LCD isn't detected. Sorry, I don't want to "think" it doesn't work but I want to test it myself before making any conclusion.

 

Without the vanilla driver loaded (I'm intentionally removed the driver) & with RadeonHD.kext, I can get the override working with generic vendor & product ID but only with external monitor; correct resolution & without QE/CI. I can see "Internal LCD Forced EDID" in System Profiler. Display at the internal LCD is bad; object displayed is not clear. However, EDID is not appear in ioreg since the RadeonHD.kext is not providing hardware acceleration support. I can get the same result without the override.

 

With the vanilla driver loaded, both internal & external monitor are not detected. Just blank screen. Even ioreg is not listing any connected monitor. :)

Link to comment
Share on other sites

  • 2 weeks later...

I'm a bit puzzled here. Perhaps someone could shed some light.

 

The tutorial seems straightforward, and I was able to do whatever was necessary except for one significant detail. The windows software provides us with an .rtf file. It hardly has any hex values in it to be used, let alone some cryptic encoded code.

 

Hope you guys can help, here's what I get as an output of the EDID:

 

Vendor/Product Identification: 
  Monitor Name :  DELL 2209WA

  Monitor Serial Number :  H735H02318TL

  Manufacturer Name :  Dell Computer Corp.

  Product Id :  F011

  Serial Number :  825775180

  Week Of Manufacture :  6

  Year Of Manufacture :  2010

  EDIDVersion :  V1.3

  Number Of Extension Flag :  0 

Display parameters: 
  Video Input Definition :  Digital Signal

  DFP1X Compatible Interface :  False

  Max Horizontal Image Size :  470 mm

  Max Vertical Image Size :  300 mm 

Power Management and Features: 
  Standby :  Not Supported

  Suspend :  Not Supported

  ActiveOff :  Supported

  Video Input :  1

  sRGB Default ColorSpace :  True

  Default GTF :  Not Supported

  Prefered Timing Mode :  True 

Gamma/Color and Etablished Timings: 

  Display Gamma :  2.2

  Red :  x = .64 - y = .33

  Green :  x = .3 - y = .6

  Blue :  x = .15 - y = .06

  White :  x = .313 - y = .329 

  Etablished Timings :  

		800 x 600 @ 60Hz (VESA)

		640 x 480 @ 75Hz (VESA)

		640 x 480 @ 60Hz (IBM, VGA)

		720 x 400 @ 70Hz (IBM, VGA)

		1280 x 1024 @ 75Hz (VESA)

		1024 x 768 @ 75Hz (VESA)

		1024 x 768 @ 60Hz (VESA)

		800 x 600 @ 75Hz (VESA) 
  Display Type :  RGB Color Display 

Standard Timing: 


  Standard Timings n° 1

  X Resolution :  1152

  Y Resolution :  864

  Vertical Frequency :  75 

  Standard Timings n° 2

  X Resolution :  1280

  Y Resolution :  1024

  Vertical Frequency :  60 

Preferred Detailed Timing: 
  Pixel Clock :  146.25 Mhz 

  Horizontal Active :  1680 pixels

  Horizontal Blanking :  560 pixels

  Horizontal Sync Offset :  104 pixels

  Horizontal Sync Pulse Width :  176 pixels

  Horizontal Border :  0 pixels

  Horizontal Size :  474 mm 

  Vertical Active :  1050 lines

  Vertical Blanking :  39 lines

  Vertical Sync Offset :  3 lines

  Vertical Sync Pulse Width :  6 lines

  Vertical Border :  0 lines

  Vertical Size :  552 mm 

  Input Type :  Digital Separate

  Interlaced :  False

  VerticalPolarity :  True

  HorizontalPolarity :  False 

Monitor Range Limit: 
  Maximum Vertical Frequency :  75 Hz

  Minimum Vertical Frequency :  56 Hz

  Maximum Horizontal Frequency :  83 KHz

  Minimum Horizontal Frequency :  30 KHz

  Maximum Pixel Clock :  160 MHz 

Stereo Display: 
  Stereo Display :  Normal display (no stereo)

 

I hope you guys have any idea how to convert the above, into something like:

 

<key>IODisplayEDID</key>

<data>

AP///////wA4o3ukAAAAABwKAQOAXDR4KADloFonuiUXQk6vzgCBgEvAAQEBAQEBAQEB

AQEBLw1Q8DDgJRAQcGgAmAYyAAAe1gmAoCDgLRAPYGIAswYiAAAYAAAA/ABQWC00MlZN

CiAgICAgAAAA/AAKICAgICAgICAgICAgAHA=

</data>

 

Thanks in advance,

Guy.

Link to comment
Share on other sites

Hi GGuyZ, you can use MonInfo application instead to obtain the EDID value. If you're using MonInfo, the "Raw data" is EDID value. You will get something like this (in one line):-

00,FF,FF,FF,FF,FF,FF,00,25,CC,0A,00,00,00,00,00,00,13,01,03,90,22,13,78,0A,C8,85,9E,57,54,9B,26,12,50,54,00,00,00,01,01,01,01,01,01,01,01,01,01,01,01,01,01,
01,01,36,1A,56,44,50,00,0D,30,11,0C,32,00,58,C2,10,00,00,1A,36,1A,56,44,50,00,0D,30,11,0C,32,00,58,C2,10,00,00,1A,00,00,00,FE,00,31,47,35,44,33,81,31,35,36,
47,57,30,31,00,00,00,00,00,00,00,00,00,00,00,00,00,01,01,0A,20,20,00,F2

Remove the comma character (,) & you will get this (EDID in HEX - in one line):-

00FFFFFFFFFFFF0025CC0A000000000000130103902213780AC8859E57549B2612505400000001010101010101010101010101010101361A564450000D30110C32
0058C21000001A361A564450000D30110C320058C21000001A000000FE00314735443381313536475730310000000000000000000000000001010A202000F2

Use PlistEdit Pro application in Mac to edit the .PLIST file. You will see two section when you open the .plist file. Add & paste the EDID (in HEX) value at the upper section. It will automatically convert the EDID value from hexadecimal to Base 64 encoded data at lower section, like this:-

AP///////wAlzAoAAAAAAAATAQOQIhN4CsiFnldUmyYSUFQAAAABAQEBAQEBAQEBAQEBAQEBNhpWRFAADTARDDIAWMIQAAAaNhpWRFAADTARDDIAWMIQAAAaAAAA/gAxRzVEM4ExNTZHVzAxAAAAAAAAAAAAAAAAAAEBCiAgAPI=

Save & exit. You done!

 

You might interested with these online tools:-

Convert Base 64 Encoded Data to ASCII text

Data Converter Tool - Just need to set at "Decode" section to HEX & "Output Encode" to BASE64, if you want to convert from HEX to BASE64.

Link to comment
Share on other sites

Thanks!

 

I wasn't aware the bottom section was using a base64 convention, and that the upper row is the hex interpretation. Anyway, that helped a lot and I was able to follow the tutorial and get the overrided 'Forced LCD' to use the real EDID.

 

However, and here's the strange part, it doesn't seem to help one bit. After doing this, I tried exporting the EDID with SwitchResX and got the real complete EDID of my screen. So it 'should be working'. Nevertheless, I'm stuck on 1400x1050 resolution (this is a desktop with an 1680x1050 monitor and the EDID verifies this).

 

I tried forcing resolutions using "Graphics Mode" kernel flag, and also tried creating custom resolution using SwitchResX. They are simply not accepted!

 

When I tried switching graphic cards, from an x1800 ati to nvidia's 6600gt, I got my screen (DELL 2209wa) identified on the spot, with all resolutions and no tweaking. However, no QE/CI are available there.

 

So I wonder, what could be the culprit? Why can't I force resolutions even with the EDID, and why doesn't ATI + SL like my monitor? :)

Link to comment
Share on other sites

However, and here's the strange part, it doesn't seem to help one bit. After doing this, I tried exporting the EDID with SwitchResX and got the real complete EDID of my screen. So it 'should be working'. Nevertheless, I'm stuck on 1400x1050 resolution (this is a desktop with an 1680x1050 monitor and the EDID verifies this).

 

I tried forcing resolutions using "Graphics Mode" kernel flag, and also tried creating custom resolution using SwitchResX. They are simply not accepted!

 

When I tried switching graphic cards, from an x1800 ati to nvidia's 6600gt, I got my screen (DELL 2209wa) identified on the spot, with all resolutions and no tweaking. However, no QE/CI are available there.

 

So I wonder, what could be the culprit? Why can't I force resolutions even with the EDID, and why doesn't ATI + SL like my monitor? :)

At least OS X have to recognized your GPU first before it can recognized your monitor. This is important in order for OS X to pickup correct vendor & device ID of your monitor which are important for display override to work. I don't think X1800 will work though. You have better chances with 6600GT. I bet you can get QE & CI working with it. Have you try boot with GraphicsEnabler=Yes flag with either X1800 or 6600GT? Can you post here ioreg dump using IORegistryExplorer with the 6600GT? I want to take a look. Maybe we can experiment the display override with X1800, if your monitor vendor & device ID is detected by your 6600GT.

Link to comment
Share on other sites

First, thanks a lot for the assistance. This has been bothering me for a few days now.

 

I gathered the information your requested and some more. Feel free to go over it or skip it. I'm also attaching the ioreg dumps.

Here's a sum up of the x1800 GTO:

 

As you can see, ATIRadeonX1000.kext is loaded, which is why I have QE/CI enabled. ATIFramebuffer is NOT loaded for some reason, which as far as I know is in charge of the resolution. I can load it with kextload just fine, but it doesn't seem to make a difference:

bash-3.2# kextstat | grep ATI
  58	0 0xffffff7f808b8000 0x30000	0x30000	com.apple.kext.ATISupport (6.1.0) <57 9 8 7 5 4 3 1>
  67	0 0xffffff7f8095e000 0x61000	0x61000	com.apple.ATIRadeonX1000 (6.1.0) <66 57 9 7 6 5 4 3 1>

bash-3.2# kextload -v /System/Library/Extensions/ATIFramebuffer.kext
Requesting load of /System/Library/Extensions/ATIFramebuffer.kext.
/System/Library/Extensions/ATIFramebuffer.kext loaded successfully (or already loaded).
bash-3.2# kextstat | grep ATI
  58	1 0xffffff7f808b8000 0x30000	0x30000	com.apple.kext.ATISupport (6.1.0) <57 9 8 7 5 4 3 1>
  67	0 0xffffff7f8095e000 0x61000	0x61000	com.apple.ATIRadeonX1000 (6.1.0) <66 57 9 7 6 5 4 3 1>
  89	0 0xffffff7f809e3000 0x13000	0x13000	com.apple.kext.ATIFramebuffer (6.1.0) <58 57 9 8 7 5 4 3 1>
bash-3.2#

 

Here's the information from the System Profiler:

ATI Radeon X1800XL:

 Chipset Model:	ATI Radeon X1800XL
 Type:	GPU
 Bus:	PCIe
 Slot:	Slot-1
 PCIe Lane Width:	x16
 VRAM (Total):	256 MB
 Vendor:	ATI (0x1002)
 Device ID:	0x710a
 Revision ID:	0x0000
 ROM Revision:	113-B7710C-176
 EFI Driver Version:	01.00.318
 Displays:
SwitchResX4 - Internal LCD Forced EDID:
 Resolution:	1400 x 1050
 Pixel Depth:	32-Bit Color (ARGB8888)
 Main Display:	Yes
 Mirror:	Off
 Online:	Yes
Display Connector:

 

Now, with the 6600GT I don't get QE/CI at all. But the screen is identified flawlessly. EDID, all resolutions and everything. here's the information from the System Profiler:

GeForce 6600 GT:

 Chipset Model:	GeForce 6600 GT
 Type:	GPU
 Bus:	PCIe
 Slot:	Slot-1
 PCIe Lane Width:	x16
 VRAM (Total):	128 MB
 Vendor:	NVIDIA (0x10de)
 Device ID:	0x0140
 Revision ID:	0x00a2
 ROM Revision:	xx.xx.xx - internal
 Displays:
Display Connector:
 Status:	No Display Connected
Display:
 Resolution:	1680 x 1050 @ 60 Hz
 Pixel Depth:	32-Bit Color (ARGB8888)
 Main Display:	Yes
 Mirror:	Off
 Online:	Yes
 Rotation:	Supported

 

Loaded kexts: NVDANV40Hal, NVDANV50Hal, NVDAResman.

 

But no QE/CI :thumbsdown_anim:.

 

Hope you could help. I tried all kinds of injectors and they didn't work I'm afraid. Running SL 10.6.4 Vanilla.

 

P.S: I tried GraphicsEnabler=Yes on both cards. It didn't make any difference.

ioregdumps.zip

Link to comment
Share on other sites

Hi GGuyZ,

 

Thanks to your 6600GT, it able to correctly recognized your monitor. I use the DisplayVendorID, DisplayProductID & EDID, detected by your 6600GT, to create the display override PLIST file. I hope it will help your X1800 GTO to properly recognized the monitor. Copy the display override PLIST file, the DisplayVendorID-10ac folder, to /System/Library/Displays/Overrides/ folder. Fix the file permissions if necessary & reboot for the changes to take effect. If it loaded, you should see LCD Monitor Forced EDID under Displays (Graphics/Displays section) in System Profiler. Please let me know whether it is working or not.

http://www.mediafire.com/?tdylsjrtlr988gr

Link to comment
Share on other sites

  • 4 weeks later...

Dear friends,

Someone pointed me to this post regarding an issue I'm currently facing with my (almost) fully working Samsung N130 hackintosh.

 

Here is the issue: the system seems not to be able to "remember" the brightness/backlight level between two reboots. At each boot, the brightness is set back to the maximum. I do not have _any_ sort of problem with the display beside that brightness problem.

 

Not sure if this display override technique could help, to me it seems that the system is able to read the IODisplayEDID as expected, and in the pref pane, my netbook display is identified as "BT101IW03V1". If I understand well even if I create an override file it won't be read, is it right ?

 

Any idea ?

Link to comment
Share on other sites

  • 1 month later...

So I did what you said in the tutorial but just after rebooting it hangs up on apple logo loading screen. My problem is after installing a Nvidia enabler it cant read the display EDID wich is a common case of my G210m nvidia card, so for now I just followed the tutorial but I havent installed the enabler, should I need to install the enabler to make the tutorial work?

Link to comment
Share on other sites

  • 2 weeks later...

Thank you for the excellent guide :( I've got an override made that does get picked up for my internal display -- at least I'm pretty sure it gets used, because I can see the DisplayProductID specified in the Override when I look at the monitors under "Displays" in System Preferences.

 

With that said, I am still getting the scrambled images, the many-colored vertical lines. I'm able to use an external monitor through the laptop's VGA port just fine (that's how I got the EDID/edited the Override!) but cannot use the internal display, regardless of it being my primary display or not.

 

Anyone/CharredPC, do you have any alternatives to try if using an Override doesn't seem to do it? This one post from a user using the same display as a replacement on a MBP is disheartening, but I'm here to see if maybe I've missed something ;)

I'm running an hp dv9500t with an Intel x3100 graphics unit. The internal display's "model number" is LP171WE2-TL03, its product id is 0x1289 and its vendor id is 0x320c if that's any help.

 

Thanks in advance for any help you all may have!

Link to comment
Share on other sites

  • 1 month later...
7. Run ioreg -l in Terminal again. If you cannot find IODisplayEDID, or it has a different value, then we're on the right track! This time, locate the DisplayProductID, DisplayVendorID, and IODisplayPrefsKey values. That last one should end in something like AppleBacklightDisplay-756e6b6e-717. Take note of all these. Leave this Terminal window open, so you can grab these values as needed as we continue.

People might consider to add:

	"AAPL,alias-policy", 
Buffer (0x04)
{
	0x00, 0x00, 0x00, 0x00
},

To the _DTM method in their DSDT because that will give you a nice short alias. Something like:

Alias:0/AppleBacklightDisplay-6af-39e

instead of this ugly long counterpart:

IOService:/AppleACPIPlatformExpert/PCI0@0/
AppleACPIPCI/GFX0@2/AppleIntelFramebuffer/
display0/AppleDisplay-6af-39e

Which is what Apple is using. I mean the short one of course.

 

p.s. Using 0x01 for the first byte will change the alias number from Alias0: into Alias1:

Link to comment
Share on other sites

This is a very good post!!!

 

To contribute, I've made a script to save ioreg output automatically at login. To install it, follow the next steps (taken from http://support.apple.com/kb/Ht2420):

 

  1. Open Terminal (Applications/Utilities).
  2. In the Terminal window, type:
     
    sudo defaults write com.apple.loginwindow LoginHook /path/to/script
     
    (where /path/to/script is the full path to the script that we want to execute at login).
  3. Type your password at the prompt, then press Return.

After reboot with wrong display, the output will be saved in your root folder. You should copy it to another location to prevent to be overwriten in the next boot.

 

You can uninstall the script this way (in terminal):

 

sudo defaults delete com.apple.loginwindow LoginHook

ioreglist.sh.zip

Link to comment
Share on other sites

  • 4 months later...

CharredPC can you help me

 

i have a blackscreen after the applebootlogo but i managed to look up information about settings via teamviewer

 

as i thought there is no support about my internal lcd. do you know how to add manual support via edid

 

here are 2 pictures

40824713.jpg

68038577.jpg

 

i hope you can help me

Link to comment
Share on other sites

  • 5 weeks later...

Hi there,

 

thanks for your time and efforts to sort the EDID issues out - I have a 5650 and I've tried to create the overide exactly as you suggested, but it's not getting picked up. The system recognises my card no problem and if I plug an external vga monitor in it's fine ( using boot flag AtiConfig=Eulemur ) with full QE/CI - but the laptop screen is just black - but with the backlight on.

 

If I check with SwitchresX the Forced Internal EDID isn't loading at all.

 

Not sure where to go from here - any ideas?

 

Thanks

Jim

 

HP DV7T

Ati Mobility Radeon HD 5650

  • Like 1
Link to comment
Share on other sites

  • 3 weeks later...

I'm still blank screen (external monitor works fine, QE/CI don't work). Sony VAIO EB1S1R/WI i5-430m + HD5650

My edid:

00FFFFFFFFFFFF004DD9FA05000000000413010380221378F2CE

50A3574C99260F5054000000010101010101010101010101010

10101201C56AE50000C301D3A240054BE100000008C1756A05

00016301A35370054BE100000000000000000000000000000000

000000000000000000000000000000000000000000000000081

 

Make me a file please, maybe I'm doing something wrong

Link to comment
Share on other sites

I got the EDID using windows but then I lose your instructions where you say go back to 6. What do I paste, what do I change? Is it the raw data? Can you make your instructions for a dummy? The program you linked us to can save in RTF and edd format. What do I paste from the RTF.

 

Thanks, Bob

Link to comment
Share on other sites

  • 1 month later...

Successfully inserted new EDID, extracted on Windows, for my VAIO screen. But didn't see native resolution 1366x768, only 1360x768.

What else I can do for fixing resolution issue? Can we modify display profile, add to it my custom resolution?

 

When I used SwitchResX, 1366x768 worked ok.

 

I also tried to using SwithResx profile, modify it with my EDID, but also have only 1360x768.

 

And second question, I have gradient visible issue on my internal screen, seems its problem in LUT recognition. I tried to fix it by using native OSX color manager but wonder didnt happen, i see gradients with steps. On windows 7 i didnt have such issue, of course.

 

Any suggestions?

Link to comment
Share on other sites

 Share

×
×
  • Create New...