MacOS 외부모니터 연결 시 색상 문제(보라색화면?) 해결방법 / Display Profile RGB 모드 강제 설정

최근에 모니터를 바꿨습니다 😍 다만 사용하던 중 특정 맥북에서 연결 시 화면이 무조건 보라색으로 보이는 현상이 있었고, 구글링해서 얻은 정보 토대로 고쳤던 내용 간략하게 정리합니다. (나중에 또 이럴수도 있으니)

솔직히 왜 그 맥북안 이런 현상이 있는지는 잘 모르겠네요. (같은 맥북 프로에 똑같은 OS 버전인데…. 생산년도를 타는건가)

TL;DR

1) Display mode 패치 2) 리부팅

Oneline script

wget https://gist.githubusercontent.com/adaugherity/7435890/raw/00ff3ead17ae77d2f1c376e90831c037b7dea7ed/patch-edid.rb
ruby patch-edid.rb
sudo cp -r DisplayVendorID* /System/Library/Displays/Contents/Resources/Overrides/
echo 'please reboot :D'

원인

검색해보면 충분히 많이 나오는 내용입니다. MacOS에서 외장 디스플레이 연결 시 특정 모니터들을 TV로 인식한다고 합니다. 그러다보니 당연히 색상이나 이런 설정 부분들이 달라지게 되고 결과적으로 색감이나 동작에 문제가 생기는거죠. MacOS가 해당 모니터를 사용할 때 TV가 아닌 일반 모니터의 설정정보를 적용할 수 있도록 강제로 프로파일을 RGB 모드로 변경하여 해결할 수 있습니다.

잠깐 봤는데도 눈이 나갈지경.. 😱

Display mode 패치

강제로 RGB Profile을 사용하도록 하기 위해선 MacOS 내 Display Profile을 수정해야합니다. 다만 능력자분이 간단하게 스크립트로 만들어두어 쉽게 모니터 종류에 따라 변경이 가능합니다.

wget https://gist.githubusercontent.com/adaugherity/7435890/raw/00ff3ead17ae77d2f1c376e90831c037b7dea7ed/patch-edid.rb

https://gist.github.com/adaugherity/7435890

루비로 만들어진 코드이며 실행해주면 디스플레이 종류에 따라 프로필 데이터를 생성해줍니다.

ruby patch-edid.rb

이를 /Library/Displays/Contents/Resources/Overrides 디렉토리로 넣어주어 디스플레이 설정을 덮어줍니다.

sudo cp -r /Users/hahwul/DisplayVendorID-25ce /Library/Displays/Contents/Resources/Overrides

(Deprecated) Big Sur 이전

⚠️ 빅서 이후 버전에선 권한 이슈로 csrutil disable 이후에도 mount가 불가능합니다. 그래서 Big Sur 이전/이후 버전으로 아래 내용을 나누어 두었습니다. 자세한 내용은 @hojyh1 님이 달아주신 댓글 또는 https://developer.apple.com/forums/thread/649832 참고 부탁드려요.

참고 차 기존 글 내용은 남겨놓겠습니다.

root 권한 사용을 위해 SIP 해제

SIP(System Integrity Protection)는 애플에서 MacOS 보호를 위해 만든 보안 기능입니다. 10.11 El Capitan 부터 생긴 기능이며, 여러가지 보호 기법 중 일부 중요 시스템 파일에 대한 보안 대책으로 특정 디렉토리는 root 권한이 있더라도 추가/변경/삭제할 수 없도록 바뀐거지요. 그래서 해당 디렉토리들을 수정하기 위해선 복구모드로 진입 후 SIP를 해제한 후 맥을 사용해야 가능합니다.

부팅 시 cmd+R 을 꾹 눌러주어 복구모드 진입 > 우측 상단 유틸리티 눌러서 터미널 열어줍니다.

csrutil disable

Display mode 패치

우선 시스텝 디렉토리에 파일을 쓰기 위해선 write 권한이 포함되도록 리마운트가 필요합니다. (기본적으로 read-only라서 해당 과정없이 진행하시면 나중에 에러가 발생합니다. 물론 그때하셔도 늦진 않습니다)

sudo mount -uw /

이후 코드를 받아줍니다.

wget https://gist.githubusercontent.com/adaugherity/7435890/raw/00ff3ead17ae77d2f1c376e90831c037b7dea7ed/patch-edid.rb

https://gist.github.com/adaugherity/7435890

루비로 만들어진 코드이며 실행해주면 디스플레이 종류에 따라 프로필 데이터를 생성해줍니다.

ruby patch-edid.rb

이를 /System/Library/Displays/Contents/Resources/Overrides 디렉토리로 넣어주어 디스플레이 설정을 덮어줍니다.

sudo cp -r /Users/hahwul/DisplayVendorID-25ce /System/Library/Displays/Contents/Resources/Overrides

자 이제 모든 과정은 끝났습니다. 재 부팅 해주시면 됩니다!

이후 SIP 재설정

SIP는 MacOS에서 보안적인 문제가 생겼을 때 한번 막아줄 수 있는 완충제 역할을 합니다. 되도록 활성화하고 사용하시는게 좋습니다. (보통 MacOS의 시스템 디렉토리를 건드릴일은 많이 없겠죠 뭐..)

MacOS Sierra 버전 기준으로 해당 버전 미만(El Capitan 아래)는 무조건 복구모드로 재 진입하셔서 풀어주셔야합니다. 맨 위에 해제 했던 것과 동일하게 접근 후 csrutil 로 clear or enable 로 옵션을 넣어주시면 됩니다.

csrutil clear

or

csrutil enable

Sierra 버전 이후부턴 복구모드 없이 설정은 가능하도록 변경이 되었습니다. 아래 경로의 csrutil 바이너리를 실행해주시고 위와 동일하게 옵션을 주시면 됩니다.

sudo /usr/bin/csrutil clear

or

sudo /usr/bin/csrutil enable