Skip to content

Instantly share code, notes, and snippets.

@wecacuee
Last active September 14, 2026 18:18
Show Gist options
  • Select an option

  • Save wecacuee/5f742a4f459e4a8191ef94ae5ca53f95 to your computer and use it in GitHub Desktop.

Select an option

Save wecacuee/5f742a4f459e4a8191ef94ae5ca53f95 to your computer and use it in GitHub Desktop.
Custom modeline is accepted but produces no signal (HDMI extenders, scalers, switchers)

Custom modeline is accepted but produces no signal (HDMI extenders, scalers, switchers)

If the display is not connected directly but through an HDMI extender, scaler, matrix switcher, or similar AV device (e.g. Extron, Crestron), a modeline generated with {{ic|cvt}} or {{ic|gtf}} may be accepted by {{ic|xrandr}} (the output reports the new resolution as active) while the screen itself shows no picture. This happens because such devices are built around the fixed [https://en.wikipedia.org/wiki/CEA-861 CEA-861/CTA-861] timing table used by HDMI/TV equipment, and their receiver chips may refuse to sync to a VESA CVT-generated timing even at the identical resolution and refresh rate, since CVT and CEA-861 define different blanking intervals (and therefore a different pixel clock) for the same active resolution. This can happen even when the device's own EDID does not advertise the resolution at all: some devices' EDID under-reports what their receiver hardware can actually lock onto.

Compare the device's own advertised modes in xrandr --verbose: if its listed timings use round CEA-standard pixel clocks (e.g. 74.250MHz for 720p60, 27.000MHz for 480p60), the device is CEA-861-oriented and a CVT/GTF modeline for a higher resolution is likely to be rejected even though the same resolution works fine on a directly-connected computer monitor.

If a CVT-based custom mode results in no signal, try the standard CEA-861 detailed timing for that resolution instead of one computed by cvt. For example, 1920x1080@60Hz per CEA-861/CTA-861 (VIC 16) uses a 148.5MHz pixel clock, distinct from the 173.00MHz (standard CVT) or 138.50MHz (CVT reduced blanking, {{ic|cvt -r}}) that {{ic|cvt}} would generate for the same resolution:

$ xrandr --newmode "1920x1080_CEA" 148.50 1920 2008 2052 2200 1080 1084 1089 1125 +hsync +vsync
$ xrandr --addmode HDMI-1 1920x1080_CEA
$ xrandr --output HDMI-1 --mode 1920x1080_CEA

Unlike cvt, there is no command-line tool included with X.Org to generate CEA-861 timings; they are a fixed table rather than a formula, so the values must come from the CEA-861/CTA-861 specification itself (or be read from the detailed timing descriptor of a directly-connected HDMI display's own EDID, which will already encode them, e.g. via edid-decode or xrandr --verbose).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment