Linux의 v4l2loopback: 설치, 영구 적용, 흔한 오류
Linux에는 가상 카메라가 기본으로 들어 있지 않습니다. 앱은 /dev/video0 같은 장치를 열어 프레임을 읽고, 커널은 그 뒤에 실제 하드웨어가 있다고 전제합니다. v4l2loopback은 카메라처럼 동작하지만 화면을 소프트웨어가 채우는 장치를 만들어 주는 커널 모듈입니다.
Linux에서 가상 카메라를 쓰는 모든 방식의 토대이며, OBS도 ffmpeg 파이프라인도 CamLooper도 모두 루프백 장치에 기록합니다. 올바른 설정 방법은 다음과 같습니다.
설치
커널이 업데이트될 때마다 모듈이 자동으로 다시 빌드되도록 DKMS 패키지를 설치하세요.
# Debian / Ubuntu
sudo apt install v4l2loopback-dkms
# Fedora / RHEL
sudo dnf install v4l2loopback
# Arch
sudo pacman -S v4l2loopback-dkms
여기서 DKMS가 중요합니다. 이것이 없으면 모듈은 설치 시점의 커널에 맞춰 빌드되고, 다음 커널 업데이트 이후 가상 카메라가 아무 안내 없이 작동을 멈춥니다.
모듈 로드
sudo modprobe v4l2loopback
장치가 생겼는지 확인합니다.
lsmod | grep v4l2loopback
ls -l /dev/video*
로드할 때 유용한 옵션:
sudo modprobe v4l2loopback \
devices=1 \
video_nr=10 \
card_label="Virtual Camera" \
exclusive_caps=1
video_nr=10은 장치를/dev/video10에 고정해 실제 웹캠과 충돌하지 않게 합니다card_label은 앱의 카메라 목록에 표시되는 이름을 정합니다exclusive_caps=1이 결정적인 옵션입니다. 무언가가 기록 중일 때만 캡처 기능을 알리도록 만듭니다. Chrome, Firefox와 일부 Electron 앱은 이 옵션이 없는 루프백 장치를 무시하기 때문에,v4l2-ctl에서는 보이는 카메라가 브라우저에서는 나타나지 않는 일이 생깁니다
재부팅 후에도 유지하기
modprobe의 효과는 재부팅 전까지입니다. 다음 두 파일이 이를 영구화합니다.
# /etc/modules-load.d/v4l2loopback.conf
v4l2loopback
# /etc/modprobe.d/v4l2loopback.conf
options v4l2loopback devices=1 video_nr=10 card_label="Virtual Camera" exclusive_caps=1
앞의 파일은 부팅 시 모듈을 로드하고, 뒤의 파일은 옵션을 전달합니다. 앞의 것만 작성해 놓고 옵션이 왜 사라졌는지 의아해하는 경우가 자주 있습니다.
앱 없이 테스트하기
ffmpeg으로 반복 재생 영상을 장치에 밀어 넣어 봅니다.
ffmpeg -stream_loop -1 -re -i video.mp4 \
-f v4l2 -pix_fmt yuv420p /dev/video10
-re는 스트림 속도를 실시간에 맞춥니다(없으면 ffmpeg이 최대 속도로 기록해 결과를 쓸 수 없습니다). -stream_loop -1은 무한 반복이고, yuv420p는 웹캠을 사용하는 쪽이 기대하는 픽셀 형식입니다. 브라우저에서 웹캠 테스트 페이지를 열면 영상이 보일 것입니다.
흔한 오류
modprobe: ERROR: could not insert 'v4l2loopback': Required key not available
보안 부팅이 서명되지 않은 모듈을 거부하는 것입니다. Machine Owner Key를 등록해 모듈에 서명하거나, 펌웨어에서 보안 부팅을 끄세요. 서명된 모듈을 제공하는 배포판이라면 이 문제 자체가 발생하지 않습니다.
모듈은 빌드되는데 /dev/video 장치가 나타나지 않는다
modprobe 직후에 dmesg | tail을 확인하세요. 모듈과 실행 중인 커널의 버전 불일치가 여기에 드러나며, 업데이트 후 DKMS가 다시 빌드하지 않았다는 전형적인 신호입니다.
카메라는 있는데 브라우저가 인식하지 못한다
모듈을 exclusive_caps=1과 함께 로드하세요. 압도적으로 가장 흔한 원인입니다.
Flatpak 앱에서 카메라가 보이지 않는다
샌드박스는 권한을 부여하기 전까지 장치 접근을 차단합니다.
flatpak override --user --device=all com.obsproject.Studio
이 모든 과정을 건너뛰려면
위 내용은 한 번만 하면 되는 설정이지만, 동영상을 카메라로 재생하기까지 터미널 작업과 재부팅이 필요하다는 사실은 변하지 않습니다. '그냥 OBS 쓰면 되잖아'라는 조언이 Windows보다 Linux에서 훨씬 부담스러운 이유가 여기 있습니다.
CamLooper의 .deb와 .rpm 패키지는 이 일을 대신해 줍니다. v4l2loopback-dkms를 의존성으로 선언하고, 위에 나온 modules-load.d와 modprobe.d 파일을 설치하며, 설치 중에 모듈을 로드합니다. 그래서 설치 관리자가 끝나는 순간 카메라를 쓸 수 있고 재부팅 후에도 마찬가지입니다. 터미널도 재부팅도 필요 없으며, 커널 업데이트 이후에도 DKMS가 계속 동작하도록 유지해 줍니다.