Hi, TLDR: I came upon a need to disable a reported modeline, cause it is not working and there is a legacy binary application that stumbles upon it. Looks like there is no tool for that?
Longer version: there is a legendary 1999 game Heroes of Might & Magic III, which had been released for Linux by Loki games. The game itself is 100% playable on a modern FreeBSD (I bet on Linux, too). The game switches to 800x600 with XF86VidModeSwitchToMode API call. Before that it lists available modes with XF86VidModeGetAllModelines and chooses _the last_ 800x600 mode from the list. Since it is a binary file we can't fix that. My fairly modern laptop Thinkpad X1 Carbon Gen7 reports these 800x600 modes: [ 51.809] (II) modeset(0): Modeline "800x600"x60.0 81.00 800 832 928 1080 600 600 602 625 doublescan +hsync +vsync (75.0 kHz d) [ 51.809] (II) modeset(0): Modeline "800x600"x60.3 40.00 800 840 968 1056 600 601 605 628 +hsync +vsync (37.9 kHz d) [ 51.809] (II) modeset(0): Modeline "800x600"x56.2 36.00 800 824 896 1024 600 601 603 625 +hsync +vsync (35.2 kHz d) This is how they are seen with xrandr --verbose: 800x600 (0x6d) 81.000MHz +HSync +VSync DoubleScan h: width 800 start 832 end 928 total 1080 skew 0 clock 75.00KHz v: height 600 start 600 end 602 total 625 clock 60.00Hz 800x600 (0x6e) 40.000MHz +HSync +VSync h: width 800 start 840 end 968 total 1056 skew 0 clock 37.88KHz v: height 600 start 601 end 605 total 628 clock 60.32Hz 800x600 (0x6f) 36.000MHz +HSync +VSync h: width 800 start 824 end 896 total 1024 skew 0 clock 35.16KHz The server easily switches to the first one: >xrandr --output eDP-1 --mode 800x600 But explicitly being asked for the third one it fails after a screen blink: >xrandr --output eDP-1 --mode 0x6f xrandr: Configure crtc 0 failed Same happens if I try to play Heroes III - it fails to switch the mode, cause it picks the last one from available 800x600s. See that if server is compiled with debug: [ 76.795] SwitchToMode - scrn: 0 clock: 36000 [ 76.795] hdsp: 800 hbeg: 824 hend: 896 httl: 1024 [ 76.795] vdsp: 600 vbeg: 601 vend: 603 vttl: 625 flags: 5 ... [ 76.796] Checking against clock: 36000 (36000) [ 76.796] hdsp: 800 hbeg: 824 hend: 896 httl: 1024 [ 76.796] vdsp: 600 vbeg: 601 vend: 603 vttl: 625 flags: 5 [ 76.815] (EE) modeset(0): failed to set mode: No such file or directory To confirm that, I quickly hacked the server not to report this mode via XF86VidModeGetAllModelines and after that Heroes sucessfully run. So, looks like my laptop reports something it can not do and there is no way to override that. Looks like hardware reported modes are not allowed to be deleted via randr API: >xrandr --delmode eDP-1 0x6f X Error of failed request: BadAccess (attempt to access private resource denied) Major opcode of failed request: 140 (RANDR) Minor opcode of failed request: 19 (RRDeleteOutputMode) Serial number of failed request: 32 Current serial number in output stream: 33 Reading through sources it seems the old API XF86VidModeDeleteModeline still can delete it, but is there any working tool left that uses it old API? xvidtune seems to be not functional at all. Any ideas? Sidenote: using legacy X.org Intel driver instead of modeset, I would not see the second mode, but only first and faulty third one. Problem remains: [ 67928.274] (EE) intel(0): failed to set mode: Invalid argument -- Gleb Smirnoff