RamterStudioRamterStudio
Contact
앱 제작 이야기

Behind Mac Virtual Display

이번에는 진짜 비율이 미쳤다.

Galaxy Z Fold8 화면에 정확히 맞는 Mac 원격 작업 공간을 만들고 싶었다. 작은 시도는 결국 macOS 네이티브 메뉴바 앱이 됐다.

Galaxy Z Fold8 전용 2448×1848 디스플레이와 Looks like 1224×924 HiDPI 작업 공간.
Galaxy Z Fold8 전용 2448×1848 디스플레이와 Looks like 1224×924 HiDPI 작업 공간.
01 · 시작

Fold8에서 시작됐다

펼친 화면은 스마트폰보다 작은 태블릿에 가까웠다. 가끔 MacBook Pro에 원격으로 접속하기에 딱 맞는 비율처럼 보였다.

처음 연결했을 때부터 결과는 기대 이상이었다. 집에서는 즉각적으로 느껴졌고, SKT 5G 외부 접속에서도 실제 작업이 가능할 정도로 안정적이었다.

하지만 스트리밍 호스트와 클라이언트를 연결하는 것만으로는 부족했다. Mac 쪽에도 Fold와 같은 비율, 해상도, 주사율을 가진 화면이 필요했다.

Fold는 Mac 작업 공간을 띄울 준비가 됐지만, macOS는 아니었다.
02 · 문제

원격 스트리밍만으로는 화면이 만들어지지 않는다

Chrome 원격 데스크톱과 여러 유료 앱으로 Mac 화면을 볼 수는 있지만, macOS에 접속 기기와 같은 작업 공간이 자동으로 생기지는 않는다.

비율

검은 여백

물리 모니터나 다른 태블릿용 화면을 Fit으로 표시하면 Fold에 사용하지 못하는 공간이 남는다.

잘림

Fill과 Stretch

Fill은 데스크톱 일부를 자르고 Stretch는 화면을 왜곡한다. 둘 다 근본적인 해결이 아니다.

호스트

존재하지 않는 화면

Sunshine은 이미 존재하는 화면을 캡처한다. Artemis가 연결됐다고 macOS가 Fold 모양의 화면을 만들지는 않는다.

03 · 디스플레이

빠져 있던 것은 네이티브 HiDPI 화면이었다

Fold8 프로필은 2448×1848, 120Hz로 출력하면서 macOS에는 Looks like 1224×924의 편안한 작업 공간을 제공한다.

HiDPI는 실제 출력을 1224×924로 낮추는 방식이 아니다. 논리 좌표 하나를 물리 픽셀 네 개로 그려 글자와 인터페이스를 선명하게 유지한다.

Fold 비율을 정확히 맞추면 Artemis를 Fit으로 둔 채 검은 여백, 잘림, 왜곡 없이 화면 전체를 사용할 수 있다.

프로필실제 출력HiDPI 작업 공간주사율
Galaxy Z Fold82448 × 18481224 × 924120 Hz
iPad Pro 11-inch2420 × 16681210 × 834120 Hz
04 · 앱

단축어에서 메뉴바 앱으로

처음에는 단축어와 여러 디스플레이 도구를 조합했다. 매번 같은 불안정한 과정을 반복하면서 전용 앱이 필요하다는 결론에 도달했다.

생성

기기별 프로필

Fold와 iPad에 맞는 해상도, HiDPI 배율, 주사율의 화면을 만든다.

연결

Sunshine 연동

방금 생성된 화면의 현재 ID를 찾아 Sunshine 출력 대상으로 연결한다.

보호

안전한 복구

먼저 물리 모니터 배치를 저장하고 가상 화면을 끌 때 원래 상태로 복원한다.

제어

메인 디스플레이

메뉴와 앱이 원격 클라이언트에 보이는 화면에서 열리도록 가상 화면을 메인으로 만든다.

상태

Tailscale

VPN 계정에 로그인하거나 제어하지 않고 현재 연결 상태만 표시한다.

외부

클램셸 흐름

테스트한 순서대로 물리 모니터를 꺼도 관리 중인 작업 공간을 유지한다.

05 · 연결 구조

네 가지 구성 요소, 하나의 원격 작업 공간

Mac Virtual Display는 화면을 담당한다. Sunshine, Artemis, Tailscale은 각자 한 가지 역할에 집중한다.

01Mac Virtual Display

기기에 맞는 macOS 작업 공간을 만들고 원래 화면을 복구한다.

02Sunshine

Mac에서 관리 중인 디스플레이를 캡처하고 인코딩한다.

03Artemis

Galaxy Fold에 화면을 표시하고 터치·마우스·키보드 입력을 전달한다.

04Tailscale

외부에서 접속할 때 Mac까지의 사설 연결 경로를 만든다.

같은 내부망에서는 Tailscale이 필수는 아니다. 다만 유선 Mac과 무선 클라이언트가 자동 검색에서 서로 보이지 않는 경우가 있어 항상 켜두고 있다.
06 · 설정

Fold8 전체 설정

Mac에는 Mac Virtual Display, Sunshine, Tailscale을 설치하고 Fold에는 Artemis의 nonRoot game APK와 Tailscale을 설치한다.

  1. Mac Virtual Display에서 Galaxy Z Fold8을 선택하고 Sunshine integration을 켠 뒤 Turn On을 누른다.
  2. 두 기기에서 같은 Tailscale 계정으로 로그인하고 Mac의 100.x.x.x 주소를 Artemis에 직접 추가한다.
  3. Artemis에 나타난 네 자리 PIN을 Sunshine의 https://localhost:47990에 입력한다.
  4. Artemis에서 Desktop을 선택하고 아래의 120Hz 설정을 적용한다.

테스트한 Artemis 설정

Artemis 설정
Video resolutionCustom 2448 × 1848
Frame rate120 FPS
Video bitrate65 Mbps
Video codecPrefer HEVC
Video frame pacingBalanced
Video Scale ModeFit
HDROff
Use Virtual DisplayOff
Mac Virtual Display가 이미 호스트 화면을 만들었으므로 Use Virtual Display은 끈다. 연결이 불안정하면 해상도나 FPS보다 비트레이트를 먼저 낮춘다.
07 · 실사용

터치, 5G, 클램셸까지

책상 앞에서 한 번 연결되는 것보다 외부에서 실제로 사용할 수 있는지가 더 중요했다.

Artemis 트랙패드 모드에서 한 손가락은 포인터, 두 손가락 이동은 스크롤, 두 손가락 탭은 우클릭, 세 손가락 탭은 소프트 키보드 표시·숨김으로 동작한다.

한글은 Fold 키보드를 영문으로 둔 상태에서 Mac의 입력 소스를 바꾼다. 그러면 macOS 입력기가 일반 키 이벤트를 한글로 조합한다.

호스트 Mac은 기가 인터넷 공유기에 유선으로 연결했고 집에서는 Wi‑Fi 7을 사용했다. 외부 SKT 5G에서도 2448×1848, 120Hz, HEVC, 65Mbps 설정이 안정적으로 유지됐다.

클램셸에서는 전원과 유선을 연결하고, 물리 모니터가 보이는 상태에서 Fold 프로필을 켠 뒤 Artemis 접속까지 확인한다. 물리 모니터는 마지막에 끈다.
Galaxy Z Fold8 전용 2448×1848 디스플레이와 Looks like 1224×924 HiDPI 작업 공간.
Galaxy Z Fold8 전용 2448×1848 디스플레이와 Looks like 1224×924 HiDPI 작업 공간.
08 · 한계

앱이 해결한다고 주장하지 않는 것

Mac Virtual Display는 화면 쪽의 번거로움을 없애지만 모든 네트워크와 macOS 제약을 바꾸지는 않는다.

네트워크

이동통신 환경

지연시간은 위치, 기지국 상태, Tailscale 직접 연결 여부에 따라 달라질 수 있다.

헤드리스

외출 전 확인

장시간 클램셸과 재부팅 후 동작은 Mac 모델과 macOS 버전에 따라 다를 수 있다.

입력

macOS 텍스트 경로

Android에서 조합된 문자가 제대로 전달되지 않을 수 있어 언어 전환은 Mac에서 한다.

손에 든 기기에 정확히 맞는 Mac 화면.

Mac Virtual Display는 macOS 14 이상 Apple Silicon Mac을 위해 무료로 배포하며 서명과 공증을 완료했다.