Mac 외장모니터 위치가 제멋대로 바뀔 때

chan.park·2023년 4월 25일
6
post-thumbnail

세 줄 요약

  1. displayplacer 쓰기
  2. 모니터 같으면 설정 유지 안되니 Automator로 새로운 모드 만들어두기
  3. 위치 바뀌었을 때 다른 모드 적용해보기

요구사항

Homebrew 설치됨

예상 소요 시간

10분 내외


개요

회사에서 맥북에 같은 모델 모니터 두 개 붙여서 데스크 셋업 해놓은 상태인데, 회의 때문에 모니터가 연결된 허브 선을 다시 연결하거나 재시동 하고 나면 모니터 좌우가 바뀌는 현상을 적잖게 경험한다.

매번 시스템 설정 - 디스플레이 - 정렬에서 매번 다시 설정하자니 번거롭고 귀찮다.

displayplacer

https://github.com/jakehilborn/displayplacer

displayplacer 라는 command line 유틸리티가 개발되어 있다.
접속해보면 사용 방법이 친절하게 안내되어 있지만, 간단하니까 아래에 기록해두자.

# 설치
$ brew tap jakehilborn/jakehilborn && brew install displayplacer

# 실행
$ displayplacer list

# 결과

... 전략 (현재 연결된 디스플레이들이 사용할 수 있는 옵션 목록)

displayplacer "id:[기기 ID] res:[해상도] hz:[주파수] color_depth:[색심도] scaling:[확대 옵션 활성화] origin:[위치] degree:[회전 각도]" "id: ..." "id: ..."

displayplacer list 명령어는 현재 연결된 디스플레이들이 사용할 수 있는 옵션 목록과 현재 사용 중인 옵션대로 설정할 수 있는 명령어를 출력해준다.

결과 최하단에 나오는 displayplacer ...현재 옵션을 사용하도록 설정하는 명령어다.
해당 명령어를 복사해서 shell에 입력하면 그에 맞게 디스플레이 설정을 변경한다.

Automator로 간단하게 실행하기 (서비스와 단축키 등록)

내가 편하게 사용하고 있는 현재 옵션을 알아냈으니, 이제 저장해두고 사용하기만 하면 된다.

Mac은 Automator라는 애플리케이션을 제공하고 있는데, 이 애플리케이션을 사용해서 shell script를 실행하는 서비스를 등록하거나 실행 파일을 생성할 수 있다.

본 포스트에서는 shell script를 실행하는 서비스를 만들고 단축키로 실행하는 방법을 기록한다.

서비스 등록

Automator를 실행한다.

  • Launch Pad - 기타 - Automator
  • Command + Space 로 Spotlight 실행 - Automator

빠른 동작 메뉴에서 셸 스크립트 또는 shell script를 검색해 셸 스크립트 실행 또는 run shell script 메뉴를 선택한다.

옵션을 다음과 같이 설정한다.

  • 현재 수신하는 작업흐름: 입력 없음
  • 선택 항목 위치: 모든 응용 프로그램

터미널에서 which displayplacer 명령으로 displayplacer의 설치 경로를 알아낸다.
다음으로, displayplacer list 실행 결과 최하단의 옵션을 복사해와서 입력할 명령어를 완성한다.

$ which displayplacer  # /usr/local/bin/displayplacer

그림과 같이 입력했다면 Command + S, 원하는 서비스 이름을 입력하고 저장한다.

등록한 서비스는 /Users/[사용자 이름]/Library/Services 경로에 저장된다.
파인더에서 찾고 싶은 경우에는 파인더에서 Command + Shift + G 로 검색할 수 있다.

모든 응용 프로그램 위에서 동작하도록 등록했기 때문에 아무 애플리케이션 메뉴 - 서비스 아래에서도 확인할 수 있다.

단축키 등록

시스템 설정 - 키보드 - 키보드 단축키 - 서비스 - 일반에서 저장한 서비스 이름을 찾아 원하는 단축키를 지정한다.

이미 사용중인 단축키를 등록했거나, 특정 애플리케이션 위에서는 등록한 단축키가 실행되지 않을 수 있다는 점에 유의한다.

동일한 모델의 모니터를 사용해서 설정 유지가 안되는 경우

동일한 모델의 모니터는 좌우로 두고 사용하는 경우가 일반적이라고 생각하기 때문에, 이 케이스에 맞춰 해결 방안을 기록한다.

예상 원인

동일한 모델의 기기를 사용하는 경우에는 displayplacer가 각 기기를 명확하게 식별하지 못하는 것으로 예상된다. displayplacer list 에서 나타나는 ID도 해당 유틸리티에서 직접 부여한 것으로 보인다. 모니터 재연결 또는 재부팅 시 ID list는 동일하게 유지되지만, 동일한 모니터 모델끼리만 옵션이 뒤바뀌어 설정되는 현상이 발생한다. 자세히는 모르지만, 입력 신호 인식 순서가 뒤바뀌면 모니터 설정도 뒤바뀌는 구조인 것 같다.

해결 방안

displayplacer 명령을 두 가지 옵션으로 만들어 놓고, 위치가 변경되었을 때 다른 옵션의 명령을 실행하면 간단히 해결할 수 있다.

맥북 + 모니터 + 모니터 환경에서 displayplacer 옵션을 조금 더 자세히 살펴보면 아래와 같다.

# 실행
$ displayplacer list

# 결과

... 전략 (현재 연결된 디스플레이들이 사용할 수 있는 옵션 목록)

Execute the command below to set your screens to the current arrangement:

displayplacer "id:14DCF685-C2B3-E02F-0FB2-7512EFFE020F res:2048x1280 hz:59 color_depth:4 scaling:on origin:(0,0) degree:0" "id:2E935981-DFF7-367A-30F1-00713A09B5EE res:1920x1080 hz:60 color_depth:8 scaling:off origin:(-1920,200) degree:0" "id:D58A480C-4751-8973-B780-0618BE306337 res:1920x1080 hz:60 color_depth:8 scaling:off origin:(-3840,200) degree:0"

실행 결과로 얻을 수 있는 명령어가 displayplacer "[display 1 정보]" "[display 2 정보]" "[display 3] 정보" 와 같이 구성되어 있다는 사실을 알 수 있다. 나의 경우에는 display 1이 맥북이고 2, 3이 모니터다.

위치 정보를 나타내는 origin 옵션을 보면 메인 디스플레이를 기준으로 (이동할 x좌표, 이동할 y좌표) 형식으로 구성되어 있다. 이제 위치가 설정한 것과 다르게 뒤바뀌었을 때 적용할 수 있는 명령어를 하나 더 만들자.

옵션 1 (기존에 설정해둔 옵션)

/usr/local/bin/displayplacer "id:14DCF685-C2B3-E02F-0FB2-7512EFFE020F res:2048x1280 hz:59 color_depth:4 scaling:on origin:(0,0) degree:0" "id:2E935981-DFF7-367A-30F1-00713A09B5EE res:1920x1080 hz:60 color_depth:8 scaling:off origin:(-1920,200) degree:0" "id:D58A480C-4751-8973-B780-0618BE306337 res:1920x1080 hz:60 color_depth:8 scaling:off origin:(-3840,200) degree:0"

옵션 2 (디스플레이 2, 3의 origin x좌표만 서로 바꿔서 설정하였음)

/usr/local/bin/displayplacer "id:14DCF685-C2B3-E02F-0FB2-7512EFFE020F res:2048x1280 hz:59 color_depth:4 scaling:on origin:(0,0) degree:0" "id:2E935981-DFF7-367A-30F1-00713A09B5EE res:1920x1080 hz:60 color_depth:8 scaling:off origin:(-3840,200) degree:0" "id:D58A480C-4751-8973-B780-0618BE306337 res:1920x1080 hz:60 color_depth:8 scaling:off origin:(-1920,200) degree:0"

만약, 동일한 모델의 모니터를 사용하면서 한 쪽을 피벗해서 쓰고 있다면 degree 옵션을 수정해서 명령어를 만들면 된다.
몇 차례 테스트를 해봤는데, 회전 명령은 일부 모델에서 동작하지 않는다. (Intel에서는 되고 M1에서는 안됐는데 정확한 차이를 모르겠다.)

Automator를 사용해서 같은 방법으로 새로운 서비스를 생성하고, 단축키를 등록하자.


결과

이제 모니터 설정이 바뀌더라도 옵션 1, 옵션 2 바꿔보면 전에 세팅해뒀던 모니터 설정으로 쉽게 돌아갈 수 있다.

이제 컴퓨터 끄고 다녀야지

profile
블록체인 기술 좋아하는 사람

0개의 댓글