Canon DSLR Webcam on Arch Linux
Ever wanted to use your Canon camera as a webcam on Arch Linux? This guide covers everything you need to get your Canon cam streaming video to /dev/video* using gphoto2, ffmpeg, and the v4l2loopback kernel module.
📦 Requirements
You’ll need:
- A Canon camera (tested with EOS 700D)
- USB cable (mini/micro/USB-C depending on model)
- Dummy battery (strongly recommended for long sessions)
- Arch Linux (or a derivative like EndeavourOS, Manjaro, etc.)
Install dependencies
Use pacman or your AUR helper to install:
sudo pacman -S gphoto2 ffmpeg v4l2loopback-dkms linux-headers
Ensure your user is in the video group:
sudo usermod -aG video $USER
Then reboot or relog to apply.
🛠Configuring the loopback virtual device
- Create a V4L2 Virtual Device Install v4l2loopback if you haven’t already:
sudo modprobe v4l2loopback devices=1 video_nr=10 card_label="DSLR Cam" exclusive_caps=1
This creates /dev/video10 as a new virtual webcam.
⚠️ Choose a video_nr not currently in use (video10 is usually safe).
⚙️ Camera Setup
To prevent your Canon camera from shutting off mid-stream:
- Go to the settings menu (wrench icon).
- Find Eco Mode.
- Set it to Off.
Then switch your camera to Movie mode.
🧪 Testing the Stream
You can stream the live preview using gphoto2 piped to ffmpeg:
gphoto2 --stdout --capture-movie | \
ffmpeg -f mjpeg -i - \
-vcodec rawvideo -pix_fmt yuv420p -s 1920x1080 -r 60 \
-f v4l2 /dev/video2
✅ Adjust
-sfor resolution,-rfor frame rate, and/dev/video2depending on your device setup.
You can find your active video devices via:
v4l2-ctl --list-devices
🔁 Create a Helper Script
Save this as canon-webcam.sh:
#!/bin/bash
sudo modprobe -r v4l2loopback
sudo modprobe v4l2loopback exclusive_caps=1 max_buffers=2 card_label="Canon Cam"
sudo pkill -9 gphoto2
gphoto2 --stdout --capture-movie | \
ffmpeg -f mjpeg -i - \
-vcodec rawvideo -pix_fmt yuv420p -s 1920x1080 -r 60 \
-f v4l2 /dev/video2
Make it executable:
chmod +x canon-webcam.sh
Then just:
./canon-webcam.sh
🎥 Using it in Zoom, OBS, etc.
Once your camera is streaming to /dev/video2, you can select it in:
- OBS Studio (under Video Capture Devices)
- Zoom / Google Meet / Discord (if they support V4L2 devices)
- VLC:
Media → Open Capture Device → /dev/video2
🛠️ Troubleshooting
- Permission Denied: Ensure your user is in the
videogroup. - No Output: Try switching video ports or reducing resolution.
- Device Not Found: Use
v4l2-ctlto verify the virtual camera is created.
🧾 References
Happy streaming!