‏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

الإقلاع الآمن يرفض الوحدة غير الموقّعة. فإمّا أن تسجّل مفتاح مالك الجهاز (MOK) وتوقّع الوحدة، وإمّا أن تعطّل الإقلاع الآمن من البرنامج الثابت. أما التوزيعات التي تشحن نسخة موقّعة من الوحدة فتتفادى هذا تمامًا.

الوحدة تُبنى لكن لا يظهر أي جهاز ‎/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