v4l2loopback w Linuksie: instalacja, trwałość i typowe błędy
Linux nie ma wbudowanej kamery wirtualnej. Aplikacje otwierają urządzenie takie jak /dev/video0 i odczytują z niego klatki, a jądro zakłada, że stoi za nim prawdziwy sprzęt. v4l2loopback to moduł jądra, który tworzy urządzenie zachowujące się jak kamera, ale zasilane przez oprogramowanie.
Jest podstawą każdego scenariusza z kamerą wirtualną w Linuksie: OBS, potoki ffmpeg i CamLooper zapisują do urządzenia pętli zwrotnej. Oto jak skonfigurować go poprawnie.
Instalacja
Zainstaluj pakiet DKMS, aby moduł był automatycznie przebudowywany przy każdej aktualizacji jądra:
# Debian / Ubuntu
sudo apt install v4l2loopback-dkms
# Fedora / RHEL
sudo dnf install v4l2loopback
# Arch
sudo pacman -S v4l2loopback-dkms
DKMS ma tu znaczenie. Bez niego moduł jest kompilowany dla jądra obecnego w chwili instalacji, a twoja kamera wirtualna po cichu przestaje działać po następnej aktualizacji jądra.
Ładowanie modułu
sudo modprobe v4l2loopback
Sprawdź, czy urządzenie istnieje:
lsmod | grep v4l2loopback
ls -l /dev/video*
Przydatne opcje przy ładowaniu:
sudo modprobe v4l2loopback \
devices=1 \
video_nr=10 \
card_label="Virtual Camera" \
exclusive_caps=1
video_nr=10przypina urządzenie do/dev/video10, aby nie kolidowało z prawdziwą kamerącard_labelustawia nazwę wyświetlaną przez aplikacje na liście kamerexclusive_caps=1to opcja kluczowa — sprawia, że urządzenie ogłasza zdolność przechwytywania tylko wtedy, gdy coś do niego zapisuje. Chrome, Firefox i kilka aplikacji opartych na Electronie ignorują urządzenia pętli zwrotnej bez niej, i właśnie dlatego kamera bywa widoczna wv4l2-ctl, a brakuje jej w przeglądarce
Jak przetrwać restart
modprobe działa tylko do ponownego uruchomienia. Trwałość zapewniają dwa pliki:
# /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
Pierwszy ładuje moduł przy starcie systemu, drugi przekazuje mu opcje. Często pisze się tylko ten pierwszy, a potem zastanawia, gdzie podziały się ustawienia.
Test bez żadnej aplikacji
Wypchnij zapętlony film do urządzenia za pomocą ffmpeg:
ffmpeg -stream_loop -1 -re -i video.mp4 \
-f v4l2 -pix_fmt yuv420p /dev/video10
-re nadaje strumieniowi tempo czasu rzeczywistego (bez tego ffmpeg zapisuje tak szybko, jak potrafi, a wynik nie nadaje się do użytku), -stream_loop -1 powtarza w nieskończoność, a yuv420p to format pikseli, którego oczekują odbiorcy obrazu z kamery. Otwórz w przeglądarce stronę testu kamery — powinieneś zobaczyć film.
Typowe błędy
modprobe: ERROR: could not insert 'v4l2loopback': Required key not available
Secure Boot odrzuca niepodpisany moduł. Albo zarejestruj klucz Machine Owner Key i podpisz moduł, albo wyłącz Secure Boot w firmware. Dystrybucje dostarczające podpisaną wersję modułu unikają tego problemu całkowicie.
Moduł się kompiluje, ale nie pojawia się żadne urządzenie /dev/video
Sprawdź dmesg | tail zaraz po modprobe. Niezgodność wersji między modułem a działającym jądrem widać właśnie tam i jest to typowy sygnał, że DKMS nie przebudował modułu po aktualizacji.
Kamera istnieje, ale przeglądarki jej nie widzą
Załaduj moduł z exclusive_caps=1. To zdecydowanie najczęstsza przyczyna.
Aplikacje Flatpak nie widzą kamery
Piaskownica blokuje dostęp do urządzeń, dopóki go nie przyznasz:
flatpak override --user --device=all com.obsproject.Studio
Jak pominąć to wszystko
Wszystko powyżej to konfiguracja jednorazowa, ale wciąż oznacza sesję w terminalu i restart, zanim będziesz mógł odtworzyć film jako kamerę — i właśnie dlatego rada „po prostu użyj OBS” jest w Linuksie trudniejsza niż w Windows.
Pakiety .deb i .rpm CamLoopera robią to za ciebie. Deklarują v4l2loopback-dkms jako zależność, instalują pokazane wyżej pliki modules-load.d i modprobe.d oraz ładują moduł podczas instalacji, więc kamera jest gotowa, gdy instalator zakończy pracę, i ponownie po każdym restarcie. Bez terminala, bez restartu, a DKMS utrzymuje ją w działaniu mimo aktualizacji jądra.