v4l2loopback в Linux: установка, постоянство и типичные ошибки

В 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

Secure Boot отклоняет неподписанный модуль. Либо зарегистрируйте Machine Owner Key и подпишите модуль, либо отключите Secure Boot в прошивке. Дистрибутивы, поставляющие подписанную сборку модуля, избавляют от этой проблемы полностью.

Модуль собирается, но устройство /dev/video не появляется

Посмотрите dmesg | tail сразу после modprobe. Там видно несоответствие версий модуля и работающего ядра — обычный признак того, что DKMS не пересобрал модуль после обновления.

Камера есть, но браузеры её не видят

Загрузите модуль с exclusive_caps=1. Это с большим отрывом самая частая причина.

Приложения Flatpak не видят камеру

Песочница блокирует доступ к устройствам, пока вы его не выдадите:

flatpak override --user --device=all com.obsproject.Studio

Как обойтись без всего этого

Всё вышеописанное делается один раз, но это по-прежнему сеанс в терминале и перезагрузка до того, как вы сможете воспроизвести видео как камеру, — и именно поэтому совет «просто возьми OBS» в Linux даётся тяжелее, чем в Windows.

Пакеты .deb и .rpm CamLooper делают это за вас. Они объявляют v4l2loopback-dkms зависимостью, устанавливают показанные выше файлы modules-load.d и modprobe.d и загружают модуль во время установки, так что камера готова сразу после завершения установщика и снова после каждой перезагрузки. Без терминала, без перезагрузки, а DKMS поддерживает её работоспособность при обновлениях ядра.

Попробуйте CamLooper

Бесплатно, всё локально, запуск меньше чем за минуту.

Скачать CamLooper