맥북에서 Sidecar가 안 되는 조합이 있습니다. 제 경우 MacBook Pro 15" 2018(Intel, macOS 15.8)과 iPad Pro 11"(iPadOS 26.5)인데, 조건을 전부 충족했는데도 아이패드가 디스플레이 목록에 나타나지 않았습니다.
확인한 것만 나열하면 이렇습니다. 같은 Apple ID, 이중 인증 켜짐, Wi-Fi와 블루투스 켜짐, awdl0 인터페이스 active, 저전력 모드 꺼짐, Handoff 양쪽 켜짐, sidecar-relay와 sidecar-display-agent 로드됨, SidecarCore.framework 존재. 심지어 맥에서 아이패드로 AirDrop도 성공했습니다. AirDrop이 된다는 건 AWDL과 블루투스 검색, Apple ID 신뢰 체인이 전부 살아 있다는 뜻입니다.
그런데도 안 됐습니다. 원인은 OS 세대 차이로 보입니다. 이 맥북은 macOS 26 Tahoe 지원 목록에서 빠져서 macOS 15가 마지막이고, 아이패드는 iPadOS 26입니다. 애플은 Continuity 기능을 같은 세대 조합에서만 검증합니다. 세대를 맞출 방법이 없으니 Sidecar는 포기하는 게 맞습니다.
대안: opendisplay
GPL-3.0 오픈소스입니다. Sidecar와 같은 방식으로 동작합니다. macOS의 비공개 API인 CGVirtualDisplay로 가상 디스플레이를 만들고, ScreenCaptureKit으로 캡처해서 하드웨어 H.264로 인코딩한 뒤 아이패드로 보냅니다. 아이패드의 터치는 CGEvent로 맥에 주입됩니다.
저장소: github.com/peetzweg/opendisplay
중요한 건 미러링이 아니라 진짜 확장 디스플레이라는 점입니다. macOS가 아이패드를 물리 모니터 하나로 인식하므로 창을 끌어다 놓을 수 있습니다.
설치
앱이 두 개 필요합니다.
- 맥(송신): 릴리스 페이지에서 OpenDisplay.dmg. macOS 14 이상. Developer ID 서명과 Apple 공증이 돼 있어서 Gatekeeper 경고 없이 열립니다. 유니버설 바이너리(x86_64 + arm64)라 Intel 맥에서도 그대로 돕니다.
- 아이패드(수신): TestFlight 공개 베타로 설치. iPadOS 15 이상.
다운로드한 앱이 정말 서명된 것인지 확인하는 습관을 들이면 좋습니다.
lipo -archs /Applications/OpenDisplay.app/Contents/MacOS/OpenDisplay
codesign -dv --verbose=2 /Applications/OpenDisplay.app
spctl -a -vvv -t install /Applications/OpenDisplay.app
마지막 명령이 accepted와 Notarized Developer ID를 돌려주면 정상입니다.
여기서 막힙니다: 로컬 네트워크 권한
이 글을 쓰는 이유입니다. 설치하고 실행했는데 연결이 안 됐습니다. 아이패드는 목록에 뜨는데 선택해도 아무 일도 일어나지 않았습니다. 오류 메시지도 없었습니다.
macOS 15에서 로컬 네트워크 권한이 없으면 NWBrowser가 오류 없이 빈 결과만 돌려줍니다. 앱 입장에서는 "주변에 기기가 없다"로 보이고, 사용자 입장에서는 아무 단서가 없습니다.
해결은 간단합니다. 시스템 설정 - 개인정보 보호 및 보안 - 로컬 네트워크에서 해당 앱을 켜면 됩니다. 터미널에서 바로 열 수도 있습니다.
open "x-apple.systempreferences:com.apple.preference.security?Privacy_LocalNetwork"
참고로 이 권한은 TCC 데이터베이스에 없습니다. /var/db/com.apple.networkextension.tracker-info에서 따로 관리되기 때문에, TCC를 조회해봐야 안 나옵니다. 저도 여기서 한참 헤맸습니다.
어디가 막혔는지 찾는 순서
이런 종류의 문제는 양쪽 중 어디가 문제인지부터 갈라야 합니다. 순서대로 확인하면 범위가 빠르게 좁혀집니다.
1. 아이패드 앱이 대기 중인가
nc -z -G 3 192.168.0.47 9000
succeeded가 나오면 아이패드는 정상입니다. 수신 기기가 9000번 포트에서 기다리고 맥이 접속하는 구조입니다.
2. Bonjour 광고가 뜨는가
dns-sd -B _opensidecar._tcp local
Instance Name에 iPad가 나오면 광고는 정상입니다. 대조군으로 _airplay._tcp를 같이 돌려보면 mDNS 자체가 멀쩡한지도 알 수 있습니다.
3. 맥 앱이 소켓을 여는가
lsof -nP -p $(pgrep -f "OpenDisplay.app/Contents/MacOS") | grep -E "TCP|usbmux"
1번과 2번이 정상인데 3번이 비어 있으면 맥 앱이 탐색조차 안 하고 있다는 뜻이고, 그게 바로 로컬 네트워크 권한 문제입니다. 제 경우가 정확히 이랬습니다.
4. 화면 기록과 손쉬운 사용 권한
sqlite3 "/Library/Application Support/com.apple.TCC/TCC.db" \
"select service,auth_value from access where client like '%opensidecar%';"
auth_value가 2면 허용입니다. 화면을 보내려면 화면 기록이, 터치를 맥 클릭으로 바꾸려면 손쉬운 사용이 필요합니다. 앱 실행 중에 권한을 켜면 바로 반영되지 않으니 앱을 껐다 켜야 합니다.
5. 연결 확인
연결에 성공하면 디스플레이가 하나 늘어납니다. CGGetActiveDisplayList로 세어보면 됩니다. 제 경우 이렇게 나왔습니다.
활성 디스플레이 2개
id=4128833 1210x834 builtin=0 (아이패드)
id=69734406 1680x1050 builtin=1 (맥북 내장)
Wi-Fi보다 USB가 훨씬 낫습니다
연결은 됐는데 느렸습니다. 원인은 Wi-Fi였습니다.
ping -c 5 192.168.0.47
round-trip min/avg/max = 35.4/75.9/115.2 ms
LAN 치고 매우 나쁜 수치입니다. 2.4GHz 802.11n에 물려 있었습니다. 여기에 인코딩과 디코딩 지연이 더해지면 커서가 눈에 띄게 밀립니다.
이 앱은 macOS에 기본 내장된 usbmuxd를 통해 USB 연결을 지원합니다. 케이블을 꽂으면 Wi-Fi를 아예 타지 않으니 지연이 한 자릿수 ms로 떨어집니다. 별도 헬퍼 설치도 필요 없습니다.
케이블 관련해서 오해하기 쉬운 부분이 하나 있습니다. 데이터가 되는 케이블이면 되고, USB 2.0으로 충분합니다. USB 3나 썬더볼트, 영상 Alt Mode는 필요 없습니다. 다만 충전 전용 케이블은 안 됩니다. 확인하는 방법이 있습니다.
system_profiler SPUSBDataType | grep -A6 "iPad:"
여기서 Speed에 480 Mb/s가 찍히면 데이터 통신이 되는 USB 2.0 케이블입니다. 아무것도 안 뜨면 충전 전용입니다.
참고로 480 Mb/s는 소문자 b, 메가비트입니다. 8로 나누면 60 MB/s이고 이게 USB 2.0 규격값입니다. 1080p60 H.264가 20에서 30 Mbps 수준이니 넉넉합니다. 애플이 기본으로 넣어주는 USB-C 케이블이 데이터는 USB 2.0까지만 되는데, 이 용도로는 문제없습니다.
확장하면
연결된 기기 각각이 독립된 확장 디스플레이가 됩니다. 미러가 아니라 따로따로입니다.
남는 맥이 있으면 그것도 모니터로 쓸 수 있습니다. 같은 릴리스의 OpenDisplayReceiver.dmg를 설치하면 되고, macOS 12 몬터레이 이상이면 되니 2015년 무렵 맥까지 해당됩니다. Retina 네이티브 해상도로 잡힙니다.
맥과 맥을 연결할 때는 썬더볼트나 USB4 케이블로 직결하는 방법이 있습니다. macOS가 자동으로 썬더볼트 브리지 네트워크를 만들어줍니다. 이더넷 케이블도 됩니다. 앞서 본 Wi-Fi 지연을 생각하면 케이블 쪽이 맞습니다.
정리하면 데스크탑 한 대에 노트북과 태블릿을 각각 확장 모니터로 붙이는 구성이 가능합니다. 쓰지 않고 놀고 있는 기기가 있다면 꽤 쓸모 있는 활용법입니다.
정리
- Sidecar가 안 되는 조합이 실제로 있습니다. 특히 macOS 26을 못 올리는 Intel 맥과 최신 iPadOS 조합
- opendisplay는 같은 원리로 동작하는 오픈소스 대안이고, 진짜 확장 디스플레이입니다
- 연결이 안 되면 로컬 네트워크 권한을 가장 먼저 의심하세요. macOS 15는 이 경우 아무 오류도 내지 않습니다
- 아이패드 확인, Bonjour 확인, 맥 소켓 확인 순서로 좁히면 빠릅니다
- Wi-Fi보다 USB 케이블이 확실히 낫습니다. 데이터 되는 USB 2.0이면 충분합니다