Elgato HD60X and Linux

3 minutes read

Recently got an Elgato HD60X from FB Marketplace in the intent that I’ll be streaming more. This device is truly magical and sleek.

One thing that was a bit hairy to figure out was getting 4k output to be passed through at 60Hz on Linux. My setup is rather simple, I have a Linux machine that is connected via HDMI to the Elgato and the output of that goes to a HDMI switch which ultimately connects to a monitor. The Elgato is connected via USB-C to an M1 mac for streaming. The Elgato supports capture at 1080p 60Hz but allows for does support passing through 4k at 60Hz according to their documentation. My intention is to be able to use my display at 4k 60Hz while I can still stream/record at 1080p 60Hz. While this seemed to work initially, it turned out to be extremely unreliable after a bit. Every time I’d reboot my Linux machine, it would revert back to using the display at 4k 30Hz much to my chagrin. Using a 4k device at 30Hz is probably one of the hardest to do, outside of probably using the Internet to watch a video on a flight. :D

I first suspected it could be a problem with my wires and I tried each of them separately and all three were capable of handling 4k at 60Hz. Then I suspected my simple HDMI switch which also seemed to work standalone. The culprit was definitely the Elgato although I couldn’t determine what the issue was. I tried forcing the resolution and refresh rate through xrandr only for it to complain with the all-too-well-known xrandr: Configure crtc 0 failed error which indicated that forcing a refresh rate isn’t going to cut it.

I also read in many places that Elgato has basically 0 support for Linux and if it doesn’t work, you are probably out on your own. Although reading more closely, this was more for using the Elgato to capture/stream on Linux, rather than have it receive input from a Linux machine. One of the blog posts I looked up also spoke about updating the Firmware. I quickly grabbed the Capture Device Utility on my Mac and started playing around. While my firmware was up to date, I noticed something about the EDID mode in the utility.

Essentially, being a passthrough device, the Elgato presents itself as a device to the host machine, in this case Linux. It has three means to do this - Merged, Internal and Display which Merged being the default and the most sane choice for most folks. In this mode, the Elgato receives the modes from the display it is connected to it merges it with its own internal modes and presents it to the host. The Internal mode is where you can override the settings with a custom .bin file on the capture card. While Display would just passthrough whatever the display presents to the card.

I switched this to Display for true passthrough and it worked! Thankfully, I don’t have to hunt for a new capture card anymore.