‏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 שומר עליה עובדת גם אחרי עדכוני ליבה.

נסו את CamLooper

חינם, הכול מקומי, ומוכן בפחות מדקה.

הורדת CamLooper