v4l2loopback en Linux: instalación, persistencia y errores comunes
Linux no incluye ninguna cámara virtual. Las aplicaciones abren un dispositivo como /dev/video0 y leen fotogramas de él, y el kernel espera que detrás haya hardware real. v4l2loopback es un módulo del kernel que crea un dispositivo que se comporta como una cámara pero recibe su contenido por software.
Es la base de cualquier flujo de trabajo con cámara virtual en Linux: OBS, las tuberías de ffmpeg y CamLooper escriben todos en un dispositivo de bucle. Así se configura correctamente.
Instalación
Instala el paquete DKMS para que el módulo se recompile automáticamente cada vez que se actualice tu kernel:
# Debian / Ubuntu
sudo apt install v4l2loopback-dkms
# Fedora / RHEL
sudo dnf install v4l2loopback
# Arch
sudo pacman -S v4l2loopback-dkms
DKMS es importante aquí. Sin él, el módulo se compila contra el kernel que tenías en el momento de instalarlo y tu cámara virtual deja de funcionar en silencio tras la siguiente actualización del kernel.
Cargar el módulo
sudo modprobe v4l2loopback
Confirma que el dispositivo existe:
lsmod | grep v4l2loopback
ls -l /dev/video*
Opciones útiles al cargarlo:
sudo modprobe v4l2loopback \
devices=1 \
video_nr=10 \
card_label="Virtual Camera" \
exclusive_caps=1
video_nr=10fija el dispositivo en/dev/video10para que no choque con una webcam realcard_labeldefine el nombre que muestran las aplicaciones en su lista de cámarasexclusive_caps=1es la opción clave: hace que el dispositivo anuncie capacidad de captura solo cuando algo está escribiendo en él. Chrome, Firefox y varias aplicaciones Electron ignoran los dispositivos de bucle que no la tienen, y por eso una cámara puede verse env4l2-ctly faltar en tu navegador
Hacer que sobreviva a un reinicio
modprobe dura hasta que reinicies. Dos archivos lo hacen permanente:
# /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
El primero carga el módulo al arrancar; el segundo le pasa sus opciones. Es muy frecuente escribir solo el primero y luego preguntarse por qué han desaparecido las opciones.
Probarlo sin ninguna aplicación
Envía un vídeo en bucle al dispositivo con ffmpeg:
ffmpeg -stream_loop -1 -re -i video.mp4 \
-f v4l2 -pix_fmt yuv420p /dev/video10
-re marca el ritmo del flujo en tiempo real (sin él, ffmpeg escribe tan rápido como puede y el resultado es inservible), -stream_loop -1 repite indefinidamente y yuv420p es el formato de píxel que esperan los consumidores de webcam. Abre una página de prueba de webcam en el navegador y deberías ver el vídeo.
Errores comunes
modprobe: ERROR: could not insert 'v4l2loopback': Required key not available
El arranque seguro está rechazando el módulo sin firmar. O registras una clave de propietario de la máquina (MOK) y firmas el módulo, o desactivas el arranque seguro en el firmware. Las distribuciones que incluyen una versión firmada del módulo evitan esto por completo.
El módulo se compila pero no aparece ningún dispositivo /dev/video
Revisa dmesg | tail justo después de modprobe. Ahí aparece una discrepancia de versión entre el módulo y el kernel en ejecución, que es la señal habitual de que DKMS no recompiló tras una actualización.
La cámara existe pero los navegadores no la ven
Carga el módulo con exclusive_caps=1. Es, con diferencia, la causa más frecuente.
Las aplicaciones Flatpak no ven la cámara
El entorno aislado bloquea el acceso a dispositivos hasta que lo concedes:
flatpak override --user --device=all com.obsproject.Studio
Saltarse todo esto
Todo lo anterior es una configuración que se hace una sola vez, pero sigue siendo una sesión de terminal y un reinicio antes de poder reproducir un vídeo como cámara, y es la razón por la que «usa OBS» es un consejo más complicado en Linux que en Windows.
Los paquetes .deb y .rpm de CamLooper hacen esto por ti. Declaran v4l2loopback-dkms como dependencia, instalan los archivos de modules-load.d y modprobe.d mostrados arriba y cargan el módulo durante la instalación, así que la cámara está lista cuando termina el instalador y también después de cada reinicio. Sin terminal, sin reiniciar, y DKMS la mantiene funcionando entre actualizaciones del kernel.