남는 아이패드를 리눅스(Pop!_OS COSMIC) 노트북 터치 보조화면으로 쓰기 — Weylus 가 안 되던 원인과 해결

이온디 2026.09.28 12 0

남는 아이패드를 리눅스 노트북 터치 보조화면으로 — Weylus COSMIC 해결기

서랍에 잠든 아이패드를 노트북 옆에 세워 두고 채팅 창이나 문서를 띄워 두고 싶을 때가 있습니다. 맥이면 사이드카 한 번이면 끝나지만, 리눅스 노트북(Pop!_OS 24.04, COSMIC 데스크톱, Wayland)에서는 이야기가 달랐습니다. Claude Code 와 함께 하나씩 막힌 곳을 뚫어 가며 아이패드를 터치까지 되는 보조화면으로 만든 과정을 정리합니다. 같은 환경을 쓰는 분이라면 그대로 따라 하실 수 있습니다.

1. 먼저, 안 되는 방법부터

방법리눅스에서이유
사이드카불가맥 전용
Spacedesk, Duet불가리눅스 서버 프로그램이 없음
USB-C 케이블 직결불가아이패드는 영상 입력이 안 됨. 꽂아도 USB 기기로만 잡힘
AirPlay 미러링방향 반대아이패드 화면을 내보내는 기능. 받는 쪽이 될 수 없음
UVC 캡처카드(iPadOS 17+)가능HDMI 캡처카드가 있어야 함. 보기 전용

캡처카드가 없어서 Wi-Fi 방식으로 가기로 했습니다. 후보는 두 가지였습니다.

  • Deskreen CE — 설치 후 QR 한 번 찍으면 바로 됩니다. 크롬 계열 캡처라 COSMIC 과 잘 맞습니다. 다만 보기 전용입니다.
  • Weylus — 아이패드 Safari 에서 화면을 보면서 터치·펜으로 노트북을 조작할 수 있습니다. 그런데 COSMIC 에서는 연결하자마자 failed to init screen cast! 가 떴습니다.

2. Weylus 가 COSMIC 에서 안 되던 진짜 원인

로그와 PipeWire 협상 기록을 보니 원인은 화면 픽셀 형식이 서로 안 맞는 것이었습니다.

  • COSMIC 의 화면 공유(스크린캐스트)는 RGBA, BGRA 형식만 내줍니다.
  • Weylus 는 소스(src/capturable/pipewire.rs)에서 받는 형식을 BGRx, RGBx 두 가지로 고정해 두었습니다.
  • 그래서 PipeWire 가 no more output formats 로 연결을 끊습니다.

RGBA 와 RGBx 는 네 번째 바이트(투명도)를 쓰느냐 마느냐의 차이일 뿐 메모리 배치가 같습니다. 즉 Weylus 가 RGBA 를 받아서 네 번째 바이트를 무시하기만 하면 됩니다.

3. 해결 — 빌드 없이 바이너리 문자열만 바꾸기

정석은 소스를 고쳐 다시 빌드하는 것이지만, Weylus 빌드에는 ffmpeg·GStreamer 개발 패키지가 줄줄이 필요합니다. 대신 flatpak 으로 설치된 실행 파일을 복사해서, 그 안의 BGRx/RGBx 문자열을 같은 길이의 BGRA/RGBA 로 바꿨습니다. 정확히 5곳(요청 형식 2곳, 받은 형식을 비교하는 코드 2곳, 로그 문구 1곳)이고, 길이가 같아서 실행 파일 구조는 그대로입니다.

APP=io.github.electronstudio.WeylusCommunityEdition
SRC=$(flatpak info --user --show-location $APP)/files/bin/weylus
mkdir -p ~/Applications/weylus-cosmic
python3 - "$SRC" <<'EOF'
import sys, os
b = bytearray(open(sys.argv[1], 'rb').read())
n = 0
for old, new in ((b'BGRx', b'BGRA'), (b'RGBx', b'RGBA')):
 i = b.find(old)
 while i != -1:
 b[i:i+4] = new; n += 1; i = b.find(old, i + 4)
assert n == 5, n # 버전이 다르면 멈춤
dst = os.path.expanduser('~/Applications/weylus-cosmic/weylus')
open(dst, 'wb').write(b); os.chmod(dst, 0o755)
EOF

# 원본 flatpak 환경에서 패치본을 실행
flatpak run --filesystem=$HOME/Applications/weylus-cosmic:ro \
 --command=$HOME/Applications/weylus-cosmic/weylus $APP \
 --auto-start --wayland-support

아이패드 Safari 에서 http://노트북IP:1701 을 열면, 노트북에 COSMIC 화면 공유 선택 창이 뜹니다. 허용하면 화면이 넘어오고 터치로 조작됩니다. 원본 flatpak 은 건드리지 않으므로 언제든 되돌릴 수 있습니다.

4. 더 가볍게 — GPU 인코딩(VAAPI)

문제는 CPU 였습니다. Weylus 가 화면을 CPU(x264)로 압축해서 CPU 를 123~145% 쓰고 있었습니다. 발열이 심한 노트북이라 버벅임으로 이어집니다. --try-vaapi 옵션을 줘도 CPU 로 돌아갔는데, 원인이 두 겹이었습니다.

  • flatpak 에 같이 들어 있는 ffmpeg 8 이 VAAPI 없이 빌드돼 있었습니다. 런타임의 ffmpeg 는 7.x 라 바꿔 끼울 수도 없었습니다.
  • ffmpeg 8 은 필터 그래프를 만드는 순간 필터를 초기화하는데, Weylus 는 그 뒤에 GPU 장치를 붙입니다. 그래서 A hardware device reference is required to upload frames to 오류로 실패합니다.

해결은 이렇게 했습니다.

  1. ffmpeg 8.1.1 을 VAAPI 포함으로 직접 빌드했습니다. sudo 없이 사용자 폴더에 설치했고, libva 는 헤더만 받아 시스템 라이브러리에 연결했습니다.
  2. hwupload 필터가 초기화 때 장치가 없으면 기다렸다가, 형식 협상 단계에서 받도록 몇 줄 고쳤습니다.
  3. flatpak 실행 시 --env=LD_LIBRARY_PATH=<내 ffmpeg>/lib:/app/lib 로 이 라이브러리를 먼저 불러오게 했습니다.

결과는 로그의 Video: 1912x1074@h264_vaapi, 그리고 Weylus CPU 사용량 123~145% → 60% 입니다. 인텔 내장 GPU(UHD 630)가 압축을 맡습니다.

5. 써 보며 알게 된 팁

  • 창 말고 모니터를 공유하세요. 창 하나만 공유하면 터치 위치가 어긋납니다. Wayland 에서 터치 입력은 모니터 전체 좌표로 들어가는데, 창의 위치는 알려주지 않기 때문입니다.
  • 전체 화면: Safari 공유 버튼에서 "홈 화면에 추가"를 하고 그 아이콘으로 열면 주소창 없이 뜹니다.
  • 연결이 끊기면: 아이패드가 잠기거나 Safari 가 백그라운드로 가면 끊깁니다. 쓰는 동안에는 자동 잠금을 "안 함"으로 두세요.
  • 검은 화면만 보이면: 노트북에 공유 선택 창이 떠 있는 상태입니다. 노트북에서 모니터를 골라 주세요.
  • 방화벽: ufw 를 쓰면 sudo ufw allow from 192.168.0.0/24 to any port 1701 proto tcp 로 같은 공유기 안에서만 열어 두세요. 접속 코드(--access-code)도 함께 거는 게 안전합니다.
  • 소리는 전송되지 않습니다. 노트북 스피커나 이어폰으로 들어야 합니다.

6. 정리

보기만 하면 되는 분은 Deskreen CE 가 가장 쉽습니다. 터치까지 원하고 COSMIC(Wayland) 을 쓴다면 위의 Weylus 형식 패치가 필요하고, 발열이 걱정되면 VAAPI ffmpeg 까지 붙이면 됩니다. 이 과정은 노트북 관리 앱 popmgr 에 "아이패드" 탭으로 넣는 중입니다. 켜기/끄기와 접속 QR 코드를 한 화면에서 다루게 됩니다. 원인을 찾을 때 가장 도움이 된 건 추측보다 로그와 PipeWire 협상 기록이었습니다.

댓글 0

목록 보기
댓글을 작성하려면 로그인하세요.
  • 첫 댓글을 남겨보세요.