[보조모니터 실험기 2/4] 소프트웨어만으로 확장 모니터 만들기 — evdi 가상 모니터를 커널 7.1 · COSMIC 에서 띄우기까지

이온디 2026.09.29 17 0

리눅스 노트북 + 폰 보조모니터 실험기 2/4 — 소프트웨어만으로 확장 모니터 만들기

1편에서 안드로이드 폰을 리눅스 노트북 보조화면으로 쓰는 데까지는 쉽게 됐습니다. 다만 노트북 화면을 복제하는 미러링이었습니다. 이번 편은 폰을 맥북 Sidecar 처럼 "옆에 붙은 두 번째 모니터"로 쓰기 위해, 하드웨어 없이 가상 모니터를 만든 기록입니다.

Sidecar 가 진짜 확장인 이유

Sidecar 의 핵심은 전송 방식이 아니라 가상 디스플레이입니다. macOS 가 아이패드용 모니터를 하나 새로 만들고, 그 화면을 인코딩해 보냅니다. 리눅스에서도 모니터가 하나 더 생기기만 하면 나머지(인코딩·전송·터치)는 Weylus 같은 도구가 이미 합니다.

가상 모니터 만드는 법COSMIC 에서
데스크톱 자체 기능(KDE krfb 가상 모니터, GNOME 원격 데스크톱, sway create_output)아직 없음
HDMI 더미 플러그(하드웨어)확실하지만 구매 필요
evdi 커널 모듈(DisplayLink 드라이버의 가상 커넥터)이번 편에서 시험

벽 1: 저장소판 evdi 는 커널 7.1 에서 빌드가 안 된다

배포판 저장소의 evdi-dkms 1.14.2 는 커널 7.1 에서 struct drm_device has no member named struct_mutex 로 실패했습니다. 커널에서 그 필드가 없어졌기 때문입니다. GitHub 의 최신판(1.15.1)은 그대로 빌드됐습니다. sudo 없이 임시 폴더에서 먼저 빌드해 보고 판단했습니다.

git clone --depth 1 https://github.com/DisplayLink/evdi.git
cd evdi/module
make -C /lib/modules/$(uname -r)/build M=$PWD modules # evdi.ko

# libevdi: libdrm-dev 가 없으면 커널 헤더를 libdrm 이름으로 연결
ln -s /usr/include/drm shim/libdrm
cd ../library && CFLAGS="-I$PWD/../../shim" make

마지막 줄에서 make CFLAGS=... 처럼 명령행으로 주면 Makefile 의 기존 경로(-I../module)를 덮어써서 실패합니다. 환경변수로 넘겨야 합니다.

벽 2: 모듈만 올려서는 모니터가 안 생긴다

모듈을 올리면 가상 커넥터(DVI-I-1)는 생기지만 "연결 안 됨" 상태입니다. 사용자 공간 프로그램이 EDID(모니터 정보)를 넘겨 "모니터가 꽂혔다"고 알려야 합니다. DisplayLink 는 자기 드라이버가 이 일을 하니, 직접 작은 C 프로그램(vmon)을 만들었습니다.

  • EDID 128바이트를 코드에서 직접 생성(1920x1080@60 타이밍, 체크섬 계산)
  • evdi_connect2 로 연결하고, 컴포지터의 화면 갱신 요청을 계속 받아 처리
  • 함정: 라이브러리의 evdi_open_attached_to(NULL) 이 내부에서 strlen(NULL) 을 불러 바로 죽습니다. evdi_open_attached_to_fixed(NULL, 0) 을 써야 합니다.

가상 장치에는 로그인 사용자 권한(ACL)이 자동으로 붙어서, 모듈 로드만 sudo 로 하고 vmon 은 일반 사용자로 돌았습니다.

결과: 인식은 됐다

COSMIC 디스플레이 목록에 DVI-I-1 1920x1080@60 이 노트북 화면 오른쪽에 확장 모니터로 붙었습니다. 마우스를 오른쪽 끝 너머로 밀면 보이지 않는 두 번째 화면으로 넘어갑니다. vmon 자체의 CPU 는 거의 0% 였습니다.

부작용: 키 입력이 씹히기 시작했다

그런데 가상 모니터를 켜 둔 사이 사용자 쪽 타이핑이 "FIX" 가 "FFFIIXX" 로 찍히는 식으로 반복되기 시작했습니다. 컴포지터 로그에 원인이 있었습니다.

cosmic-comp: Error importing dmabuf from renderD128 to card2: Failed to import buffer

컴포지터는 GPU 가 그린 버퍼를 가상 장치(card2)로 넘기지 못하고 CPU 로 복사하는 느린 경로를 탔고, 그동안 입력 처리가 밀려 키를 뗀 신호가 늦게 도착하면서 자동 반복이 걸렸습니다. vmon 을 끄자 바로 정상으로 돌아왔습니다.

정리

  • COSMIC 에도 소프트웨어만으로 확장 모니터를 붙일 수는 있다(evdi 1.15.1 + 직접 만든 EDID 클라이언트).
  • 하지만 이 노트북에서는 컴포지터가 CPU 경로를 타서 상시 사용은 어렵다.
  • 실험은 반드시 되돌리기 수단(pkill vmon, rmmod evdi)을 먼저 준비하고 한다.

다음 편: 전송 쪽을 바꿔 봅니다. 게임 스트리밍용 Sunshine + Moonlight 를 COSMIC 에서 동작시키기까지 만난 벽 다섯 개입니다.

댓글 0

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