v4l2loopback ב-Linux: התקנה, קביעוּת ושגיאות נפוצות
ל-Linux אין מצלמה וירטואלית מובנית. אפליקציות פותחות התקן כמו /dev/video0 וקוראות ממנו פריימים, והליבה מצפה שמאחוריו יעמוד חומרה אמיתית. v4l2loopback הוא מודול ליבה שיוצר התקן שמתנהג כמצלמה אך מוזן על ידי תוכנה.
הוא הבסיס לכל תהליך עבודה עם מצלמה וירטואלית ב-Linux: OBS, צינורות ffmpeg ו-CamLooper כולם כותבים להתקן loopback. כך מגדירים אותו כראוי.
התקנה
התקינו את חבילת ה-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 מתעלמות מהתקני loopback שחסרה בהם, ולכן מצלמה עשויה להופיע ב-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 שומר עליה עובדת גם אחרי עדכוני ליבה.