A capture card works on Linux the moment you plug it in only if it speaks plain UVC. The best capture card for Linux is one the kernel’s uvcvideo driver already knows. Then OBS, ffmpeg and a bare console all see the same /dev/video node, and you never wait on a driver Windows got first. That rules out some of the most popular 4K game capture boxes.
This guide picks between Magewell’s two USB Capture HDMI models, the Elgato Cam Link 4K and the $10 to $30 generic MS2130 dongles, for two jobs: feeding OBS Studio, and showing a headless server’s screen as a cheap crash cart. You’ll also read what a card really sends with v4l2-ctl and fix the two errors almost everyone hits. Every v4l2-ctl, ffmpeg and ffplay command below was run on Ubuntu 26.04 in October 2026, and they hold for any UVC card.
Pick the right Linux capture card
Start from what the card has to do, not from the biggest number on the box. A server console or a camera at 1080p is a small job, while 4K capture with a monitor still attached is a much bigger one. Prices below are the Amazon listings on the day of writing, so treat them as bands and check the live price before you buy.
| Award | Pick | Why it wins | Approx. price |
|---|---|---|---|
| Best for Linux overall | Magewell USB Capture HDMI Gen 2 | Vendor lists Linux V4L2 support, uncompressed YUY2, Ubuntu and CentOS tool builds | About $320, check on Amazon |
| Best for 4K with a monitor attached | Magewell USB Capture HDMI 4K Plus | 4K30 capture, NV12 and I420, HDMI 2.0 loop-through | About $540, stock is thin, check on Amazon |
| Best for a camera in OBS | Elgato Cam Link 4K | Mainline kernel carries fixes for it, 4K30 and 1080p60 from a camera’s clean HDMI out | About $90, check on Amazon |
| Cheapest crash cart screen | Generic MS2130 dongle | 1080p60 over USB 3.0 for the price of lunch, check the chip on arrival | $10 to $30, no single listing we can vouch for |
Need a keyboard on the dead server too? Skip to the crash cart section, because a capture card alone gives you video only.
See how we picked and what we tested
We did not have these four cards on a bench, so nothing below claims a frame time or a temperature we did not measure. Specs come from Magewell’s and Elgato’s own spec pages, and the Linux behaviour comes from places that can’t be marketed: the mainline uvcvideo source, the 2021 kernel patch for the Cam Link 4K, and linux-hardware.org probe data for the MS2130 and MS2109 USB IDs. Every source is logged in the article’s sourcing file for the review.
What we did run is the Linux side, which is identical for every UVC card. On an Ubuntu 26.04 VM with kernel 7.0 we created a v4l2loopback device and fed it a 1080p test pattern, first in YUYV and then in MJPEG. Then we ran the same v4l2-ctl, ffmpeg and ffplay commands you’ll run against a real card. That is where the errors and the CPU numbers later in this guide come from.
Three rules decided the shortlist:
- You can capture with the stock kernel, with no vendor module to rebuild after every update.
- You get an uncompressed format at the resolution you care about, so OBS and ffmpeg don’t burn CPU decoding MJPEG.
- You can still buy it new today, which drops Elgato’s HD60 X now that Elgato lists it as discontinued.
Compare the capture cards at a glance
The column that matters most on Linux is the one most reviews skip: which pixel formats the card hands to V4L2. Uncompressed formats such as YUY2 and NV12 go straight into OBS, while MJPEG has to be decoded on your CPU first.
| Card | Best capture mode | Formats to V4L2 | Passthrough | Linux statement |
|---|---|---|---|---|
| Magewell USB Capture HDMI Gen 2 | 1080p up to 75 fps, 720p up to 120 fps | YUY2, UYVY, RGB24, RGB32 | No | Vendor lists Linux, V4L2/ALSA |
| Magewell USB Capture HDMI 4K Plus | 4K30, 1440p60, 1080p60 | NV12, I420, YUY2, UYVY, RGB24, RGB32 | HDMI 2.0, up to 4K60 | Vendor lists Linux, V4L2/ALSA |
| Elgato Cam Link 4K | 4K30, 1080p60 (4K60 only as MJPG on the newest model) | NV12, YU12, YUYV seen by the kernel patch author | No | Not listed by Elgato, works through uvcvideo |
| Generic MS2130 dongle | 1080p60 (4K is input only) | YUYV and MJPEG | Some models | None, works through uvcvideo |
Notice that only Magewell says the word Linux. The other two work because they follow the UVC spec closely enough for the kernel. That is fine until a firmware quirk shows up and nobody at the vendor reads your bug report.
1. Magewell USB Capture HDMI Gen 2
This is the card to buy when the capture has to keep working for years on whatever distro you run. It suits you if you record lectures, run an always-on OBS scene, or capture a lab machine’s console every day.

Magewell’s spec page lists Linux on x86, x64 and ARM with kernel 2.6.35 and later, a V4L2 and ALSA SDK, and OBS, VLC and GStreamer among the compatible software. The Gen 2 captures up to 1080p at 75 fps and 720p at 120 fps from an HDMI 1.4a input, and it sends YUY2, UYVY, RGB24 or RGB32. That means your 1080p60 stream reaches OBS uncompressed, so the CPU only encodes once.
The part that sets it apart from the cheap cards is support. Magewell lists Ubuntu and CentOS builds of its tools next to the Windows and macOS ones, and it was still shipping firmware for the card in July 2026 when we checked. Elgato lists no Linux support for the Cam Link 4K, and the MS2130 dongles have no vendor you could ask.
Skip it if you need 4K, a passthrough port for a monitor, or a budget under $100. At about $320 (check the live price) you’re paying many times the price of an MS2130 dongle for the support and the clean formats. The spec sheet lists no NV12, which hardly matters for OBS but does if your pipeline expects it.
2. Magewell USB Capture HDMI 4K Plus
Pick this one when the source is 4K and someone still needs to watch it on a real monitor. It suits streamers capturing a 4K desktop, and labs recording a machine that a person is also sitting at.
It takes HDMI 2.0 input up to 4096×2160 at 60 Hz and passes it to your monitor untouched. At the same time it captures up to 3840×2160 at 30 fps, or 1440p and 1080p at 60. Unlike the Gen 2 it also offers NV12 and I420, and NV12 is what keeps 4K30 inside a USB 3.0 port’s practical rate. The same Linux SDK and Ubuntu and CentOS tool builds apply, and Magewell gives it a three-year warranty.
It’s the wrong buy if your source tops out at 1080p, because then the Gen 2 does the same job for a lot less. At around $540 with scarce Amazon stock, check the live price and the seller before you order.
3. Elgato Cam Link 4K
This is the Elgato that makes sense on Linux. It suits you if you want a mirrorless camera or a camcorder as a webcam in OBS, Zoom or a browser call, and you’d rather spend under $100 than over $300.
Elgato only lists Windows, macOS and iPadOS, so the Linux story lives in the kernel. In 2021 a kernel developer found that the Cam Link 4K answers UVC format negotiation with a malformed reply. Linux apps were stuck on whatever format came first. The fix sits in mainline uvc_video.c as a match on USB ID 0fd9:0066. A second fix there resets the device when it stalls after the HDMI resolution changed during start-up. Any current distro kernel carries both, so you get NV12 and YU12 at 4K30 and YUYV at 1080p from a stock install.
The part that trips people up is the input. The Cam Link 4K only takes unencrypted HDMI. A camera’s clean HDMI out works, while a streaming box or a console with HDCP on gives you a black frame. It has no passthrough port, and 4K60 needs the newest hardware revision and comes as MJPG only, so plan on 4K30 or 1080p60.
Pass on it if you want vendor help when something breaks, or a monitor on the same signal. At about $90 (check the live price) it’s still the cheapest card here with a known, upstreamed Linux fix.
Know what a generic MS2130 dongle gives you
Most no-name “4K HDMI capture card” sticks between $10 and $30 use one of two MacroSilicon chips. Which one you get matters more than the brand on the shell. The MS2130 is a USB 3.0 chip that takes up to 4K30 in but captures 1080p60 out, in YUYV or MJPEG. The older MS2109 is USB 2.0 and has to compress, so it leans on MJPEG at 720p60 or 1080p30 and your CPU decodes every frame.
Sellers almost never print the chip, which is why we don’t link a single listing here. Buy one that says USB 3.0 and 1080p60, and check what arrived as soon as you plug it in:
lsusb | grep -iE '345f:2130|534d:2109'
A line with 345f:2130 is the MS2130, and linux-hardware.org has dozens of probes of that ID bound to uvcvideo and marked as working. A line with 534d:2109 means you got the USB 2.0 chip, and if 1080p60 was the reason you bought it, send it back. The kernel even carries an audio quirk for the MS2109 in sound/usb/quirks-table.h, because its descriptors claim 96 kHz mono when the audio is really 48 kHz stereo.
Owners report two rough edges with the MS2130 on Linux: it wants a 5 Gbit/s port to offer 1080p60 YUYV, and on a USB 2.0 port it falls back to MJPEG only. Some units also lock up until you unplug them. For a crash cart you use twice a year, that’s a fair trade for the price.
Use a capture card as a headless crash cart
A capture card turns your laptop into the monitor for a server that lost its network. You can read the GRUB menu, a kernel panic or a BIOS error without a cart and a spare screen. It does not give you a keyboard, though, and that’s the limit to plan around. If all you need is to see why the box won’t boot, an MS2130 dongle and ffplay are enough.
Connect the server’s HDMI out to the dongle, plug the dongle into your laptop, and open the video node with ffplay, which ships in Ubuntu’s ffmpeg package. Swap /dev/video0 for the node v4l2-ctl --list-devices shows you:
ffplay -f v4l2 -input_format mjpeg -video_size 1920x1080 -framerate 30 /dev/video0
On our loopback test, where the device was /dev/video10, ffplay opened the stream at once and reported the MJPEG input like this. It’s what you should see before the window paints:
Input #0, video4linux2,v4l2, from '/dev/video10':
Stream #0:0: Video: mjpeg (Baseline), yuvj420p(pc, bt470bg/unknown/unknown), 1920x1080 [SAR 1:1 DAR 16:9], 30 fps, 30 tbr, 1000k tbn, start 1026.593021
MJPEG is the safer pick for a crash cart because it works on any USB port your laptop has left, and a console screen compresses well. Once you also need to type at the BIOS prompt, you’ve outgrown a capture card:
- You want keyboard and mouse over the same USB cable: a USB crash cart adapter such as the Openterface Mini-KVM below does that.
- You want to reach the console from anywhere on the network: an IP-KVM does that, and our JetKVM, PiKVM and NanoKVM comparison picks one for a homelab.
- You’re already locked out of a Proxmox host: follow the headless server recovery walkthrough step by step.
- You fix servers in a rack every week: a 1U rack console drawer keeps a screen and keyboard in the rack for good.
The Openterface Mini-KVM is the closest thing to a capture card with a keyboard attached. Its Linux udev rules match USB ID 534d:2109, the same ID as MacroSilicon’s MS2109 dongles, plus a CH340 serial chip for keyboard and mouse. It captures up to 1080p30 over a USB 2.0 link, so expect full HD as MJPEG rather than raw YUV. Amazon only shows it with a future ship date right now, so buy it from Crowd Supply if you need one this week.
Check what your card really sends with v4l2-ctl
Before you trust the box or this guide, ask the card itself. v4l2-ctl reads the formats straight from the driver, and it comes in the v4l-utils package on Ubuntu, Debian and Fedora alike:
sudo apt install v4l-utils ffmpeg
List the video nodes first, because a laptop’s own webcam usually owns /dev/video0 and a capture card often creates two nodes of its own:
v4l2-ctl --list-devices
Then list the formats for the node you found. Always pass -d: without it, v4l2-ctl reads /dev/video0, and you end up reading your webcam’s formats and blaming the capture card. On our test machine the capture node was /dev/video10:
v4l2-ctl -d /dev/video10 --list-formats-ext
You’ll see each pixel format with the sizes and frame intervals it supports. To check the frame rate the card really delivers, stream 300 frames to nowhere and read the counter at the end:
v4l2-ctl -d /dev/video10 --stream-mmap --stream-count=300 --stream-to=/dev/null
The whole sequence on the Ubuntu 26.04 test box, fed with a 1080p60 YUYV test pattern, looks like this:

Two details are worth reading closely. The format list claimed 30 fps while the stream test counted about 63 fps, because v4l2loopback advertises a default 30 fps interval whatever its feed sends. A real UVC card reports its own intervals, and the stream test is how you confirm the rate you’re actually getting. The driver also reported 4,147,200 bytes per frame, which is 1920 x 1080 x 2 bytes of YUYV and the start of the bandwidth math below.
Work out the USB bandwidth before you buy
Uncompressed video is big, and the USB port decides which formats a card can offer you. Multiply bytes per frame by frames per second and compare it with what the bus can carry. USB 2.0 signals at 480 Mbit/s, which is 60 MB/s on paper and less in practice, while a 5 Gbit/s USB 3.0 port manages around 400 MB/s in practice.
| Mode | Bytes per pixel | Data rate | Fits on |
|---|---|---|---|
| 1080p30 YUYV | 2 | 124 MB/s | USB 3.0 only |
| 1080p60 YUYV | 2 | 249 MB/s | USB 3.0 only |
| 4K30 NV12 | 1.5 | 373 MB/s | USB 3.0, with little headroom, which is why 4K cards use NV12 |
| 4K30 YUYV | 2 | 498 MB/s | Over a 5 Gbit/s port’s practical rate |
| 1080p30 MJPEG | varies | About 2.4 MB/s for our test pattern | USB 2.0 and up |
That table explains most “my 4K card only shows MJPEG” complaints. Plug a USB 3.0 card into a USB 2.0 port, a hub or a long passive cable and it drops to its compressed modes. Uncompressed 1080p simply does not fit. Use a 5 Gbit/s (USB 3.x) port wired straight to the machine whenever you want YUYV or NV12, and remember that a Type-C socket alone doesn’t promise that speed.
Add the card to OBS Studio
OBS on Linux talks to every card in this guide through one source type, so there’s nothing to install beyond OBS itself. If you don’t have it yet, follow our guide to install OBS Studio on Ubuntu or Debian, or the Arch and Manjaro version. Then work through these in order:
- Add a source and choose Video Capture Device (V4L2).
- Pick the card in Device, matching the name
v4l2-ctl --list-devicesshowed you. - Set Video Format to YUYV or NV12 if the card offers it at your resolution, and MJPEG only when it doesn’t.
- Set Resolution and Frame Rate to match the source, then check Color Range if blacks look grey.
- Add an Audio Input Capture source (PulseAudio or PipeWire, depending on your OBS build) for the card’s USB audio device, because V4L2 carries video only.
The format choice costs real CPU, and you can see how much without OBS. We recorded 20 seconds of 1080p30 MJPEG from the test device on a 2-vCPU VM, once re-encoding to H.264 and once copying the MJPEG stream as it arrived:
ffmpeg -f v4l2 -input_format mjpeg -video_size 1920x1080 -framerate 30 -i /dev/video10 -t 20 -c:v libx264 -preset veryfast -crf 23 capture.mkv
The re-encode used 132% CPU, so most of two cores, and wrote a 15 MB file. Copying the stream with -c copy instead used 1% CPU and wrote 47 MB, because nothing was decoded or encoded. A test pattern isn’t real footage, so treat the sizes as a ratio rather than a promise. The lesson still holds: on a small machine, save the stream first and compress it later. Once a capture is recorded, the ffmpeg cheat sheet covers trimming, joining and re-encoding it.
Skip these cards on Linux
Some well-known cards didn’t make the list, and not because they’re bad hardware. Each one has a Linux catch that the box doesn’t mention:
- The AVerMedia Live Gamer Ultra 2.1 lists only Windows, macOS and iPadOS, and its 4K144 figure is MJPEG in AVerMedia’s own Windows app, so you can’t count on it from V4L2.
- ASUS does not state Linux support for the TUF Gaming CU4K30, and we found no Linux report we could cite.
- The Elgato HD60 X still turns up on Amazon, but Elgato lists it as discontinued and names no Linux support.
- The Blackmagic DeckLink Mini Recorder 4K is a PCIe card that needs Blackmagic’s Desktop Video driver, so it is not UVC and will not help a laptop crash cart.
If you already own one of these, it may well work anyway. Run the v4l2-ctl checks above before you blame your distro, and you’ll know within a minute which formats it offers.
Fix the first errors you’ll see
The first two came up on the first run of the test VM, and you’ll meet at least one of them on a fresh install or a headless box. The third is the one hardware problem software can’t fix.
Error: “Cannot open video device /dev/video10: Permission denied”
Video nodes belong to root and the video group with mode 660. A desktop session gets access through logind, but an SSH login or a fresh server account doesn’t, so ffmpeg and v4l2-ctl fail even though the card is fine:

Add your user to the group, then log out and back in so the new group applies:
sudo usermod -aG video $USER
After a fresh login, groups lists video and the same ffmpeg command opens the device. Don’t reach for chmod 666 on the node, because udev resets it the next time you plug the card in.
Error: “Cannot find a proper format for codec ‘mjpeg'”
ffmpeg prints this when you ask for MJPEG from a node that only offers raw formats. We got it by requesting -input_format mjpeg while the device sent YUYV:
[video4linux2,v4l2 @ 0x55688bf0a300] Cannot find a proper format for codec 'mjpeg' (id 7), pixel format 'none' (id -1)
[in#0 @ 0x55688bf0a040] Error opening input: Invalid argument
Error opening input file /dev/video10.
Ask for a format the card lists in v4l2-ctl --list-formats-ext, such as -input_format yuyv422. The reverse mismatch is quieter, and that makes it worse: when we asked for yuyv422 from an MJPEG-only node, ffmpeg took MJPEG without any warning and decoded it on the CPU. Read the Stream #0:0 line every time, because it shows the format you really got.
A black frame from a console or a streaming box
If the device opens, the format is right and the picture is still black, the source is probably sending HDCP. Elgato states plainly that its Game Capture devices can’t record HDCP-protected HDMI, and the Cam Link 4K spec lists its input as unencrypted HDMI only. Turn HDCP off in the source’s settings where it has the option, and test the card with a laptop’s HDMI out first so you know the capture side works.

