SwitchResX and System Integrity Protection (SIP)

Before reading further, and if you require SwitchResX to work on macOS 10.11 or above, please be sure to use SwitchResX at least version 4.5.3. Any previous version will not work, even if you follow the steps indicated below.

macOS 10.11 « El Capitan » introduced a feature called « System Integrity Protection », aka « SIP ».
A lot has been said about this feature on several information media.
macOS 10.12 « Sierra » and later versions of macOS use the same mechanism.

One of the most widely used features in SwitchResX is the ability to define new custom resolutions to your monitor. For doing this, SwitchResX modifies a System file.
Beginning with El Capitan, System Integrity Protection does not allow SwitchResX to modify this file.

That means that if you want to use SwitchResX to add, modify, or create a new custom resolution, or a scaled Retina resolution, then you must temporarily disable System Integrity Protection before doing this.
Once the resolution has been created and activated, you can turn SIP on again.

One of the most widely used features in SwitchResX is the ability to define new custom resolutions to your monitor. For doing this, SwitchResX modifies a System file.

How to disable SIP
Disabling SIP requires booting into the recovery partition. You boot in recovery mode by pressing CMD + R when starting up your Mac.

Pasted Graphic 2

Then open a Terminal window

Pasted Graphic

and type the command below (don't type the "#" !).

# csrutil disable

that should confirm with the following message:

Successfully disabled System Integrity Protection. Please restart the machine for the changes to take effect.

Pasted Graphic 1

You can then reboot normally on your standard macOS system partition.  

To re-enable SIP, boot back into the recovery partition and set state to enabled:

# csrutil enable

Let me just repeat:
If you just use SwitchResX for any other feature and don’t plan to alter your list of resolutions, then you can leave System Integrity Protection turned on. SwitchResX should then work flawlessly.

If you however want to activate a custom resolution, you have to turn SIP off, the time the resolution has to be saved in the System. Then you can turn it on again, if you want.

Long story:
macOS has a built-in mechanism to override the behavior of badly designed monitors, to allow correcting bugs in monitors firmware, of to let them be detected correctly.
SwitchResX has used this mechanism to enhance the resolutions lists since years. This mechanism uses monitor profiles files, which overrides the standard hardware monitor detection.

These files are however System files, and thus are part of the System Integrity Protection beginning with El Capitan. That means that on El Capitan and above, no application, or no user can create such a file for a new monitor, or alter such a file to add a new missing resolution for an existing monitor, when SIP is active.

Don’t get me wrong: I think that any protection to macOS cannot do any harm.
But I personally think that these files, which are monitor profiles, should be alterable by the user, the owner of the monitor, whose only objective is to make his hardware (his Mac and his monitors) work the way it was designed.

Surely, macOS should include such profile files for monitors that Apple knows when the OS is released, and these files should be protected by SIP. But the end user should have the last word and should be able to enhance this choice for new monitors that Apple wasn’t aware of when they released the OS. An user shouldn’t rely on Apple being reactive enough to let him use his own hardware the way it should work.

I filed a bug report on Apple’s system when El Capitan first developer beta was released (rdar://21371773) to let an user define its own user defined monitor profile files, parallel to the system files that macOS integrates and manages, without altering macOS system files.

Until this problem is addressed, the only way will still be the way I describe above: temporally disable SIP the time SwitchResX changes the System file, then reactivate it.