Canon EOS M10 / M100 / M200 as web cams under Linux

AI-generated; not an actual photo.
Not an actual picture of the EOS M10/M100/M200

[Update 2026.01.03] additionally discusses the M200.

Since telework became a reality for me, I have constantly tried to upgrade my audio and visual setup; not for the satisfaction of my own vanity but out of mercy for the people who have to stare at me or listen to me. One of the first upgrades was to get a high(er)-quality dynamic microphone with a low-noise amplifier, one of the latter upgrades was a proper camera. Many web cams come with wide-angle lenses which distort the picture; a real camera use lenses with longer focal lengths which distort the picture less, down to the point of not being noticeable any more.

I have used the Canon EOS M10 [M10] for a couple of years and the Canon EOS M100 [M100] for a few weeks, both under Ubuntu and Windows 10 and would like to share my experience. A word of caution: this is not an instruction manual. After reading this post, you’ll know what needs to be done, not how to do it. It is an involved process which requires understanding the technical parts, installing custom firmware and purchasing equipment. I’ve also tested the Canon EOS M200 in late 2025 [M200].

Initial considerations

The baseline being webcams, cost and complexity of an alternative solution need to be competitive. Both Canons are consumer cameras, the EOS M model line has been discontinued, which is why they can be obtained cheaply on the used market.

Given that the primary case is video conferencing and the current video standard is 1080p at 60 fps (afaik MS teams doesn’t stream high resolutions or frames), reaching for higher specs like 4K resolution or 120 frame rate doesn’t make sense and isn’t supported by mainstream video conferencing platforms. What does make sense, however, is high light sensitivity (as I’m working inside), a low-noise image sensors and a low-distortion lens.

The lens should have a focal length between 22mm-35mm, which corresponds roughly to how humans see the world. The lens should also allow for a large aperture to counter the indoor low-light conditions. Ideally the lens would support auto focus, however in my setup that worked only with the M200 (more about that later). In typical tele-conferencing auto focus isn’t absolutely necessary as the distance between camera and subject doesn’t change much. However, there is a correlation between ability to focus and aperture size; the larger the aperture, the harder the focus [DOF].

Bill of materials & steps

  • The camera
  • Camera power supply
  • SD card
  • Streaming PC
  • Patch firmware
  • HDMI grabber
  • HDMI cable (mini HDMI for the M10, micro HDMI for the M100/M200)
  • Lens (EF-M mount)
  • Camera mount
  • Configure the camera for live-streaming
  • Configure optics
  • Record live audio

Computer

I’m using a Linux laptop [VIC] and a variety of Windows laptops. Any laptop with USB 2.0 or USB 3.0 I have tried worked well. Neither Linux nor Windows require any special configuration or software, except the Elgato HDMI capture stick needs tweaks [ECL] under Linux.

Camera

I’m using a Canon EOS M10 [M10], the Canon EOS M100 [M100] and lately the Canon EOS M200 [M200]. All three are discontinued amateur model lines, which makes them cheap on the second-hand market. Almost all Ms I bought showed little signs of usage, so I suspect that the target consumer market segment was amateurs who tried to get into photography and gave up after a few shots. Thanks to lens adapters, there is a huge variety of old and new lenses from different manufacturers which can be mounted on the cameras.

The M10 and M100 require a patched firmware (more about that later) for use with live streaming; with the M200 Canon finally realised the treasure they were sitting on and the camera can be used for streaming without firmware patches. The reason for these limitations is that the HDMI output was probably envisioned by Canon to be used in conjunction with a monitoring panel, so it shows all kind of information overlays which cannot be switched off with the stock firmware. You might want to Google “clean HDMI out” for more.

M10 vs M100: while the M100 outperforms the M10 on paper, I think the M10 is better suited for in my case. The M10’s 18MP sensor has a lower resolution than the M100’s 24MP sensor, but is less noisy in low-light conditions such as in-door recording. In both cases the real limit is the 1080i HDMI output resolution. The custom firmware (more later) is harder to apply on the M100 than the M10. The only reason to get the M100 is either because you’ve sorted out the lighting situation better than I have or because you need the M100’s 60 fps output, as the M10’s video recording is limited to 30 fps.

Power supply

I’m using an after-market power supply which plugs into the camera instead of a battery, eg. something like this [CRG].

Custom firmware

The CHDK [CHDK] project maintains customised firmware for many Canon cameras. It unlocks and augments features, like scripting, clean HDMI output and video recording past 30 minutes, which is important for live streaming. Thankfully the camera isn’t flashed with CHDK firmware; instead, the camera boots from a specially prepared SD card, making the procedure safe and reversible. Installing CHDK on the M10 is relatively easy following the instructions; the M100 isn’t officially supported, but there is an experimental build [C100] that works for me. This is probably the most involved step and requires getting familiar with the camera and it’s setup. An important caveat: auto-focus doesn’t really work, as it leaves an indelible watermark in the picture. The M200 works without CHDK.

Important caveat: CHDK requires that the camera is already patched to a specific (not necessarily the latest) version of the stock firmware. So make sure you verify which firmware version your prospective acquisition is on and/or that you can patch it to the required stock firmware version before installing CHDK prior to making a decision.

HDMI video grabber

Both Canons output video over USB and HDMI. I’m using HDMI as I couldn’t get USB video to work neither reliably nor to any resolution above VGA. The M10 outputs HDMI in 1080i at 30 fps, the M100 and M200 at 1080i and 60 fps – note that both video signals are interlaced. Any no-name, sub 15€ HDMI-to-USB video grabber I have tried worked well under Linux and Windows. Microsoft Teams [MST] would occasionally freeze up with cheap grabbers, which is why I switched to the Elgato Cam Link 4K [ELG] – which has some issues [ECL] under Linux, as discussed.

Even if your laptops has an HDMI port, the camera can’t be directly connected to it without a frame grabber, as in all likelihood it can only output HDMI and not input it.

As I’m using a dedicated microphone, I have not experimented with sound capture from the camera.

HDMI cable

I got a cheap mini HDMI cable for the 10M and a micro-HDMI cable for the M100 / M200 as they have different HDMI connectors.

Lenses

I experimented with various lenses. For my setup, lenses should have a focal length around 30mm as this approximates how people view the world and doesn’t distort the image noticeably. A large aperture is useful for indoor, low-light recording. Strictly speaking it’s not necessary, but it helps as the camera otherwise boosts ISO which increases image noise. The M’s use the Canon EF-M system of lenses.

The ones I’m using more often:

The 15-45mm kit lens [EFM] is a great all-rounder with variable zoom, a decent aperture range and variable focal length and auto focus. When set to around 30mm it mimics the human eye, so the view looks natural. It’s a great lens with low distortion and a clear image. This lens would be my favourite if it weren’t for the a-bit-too-low aperture size for indoor recording on a cloudy day. I’m using it mostly with the M10, because of the M10’s higher light sensitivity which compensates for the smaller aperture. On the plus side, the smaller aperture makes focusing easier. Although the lens supports automatic zoom and focus, my setup doesn’t use either (because of CHDK).

The 22mm pancake lens [PCK] is light and compact, has a huge aperture and handles bad lighting like a pro. The wide-angle view isn’t overly distorted, the picture is clear and colours look natural. Unfortunately it doesn’t zoom, at all, and because of the wide angle view there is a bit more of the background in the picture than I’d like. Although the lens supports automatic focus, my setup doesn’t use either. I’m using the lens mostly with the M100 because of its lower light sensitivity.

The TT Artisan 35mm [TTA] is currently my favourite lens which I’m using both with the M10 and the M100. It is by far the cheapest lens discussed here, has a variable aperture and focus, but no zoom. For lack of a better term, the picture looks “cinematic”, like watching a movie and not at all “digital”, which is a refreshing look. The fixed lens zoom is a tiny bit too high for my taste and requires setting the camera farther away than I’d like, but the huge aperture (f1.4) makes it ideal for low-light conditions. The lens doesn’t have any electric zoom or focus, which is fine for my setup.

Tripod

I’m using a second-hand tripod which shows its age. Whatever you pick, it’s important that the camera mounts on firmly and that the height is adjustable. The lens should be set at about the height of your eyes, unless you’re on some weird power trip.

Optimising the picture

The default settings work reasonably well with sufficient lighting, but in-door recording ends up with noisy/grainy video. The automatic settings don’t work that well because the Ms are over-spec’d for our humble use case and the camera tries to balance settings for high-end video. As the HDMI output is just meant for control monitoring, the camera doesn’t know that we want to “just” stream low-resolution video. Hence our goal is to fix as many parameters as possible to the constraints of our streaming setup and optimise the remaining ones for quality.

First, we’re switching the mode dial to video recording as this unlocks a few settings not available in photography mode.

Set the output mode to NTSC and the “right” frame rate (60 fps in my case). Normally this shouldn’t affect how the video is streamed over HDMI, but it seems to affect the frame rate and aspect ratio. The selected frame rate depends on your settings, eg. HDMI capture card capabilities, streaming software codecs etc. In the menu settings for Movie rec quality I picked FHD 60fps.

Set the shutter speed to the same frame rate (eg. 1/60 in my case). The higher the shutter speed, the more often the camera scans the image sensor, which reduces the amount of light it accumulates between frames. Higher shutter speeds will produce more frames per second, reduce motion blur but darken the picture.

Set ISO to automatic. This is the variable parameter which the camera will adjust depending on lighting conditions.

Last, increase the lens aperture until the picture looks over-exposed or you’ve reached the maximum. If the picture looks over-exposed it means that the camera couldn’t reduce ISO enough and there’s actually a chance of destroying the image sensor. Aperture should be set to the largest possible value without over-exposing the image.

Now we need to switch off auto-focus as it leaves a white rectangle in the picture which can’t be switched off. After that, we adjust the lens zoom and focus. Unless you have really long arms, you’ll be sitting too far away from the lens to adjust it properly, so you need a you-substitute to sit in your place while operating the camera dials. I used the microphone as a visual target for focusing, as it sits about where my head normally is.

Setting up the M200

The M200 supports clean HDMI [M2C] and auto-zoom. The (one-time) setup:
1. select movie mode via the dial on the top
2. enter the settings menu (the red section)
3. select the 5th tab
4. select HDMI info disp -> Clean HDMI FHD

Note that this pins the output resolution, which henceforth can’t be changed with other settings.

You probably want to disable power saving in the yellow menu section.

Resources

[M10] Canon EOS M10 review
https://www.dpreview.com/products/canon/slrs/canon_eosm10

[M100] Canon EOS M100 review
https://www.dpreview.com/products/canon/slrs/canon_eosm100

[DOF] Depth of field
https://www.creativelive.com/photography-guides/aperture-depth-of-field

[VIC] Ubuntu on the HP Victus
https://blog.georgovassilis.com/2023/04/27/ubuntu-22-04-on-the-hp-victus/

[ELG] Elgato Cam Link 4K
https://www.elgato.com/us/en/p/cam-link-4k

[EFM] 15-45mm kit lens
https://www.dpreview.com/articles/5527998680/canon-introduces-eos-m10-and-collapsible-ef-m-15-45mm-f3-5-6-3-is

[PCK] EF-M 22mm F/2 STM lens
https://www.canon-europe.com/lenses/ef-m-22mm-f-2-stm-lens/

[TTA] TTArtisan 35mm 1.4 lens
https://www.ttartisan.com/?list_10/77.html

[ECL] Elgato Cam Link and Linux video sources
https://blog.georgovassilis.com/2024/06/03/filter-linux-video-sources/

[MST] MS Teams video freezing
https://blog.georgovassilis.com/2024/06/05/microsoft-teams-video-freezing/

[CHDK] CHDK
https://chdk.fandom.com/wiki/CHDK

[C100] EOS M100 porting
https://chdk.setepontos.com/index.php?topic=13943.msg147014#msg147014

[CRG] Camera power supply
https://www.amazon.com/Mobile-Charger-ACK-E12-Coupler-Battery/dp/B073Z75LSF

[M200] Canon EOS M200 review
https://www.dpreview.com/reviews/canon-eos-m200-review

[M2C] Cannon EOS M200 clean HDMI
https://www.youtube.com/watch?v=IOI5AhAC9cQ

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.