Tested successfully on one monitor with EDID manufacturer XMI, product 0x3446, on 2026-10-03. Pressing the menu button caused a brief black screen without opening the OSD. Disconnecting power and video cables did not resolve it. Clearing bit 0x10 at EEPROM address 0x41, verifying the write, and immediately unplugging power restored the menu; the owner confirmed success.
This is an adaptation of supermar1010's original Linux script and firmware research. That source provides the MStar vendor EEPROM protocol, address mapping, explanation of the stuck DDC power flag, and immediate-unplug procedure for product 0x3444, using flag address 0x43.
rm-killer's Windows repair for revision 0x3445 documents the shifted flag address 0x41. Our 0x3446 settings block exactly matched its published example. This adaptation retains the original Linux transport and uses that revised address. The 0x3446 firmware was not disassembled; the layout was inferred from the matching settings and then confirmed by the successful repair on this unit. This does not establish compatibility with every 0x3446 monitor.
The original script stopped because the product ID differed and EEPROM byte 0x00 was 0x00, rather than the expected 0x74.
Observed first 16 EEPROM bytes:
00 10 00 10 00 10 03 80 80 80 80 80 80 46 4b 80
Settings block at 0x40 before and after the verified write:
before: 02 10 00 00 00 00 00 00 00 00 00 00 00 01 00 00
after: 02 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00
All 16 EEPROM read replies in the initial 256-byte snapshot passed checksum checks. Repeated header and settings reads were stable. The entire written 16-byte block matched on readback. Standard ddcutil diagnostics failed on this connection, while vendor EEPROM reads and the repair worked.
Download mi_monitor_osd_fix_3446.py. Use Linux with Python 3 and a direct GPU connection that passes the vendor DDC commands. The script uses only Python's standard library. Identify your monitor's /dev/i2c-N device; bus numbers vary.
Check first, replacing N with the bus number:
sudo python3 mi_monitor_osd_fix_3446.py NThe script checks the EDID and its checksum, requires the observed header and settings pattern, validates vendor reply checksums, saves a 256-byte EEPROM backup in the current directory, and checks that the settings block matches the backup. It defaults to read-only. The settings comparison allows the target bit to be either set or already clear. These exact data checks intentionally limit the repair to the observed configuration; they are not a firmware signature. If a check fails, do not bypass it.
Have the monitor's physical power cable within reach before the next command. Applying the fix writes the 16-byte block at 0x40, changing only bit 0x10 of byte 0x41:
sudo python3 -u mi_monitor_osd_fix_3446.py N --writeAs soon as OK, written and verified appears:
- Immediately unplug the monitor's power cable, not merely its power button.
- Wait 10 seconds, then reconnect power.
- Test the OSD menu.
The original research reports that the monitor periodically saves its old RAM settings back to EEPROM, undoing the repair if power remains connected. Keep your backups. If verification fails, preserve the backup and investigate; this gist does not provide an automatic restore operation.
The original research identifies DDC/CI power mode VCP 0xD6 as the trigger. Disable display-control software features that send it, including “turn display off.”
This writes monitor settings EEPROM and is provided without a guarantee. An incorrect layout can damage monitor configuration. Only one 0x3446 unit was repaired here. The published script was cleaned up after that repair: documentation and attribution were corrected, EDID checksum validation was added, and the settings guard now also accepts an already-cleared flag. Those changes were checked without performing another hardware write. Personal EEPROM backup files are not included in this gist.