The app is finished.
After running it automatically get the display data from the first display.
If you want to make a patch for the second, change the number above on 2 instead of 1 and press the set display data button.
If you have a second screen it will now get the required data.
Use DarwinDumper (2.7.6 or better) to get your EDID.
In DarwinDumper (2.9.1 or better) open EDID.bin, for older open the EDID.hex file with the open button.
Select the Apple Display type to emulate.
Press the Make button.
Now on your desktop you will get the following new files:
- A displayoverride for your display which is patched (probably don't want to use this).
- A EDID binary which is patched (handy for 2nd check with edie-decode).
- DisplayMergeNub.kext auto tailored for your config (probably want to install this).
EDIT: New version V1.1
- Modified driver creation to use the new DisplayMergeNub
- Fixed a bug to get 2nd / 3rd / etc display with button (caused crash)
- Added basic params override for display to be set as LCD
- Fixed Info.plist creation code
- Fixed OSBundleLibraries in Info.plist generation
- Fixed driver file copy bug in case of spaces in path
- Added Apple LED Cinema display data and option
- Added option for only EDID injection (unpatched)
- Added support for the display classes AppleDisplay and AppleBacklightDisplay (for some notebooks)
- Added IODisplayPrefs check in DisplayMergeNub.kext
- Added build target for DisplayMergeNub.kext
- Added IODisplayPrefs key in FixEDID for matching on that key
- Added optimization for multiple monitors (identical), now you can override each display, even on multiple GPU's individually
- Fixed a mistake in just edid override
- Added override for IODisplayPrefs (check/don't check)
- Added used display class for the selected monitor auto detection (AppleDisplay/AppleBacklightDisplay)
- Updated DisplayMergeNub.kext for handling boolean for IODisplayPrefs use or not
- Recompiled 32-bit kext binary for 10.5 and above
- Recompiled 64-bit kext binary for 10.6 and above
- Merged both binaries in one universal binary so the kext now works on 10.5 and better
- Added hex2int conversion in ObjC manner (thanks to
Marchrius for the hex2int routine)
- Changed code to only parse vendor and device once and then convert to int and set the decimal value
- So thanks to Marchrius setting the vendor and device values is a lot faster now
- Added version override to EDID V1.4 (fixes some issues)
- Added option for adding / fixing monitor ranges descriptor (missing in some EDID's but required by EDID V1.3 or V1.4)
- Option for adding / fixing monitor ranges is by default enabled but can be disabled by unchecking the checkbox
- Disabled checkbox for monitor range patch by default (patch can be enabled by clicking on the checkbox)
- Rewrote the routine for getting the IODisplayPrefs key and setting the vendor and device id in both decimal and hexadecimal (thanks to Marchrius for supplying the faster routine, I modified it slightly for multiple displays) it now gets the vendor and device id from the IODisplayPrefs key instead of running 2 tasks for getting them. It also is now NSTask and NSPipe based (thanks again to Marchrius). It really is about 4 times faster.
- Made override for monitor ranges more generic, it should now work on any display
- List with all the displays implemented from which you can choose (credits: Marchrius)
- Reads only once the displays unless refresh is clicked (credits: Marchrius)
- Faster setting of display data (credits: Marchrius)
- New UI (credits: Marchrius)
- Added display class override to kext
- Added display class override to app
=> This means you can make an AppleBacklightDisplay from an AppleDisplay and vice versa
- Added signed kext
- Added signed app (all now GateKeeper compliant)
- Added scaled resolutions adding for HiDPI support
- More bugfixes
- Added help function
- Added remove button for resolutions
- Added credits file
- Added color profile only patch
- Added adding / fixing monitor ranges on no patch and color profile only
- Added quick buttons for displays (click menu of display models, type 1 to 7)
- Added quick buttons for Display Class (click menu of class, type A or
- Added quick buttons for Display Override Class (click menu, type C or D)
* For using HiDPI resolutions, use RetinaDisplayMenu, attached below...
- Changed synthesized method to direct binding (enables building of 32+64 bit app and adds support for building for versions less than 10.7.X)
- Rebuilt FixEDID with a 32+64 bit universal app
- Added iMac Retina panel (iMac14,2)
- Added aspect ratio description after panel names (16:10 or 16:9)
- Bugfix related to fixing monitor ranges on "Only Inject EDID Unpatched" and "Only Patch Color Profile"
- Added MacBook Air panel (MacBookAir5,1)
- Added scaleable UI
- Added fullscreen app support
- Added aspect ratio detection based on first detailed descriptor of the EDID on open of the EDID binary (based on detailed resolution)
EDIT: 2.3.2 (2nd build)
- Fixed aspect ratio detection, there was a resolution issue and I reimplemented detection based on GCD value (greatest common divisor)
NOTE: For 32 bit and 64 bit kext it will need to be rebuilt using an older version of Xcode... Xcode 5.X's clang compiler won't build 32 bit kexts
If you have Monitor_Apple.kext or DisplayMergeNub.kext installed and which to patch, remove the kext in /S/L/E and caches, reboot, run DarwinDumper and then run the app, otherwise the display values will be wrong...
Enjoy and please give me feedback
Source is included
Github development repo: