v4l2loopback trên Linux: cài đặt, giữ lâu dài và các lỗi thường gặp

Linux không có sẵn camera ảo. Các ứng dụng mở một thiết bị như /dev/video0 rồi đọc khung hình từ đó, và nhân hệ điều hành mặc định rằng phía sau là phần cứng thật. v4l2loopback là một mô-đun nhân tạo ra thiết bị hoạt động như camera nhưng được phần mềm cấp hình ảnh.

Đây là nền tảng của mọi cách dùng camera ảo trên Linux: OBS, các chuỗi xử lý ffmpeg và CamLooper đều ghi vào một thiết bị loopback. Dưới đây là cách thiết lập cho đúng.

Cài đặt

Hãy cài gói DKMS để mô-đun được biên dịch lại tự động mỗi khi nhân được cập nhật:

# Debian / Ubuntu
sudo apt install v4l2loopback-dkms

# Fedora / RHEL
sudo dnf install v4l2loopback

# Arch
sudo pacman -S v4l2loopback-dkms

DKMS rất quan trọng ở đây. Không có nó, mô-đun chỉ được biên dịch cho đúng nhân bạn đang chạy lúc cài, và camera ảo sẽ lặng lẽ ngừng hoạt động sau lần cập nhật nhân kế tiếp.

Nạp mô-đun

sudo modprobe v4l2loopback

Xác nhận thiết bị đã có:

lsmod | grep v4l2loopback
ls -l /dev/video*

Các tùy chọn hữu ích khi nạp:

sudo modprobe v4l2loopback \
  devices=1 \
  video_nr=10 \
  card_label="Virtual Camera" \
  exclusive_caps=1
  • video_nr=10 cố định thiết bị ở /dev/video10 để không đụng với webcam thật
  • card_label đặt tên mà các ứng dụng hiển thị trong danh sách camera
  • exclusive_caps=1 là tùy chọn mang tính quyết định — nó khiến thiết bị chỉ công bố khả năng thu hình khi có thứ gì đó đang ghi vào. Chrome, Firefox và một số ứng dụng Electron bỏ qua các thiết bị loopback thiếu tùy chọn này, và đó là lý do một camera có thể thấy trong v4l2-ctl nhưng lại vắng mặt trong trình duyệt

Giữ lại sau khi khởi động lại

modprobe chỉ có tác dụng cho tới lần khởi động lại. Hai tệp sau giúp giữ nó lâu dài:

# /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

Tệp thứ nhất nạp mô-đun lúc khởi động; tệp thứ hai truyền các tùy chọn cho nó. Rất nhiều người chỉ viết tệp đầu rồi thắc mắc vì sao các tùy chọn biến mất.

Kiểm tra mà không cần ứng dụng nào

Đẩy một video chạy lặp vào thiết bị bằng ffmpeg:

ffmpeg -stream_loop -1 -re -i video.mp4 \
  -f v4l2 -pix_fmt yuv420p /dev/video10

-re điều tiết luồng theo thời gian thực (thiếu nó, ffmpeg ghi nhanh hết mức có thể và kết quả không dùng được), -stream_loop -1 lặp vô hạn, còn yuv420p là định dạng điểm ảnh mà các ứng dụng dùng webcam mong đợi. Mở một trang kiểm tra webcam trong trình duyệt, bạn sẽ thấy video.

Các lỗi thường gặp

modprobe: ERROR: could not insert 'v4l2loopback': Required key not available

Secure Boot đang từ chối mô-đun chưa ký. Bạn có thể đăng ký một Machine Owner Key rồi ký mô-đun, hoặc tắt Secure Boot trong firmware. Các bản phân phối cung cấp sẵn mô-đun đã ký thì hoàn toàn không gặp vấn đề này.

Mô-đun biên dịch được nhưng không thấy thiết bị /dev/video

Hãy xem dmesg | tail ngay sau khi chạy modprobe. Sự không khớp phiên bản giữa mô-đun và nhân đang chạy sẽ hiện ở đó, và đây là dấu hiệu quen thuộc cho thấy DKMS chưa biên dịch lại sau khi cập nhật.

Camera tồn tại nhưng trình duyệt không thấy

Hãy nạp mô-đun kèm exclusive_caps=1. Đây là nguyên nhân phổ biến nhất, bỏ xa các nguyên nhân còn lại.

Ứng dụng Flatpak không thấy camera

Sandbox chặn quyền truy cập thiết bị cho tới khi bạn cấp:

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

Bỏ qua toàn bộ những việc này

Tất cả những gì ở trên chỉ phải làm một lần, nhưng vẫn là một phiên làm việc trong terminal và một lần khởi động lại trước khi bạn có thể phát video làm camera — và đó là lý do lời khuyên "cứ dùng OBS" khó thực hiện ở Linux hơn nhiều so với Windows.

Các gói .deb.rpm của CamLooper làm giúp bạn việc đó. Chúng khai báo v4l2loopback-dkms là phụ thuộc, cài các tệp modules-load.dmodprobe.d như trên, đồng thời nạp mô-đun ngay trong lúc cài. Nhờ vậy camera sẵn sàng ngay khi trình cài đặt kết thúc, và sẵn sàng lại sau mỗi lần khởi động máy. Không cần terminal, không cần khởi động lại, và DKMS giữ cho nó hoạt động qua các lần cập nhật nhân.

Dùng thử CamLooper

Miễn phí, chạy hoàn toàn cục bộ, sẵn sàng trong chưa đầy một phút.

Tải CamLooper