Source code

Revision control

Copy as Markdown

Other Tools

from typing import Any
from Cocoa import NSURL
from ColorSync import (
CGDisplayCreateUUIDFromDisplayID,
ColorSyncDeviceSetCustomProfiles,
kColorSyncDeviceDefaultProfileID,
kColorSyncDisplayDeviceClass,
)
from Quartz import (
CGGetOnlineDisplayList,
kCGErrorSuccess,
)
def set_all_displays(profile_url: NSURL) -> bool:
max_displays = 10
(err, display_ids, display_count) = CGGetOnlineDisplayList(max_displays, None, None)
if err != kCGErrorSuccess:
raise ValueError(err)
display_uuids = [CGDisplayCreateUUIDFromDisplayID(d) for d in display_ids]
for display_uuid in display_uuids:
profile_info = {kColorSyncDeviceDefaultProfileID: profile_url}
success = ColorSyncDeviceSetCustomProfiles(
kColorSyncDisplayDeviceClass,
display_uuid,
profile_info,
)
if not success:
raise Exception(f"failed to set profile on {display_uuid}")
return True
def run(venv: Any, **kwargs: Any) -> None:
srgb_profile_url = NSURL.fileURLWithPath_(
"/System/Library/ColorSync/Profiles/sRGB Profile.icc"
)
set_all_displays(srgb_profile_url)