feat: HDMI refresh boost per display, with a Saved displays screen

Rates are saved per display (EDID ID) and loaded by the hotplug script
for whichever display is connected. The item is on only while the
connected display is boosted; unticking removes just that one. The app
lists the saved displays and removes any of them (hdmi-forget).
This commit is contained in:
theupriser committed 2026-09-26 16:13:45 +02:00
1 parent 8840e24d1a
commit 617f5aa613
8 files changed
+293 -107

No files matched your search

+21 -15
View File
@@ -259,24 +259,30 @@ ticked by default, run from the desktop in Konsole):
to each step, lowest first. Each one needs a "y" within 15 s
(`WIZARD_HDMI_CONFIRM_SECONDS` for tests); anything else switches back
and stops.
5. Keeps only the confirmed steps, for that display only:
`/usr/lib/firmware/edid/steamify-<connector>.bin`, and the display's ID
(manufacturer, model, serial, date: EDID bytes 8-17) in
`/etc/steamify/hdmi-edid.conf`. `steamify-edid.service` (at boot, before
the login manager) and a udev rule (`90-steamify-edid.rules`, every drm
hotplug) run `/usr/local/bin/steamify-edid-hotplug`, which reads the
connected display's ID over DDC (the real display, even while an override
is loaded) and loads the file through debugfs only when it matches.
Another display, or no display, resets the port to the display's own
EDID, so a different monitor never gets the boosted timings. The state
per port is kept in `/run/steamify-edid`, so the hotplug the script
triggers itself doesn't loop.
5. Saves the confirmed steps for that display: the EDID as
`/usr/lib/firmware/edid/steamify-<id>.bin`, where `<id>` is the display's
manufacturer, model, serial and date (EDID bytes 8-17), and a line in
`/etc/steamify/hdmi-edid.conf` (id, name, mode, rates). Other saved
displays are kept.
`steamify-edid.service` (at boot, before the login manager) and a udev rule
(`90-steamify-edid.rules`, every drm hotplug) run
`/usr/local/bin/steamify-edid-hotplug`. Per HDMI port it reads the connected
display's ID over DDC (the real display, even while an override is loaded)
and loads that display's saved EDID through debugfs, or resets the port to
the display's own EDID when there is none, or no display. What's loaded per
port is kept in `/run/steamify-edid`, so the hotplug the script triggers
itself doesn't loop.
The item is on when the connected display runs on its saved EDID; with
another display it's off, and ticking it sets that one up. Turning it off
removes the connected display's EDID; the unit and rule go with the last
one. The app's **Saved displays** screen (▶ on the item) lists every saved
display and removes any of them. Unpinning the kernel removes them all.
Versions before 2.1.0 used `drm.edid_firmware=` on the kernel command line
(and the initramfs), which applied to any display on that port; re-applying
moves such a setup over to the hotplug script. Re-applying with another
display connected tests that one instead. Turning it off removes the files,
the unit and the rule. Untick it before removing the
saves such a setup per display and removes the parameter. Untick it before removing the
kernel pin: newer kernels read the EDID themselves and can do HDMI 2.1.
## BIOS updates (Steam Machine)