2 Punkte von GN⁺ 2025-06-16 | 1 Kommentare | Auf WhatsApp teilen
  • Vorstellung einer einfachen Methode, die EDID eines HDMI-Dummy-Steckers mithilfe eines Raspberry Pi zu ändern
  • Ein Dummy-Stecker dient dazu, dass ein Gerät erkennt, als wäre ein Monitor angeschlossen, obwohl kein echtes Ausgabegerät vorhanden ist
  • Durch das Kopieren der EDID-Informationen eines 1080p-Capture-Geräts lässt sich einstellen, dass der Stecker nicht als 4K-Monitor angezeigt wird
  • Mit dem I2C-Controller des Raspberry Pi und Standard-Linux-Tools kann das EEPROM des Steckers gelesen und beschrieben werden
  • Während des gesamten Vorgangs sind die Wahl des richtigen I2C-Busses und ein Backup unerlässlich, um Geräteschäden zu vermeiden

Überblick über Dummy-Stecker und EDID

  • Ein Dummy-Stecker ist ein kleines Dongle-artiges Gerät, das an einen HDMI- oder DVI-Port angeschlossen wird und ohne echte Bildverarbeitung mit einer Minimalbeschaltung dafür sorgt, dass ein Gerät eine Monitorverbindung erkennt
  • Vorhanden sind ein EEPROM-Chip, der die EDID (Extended Display Identification Data) eines Monitors nachbildet, sowie Schaltungen wie Pull-up-Widerstände an +5V
  • Das ist nützlich, damit das Betriebssystem (OS) erkennt, dass ein Display vorhanden ist, etwa bei Headless-Servern oder unbeaufsichtigten Geräten

Ziel und Vorgehensweise

  • Geschildert wird die Erfahrung, die EDID eines vorhandenen HDMI-Dummy-Steckers mit 4K-Unterstützung so zu ändern, dass er nur noch als einfaches 1080p-Gerät erkannt wird
  • Ziel war es, die interne EDID des Dummy-Steckers durch die EDID-Informationen eines HDMI-Capture-Geräts mit 1080p-Unterstützung zu ersetzen
  • Es war nicht sicher, ob sich das EEPROM des Dummy-Steckers beschreiben lässt, aber ein Versuch erschien lohnenswert
  • Da der HDMI-Port des Raspberry Pi Zero mit einem I2C-Controller verbunden ist, ist der Zugriff einfach

Sicherheitshinweise und Beginn des Verfahrens

  • Wird ein solcher Vorgang bei angeschlossenem echten Monitor durchgeführt, besteht bei Monitoren ohne EDID-Schutz das Risiko von Schäden
  • Deshalb sollte nur an Geräten gearbeitet werden, bei denen ein Defekt akzeptabel ist, etwa an einem Dummy-Stecker
  • Außerdem sind die Verwendung des richtigen I2C-Busses sowie das vorherige Auslesen und Prüfen der EDID vor jedem Schreibvorgang zwingend erforderlich

Einrichtung und Vorbereitung

  • Nach der Installation von Raspberry Pi OS Lite werden die Einstellungen mit sudo raspi-config angepasst
  • Installation der I2C-Tools mit sudo apt install i2c-tools (beim Pi Zero ist dafür Netzwerk nötig; alternativ per USB-Ethernet-Adapter oder per chroot auf der SD-Karte)
  • Ein HDMI-auf-Mini-HDMI-Adapter wird benötigt

Erkennung und Backup des EDID-EEPROMs

  • Beim Raspberry Pi Zero wird I2C-Bus 2 verwendet (bei anderen Pi-Modellen ist die Nummer anders)
  • Mit dem Befehl i2cdetect wird geprüft, ob ein Gerät an Adresse 0x50 erkannt wird; das ist die Standardadresse für ein EDID-EEPROM
  • Auffällig ist, dass auch die Adressen 0x51 bis 0x57 antworten, was auf mehrere gespeicherte EDID-Blöcke hinweist
  • Mit get-edid wird ein Backup der ursprünglichen EDID des Dummy-Steckers erstellt; zum Prüfen der Konsistenz wird zweimal gelesen und verglichen
  • Mit od -v -An -txC wird die EDID hexadezimal ausgegeben und anschließend auf edidreader.com validiert

EDID des Capture-Geräts auslesen und auf den Stecker schreiben

  • Nach dem Abziehen des Dummy-Steckers wird das HDMI-Capture-Gerät an den Pi angeschlossen
  • Die EDID des Capture-Geräts wird auf dieselbe Weise ausgelesen und erneut auf Gültigkeit geprüft
  • Danach wird der Dummy-Stecker wieder angeschlossen und die EDID des Capture-Geräts in das EEPROM geschrieben
  • Das Schreiben erfolgt Byte für Byte mit dem Befehl i2cset, vollständig mit Standard-Linux-Tools und bash

Abschließende Prüfung und Ergebnis

  • Nach Abschluss wird die EDID des Dummy-Steckers erneut ausgelesen und per diff mit der Quelldatei verglichen, um die Übereinstimmung zu bestätigen
  • Beim Anschluss an den Testrechner wird das Gerät nicht mehr als ursprünglicher 4K-Monitor, sondern als HDMI-Capture-Gerät erkannt
  • Der Austausch der EDID des Dummy-Steckers war damit erfolgreich

Fazit und praktische Hinweise

  • Mit demselben Verfahren lässt sich auch ein älterer 1080p-Dummy-Stecker in ein 4K-fähiges Gerät umwandeln
  • I2C-Schreibvorgänge sollten ausschließlich auf einem Raspberry Pi durchgeführt werden; ein direkter Versuch an einem normalen PC birgt das Risiko von Hardwareschäden
  • Falls eine solche Funktion benötigt wird, kann dieses Verfahren sehr nützlich sein

1 Kommentare

 
GN⁺ 2025-06-16
Hacker-News-Kommentar
  • Ich möchte einen kleinen Tipp für alle teilen, die das zu Hause ausprobieren möchten: Günstige Dummy-Plugs haben meist nur ein 256-Byte-EEPROM, daher reicht der Speicher nicht aus, um auch EDID-Erweiterungsblöcke für hohe Auflösungen und hohe Bildwiederholraten zu speichern. Es lässt sich also nur bis 1080p60 simulieren; einen 4k240-Monitor etwa kann man damit nicht nachbilden. Außerdem ist bei manchen Produkten die Write-Protect-Leitung bereits verbunden, sodass man zum Schreiben der Daten physisch eingreifen muss, etwa per Löten
  • Ein Nachteil dieser Dummy-Plugs ist, dass sie kein HDCP verarbeiten. Um auf einer Headless-Maschine eine Ausgabe mit bestimmter Auflösung zu erzwingen, sind sie hervorragend geeignet, für Tests von Streaming-Diensten, die HDCP benötigen, aber unbrauchbar. Kennt jemand vielleicht eine HDMI-Dummy-Plug-Lösung, die auch HDCP aushandeln kann? Jedes Mal einen Fernseher als Testgerät zu verwenden, ist mühsam. Eine Lösung, die ich gefunden habe, ist ein HDMI-Multiviewer, der HDCP pro Port einzeln aushandelt
    • Ich verwende einen HDMI-Splitter. Man kann eine vorprogrammierte EDID einstellen oder die EDID von dem an HDMI output 1 angeschlossenen Monitor übernehmen, und solange der Splitter mit Strom versorgt ist, verhält er sich so, als wäre ein Monitor angeschlossen, auch wenn tatsächlich keiner verbunden ist. Der Splitter handelt HDCP mit dem PC oder der Konsole aus und gibt das Signal dann ohne HDCP an den eigentlichen Monitor weiter. Siehe amazon.com
    • Auf Aliexpress gibt es auch viele Angebote, die Geräte bewerben, welche HDCP terminieren und HDMI per Pass-through weiterreichen. Vor dem Kauf sollte man darauf achten
    • HDCP zu entfernen ist nicht einfach. Man stuft auf HDCP 1.4 herunter und verbindet dann ein „compliant“ Gerät mit Unterstützung für den 1.4-Standard als Dummy-Monitor. Wenn man HDCP 1.4 oder höher braucht, ist es nahezu unmöglich
    • Ich habe ein Embedded-System mit HDMI-Ausgang und möchte den Boot-Bildschirm durch einen anderen HDMI-Stream ersetzen, auch ein statisches Bild wäre in Ordnung. An dem Embedded-System selbst kann absolut nichts geändert werden. Ich brauche eine günstige und robuste Methode, nur das HDMI-Signal auszutauschen
    • Ich würde empfehlen, einen HDMI-Splitter zu verwenden, der auf Amazon praktisch als „HDCP-Stripper“ beworben wird
  • Mich würde interessieren, ob es irgendwo Sammlungen von EDID-Binärdateien gibt oder Programme, mit denen man sie bequem erstellen kann. Ich benutze einen programmierbaren EDID-Emulator-Plug, aber bestimmte Auflösungen oder Detailfunktionen direkt einzustellen, etwa 8K-Auflösungen mit DSC, ist schwierig oder unmöglich. github.com/bsdhw/EDID hat zu wenig Material zu neueren Monitoren. Ich habe auch versucht, sie selbst mit dem AnalogWay EDID Editor zu erstellen, aber die feinen Unterschiede bei unterstützten Modi oder deren Priorisierung und ähnliche Details sauber einzustellen, ist nicht einfach
    • Ich habe ein ähnliches Problem erlebt. Ich habe eine günstige 5.1ch-Soundbar gekauft, die sogar Dolby TrueHD unterstützt, aber HDMI funktioniert nur mit Geräten, die eArc unterstützen, also neueren Fernsehern. Wenn ich einen PC anschließe, kann ich nur SPDIF oder aux verwenden, was zu Qualitätsverlust führt. Statt eines Audio-Extractors oder Splitters versuche ich gerade, den edid-Wert des PCs so zu manipulieren, dass die Soundbar ihn als eArc-Gerät erkennt. Es scheint dafür noch keine strengen Richtlinien zu geben
  • Es gibt auch Dummy-Plugs mit Pass-through-Funktion zu kaufen; sie sind nützlich, wenn ältere Systeme Kompatibilitätsprobleme mit hochauflösenden Monitoren haben. Mein AMD-FX8350-System aus dem Jahr 2011 hat zum Beispiel Probleme mit 4K-Ausgabe. Wenn ich den Plug inline einstecke, um 1080p zu erzwingen, skaliert der Monitor automatisch 2x hoch und zeigt das Bild sauber in 4K an
    • Ich habe auch ein paar Pass-through-Geräte. Ich hätte diese Option im Beitrag erwähnen sollen. Mein Produkt ist etwas ungewöhnlich: Es kann die EDID eines Monitors auslesen und speichern und sie dann als Override auf einen anderen Monitor anwenden. Eine weitere interessante Eigenschaft ist, dass sich erzwingen lässt, dass der Monitor immer als verbunden erkannt wird. Einer meiner Monitore verursacht Probleme, weil er beim Ausschalten virtuell abgesteckt wird, und ein Pass-through-Gerät löst das perfekt. Das von mir verwendete Produkt ist das HD-EWB von THWT
  • Auch die in gewöhnlichen Monitoren oder Laptop-Displays gespeicherten edid-Informationen lassen sich mit dieser Methode ändern. Verschiedene Einstellungen des TCON können ebenfalls durch Schreiben auf andere i2c-Adressen geändert werden. Ein Raspberry Pi ist dafür auch nicht nötig, jeder Computer reicht aus
    • Der Autor des Beitrags empfiehlt zwar den Pi, aber zwingend erforderlich ist er nicht. Wenn man die Schritte direkt auf einem PC ausführt, könnte man jedoch versehentlich nicht die EDID, sondern andere Hardware flashen, zum Beispiel das SPD-EEPROM eines RAM-Moduls
    • Flash-Chips haben einen separaten Pin zum Aktivieren bzw. Deaktivieren des Schreibens, und bei den meisten Monitoren oder Fernsehern ist die EDID-Schreibfunktion über die Verdrahtung blockiert. Vermutlich lassen das eher Billiggeräte offen. Wenn das ungeschützt ist, besteht das Risiko, dass schon Spannungsschwankungen beim Lesen einen Schreibvorgang auslösen und der Flash-Speicher beschädigt wird
    • Dass man bei den meisten Monitoren die EDID ändern kann, weist auf eine Schwachstelle bei den Hardwareherstellern hin. Üblicherweise bezieht man vorprogrammierte EEPROMs und lässt den Schreib-Pin gar nicht erst auf High. Geräte mit beschreibbarer Konfiguration auszuliefern, ist kein verbreitetes Design, aber in der Praxis gibt es immer wieder unerwartete Ausnahmen
  • Warum braucht man überhaupt einen Dummy-Plug? Mich würde interessieren, ob es etwas gibt, das sich nicht per Software lösen lässt; ich nutze per Software 18 virtuelle Displays völlig problemlos
    • Ein Beispiel ist bei mir die Nutzung einer Windows-VM auf meinem PC mit einer Software namens Looking Glass. Ich habe zwei GPUs (AMD und NVidia), und die NVidia wird per Passthrough an die Windows-VM weitergereicht. Mit Looking Glass wird die Ausgabe der NVidia-GPU in einem Desktop-Fenster angezeigt, sodass ich Windows-Programme in der VM ohne Leistungseinbußen nutzen kann (seit Windows 7 ist die Nutzung ohne GPU-Beschleunigung schwierig). Allerdings funktioniert die NVidia-GPU nur, wenn ein echtes Display angeschlossen ist. Bei Quadro-GPUs kann man die EDID-Datei des Monitors dumpen und dauerhaft so tun, als sei ein Monitor verbunden, bei normalen Consumer-GPUs geht das aber nicht. In solchen Fällen ist ein Dummy-Plug die einzige Alternative
    • Je nach Kombination aus OS / GPU / Treiber unterscheiden sich die Möglichkeiten zur Einrichtung virtueller Displays stark. Für zusätzliche Displays zum OBS-, Steam- oder Parsec-Game-Streaming ist ein Dummy-Plug viel einfacher. Unter Linux + Xorg + Open-Source-Treibern oder Windows + Nvidia kann es funktionieren, unter MacOS oder Windows + AMD/Intel-GPUs dagegen fast gar nicht
    • Ich benutze einen Chromebox-Mod für Windows/Linux, und wenn am HDMI-Port kein Videogerät hängt, bootet das System überhaupt nicht. Ohne Dummy-Plug ist man dann blockiert
    • Ein Dummy-Plug ist für normale Nutzer viel einfacher und bequemer. Einen virtuellen 4K-Monitor nur per Software für Remote-Game-Streaming einzurichten, ist deutlich komplizierter, als man denkt. Siehe 4k-sunshine-Konfigurator
    • Beim Raspberry-Pi-Remote-Desktop wird der Desktop nur gerendert, wenn physisch ein Monitor angeschlossen ist; für einen Graduiertenstudenten mit knappem Budget und wenig Zeit ist ein Dummy-Plug ideal
  • Ich frage mich, ob es günstige DisplayPort-EDID-Emulatoren gibt, die sich zur Problemlösung in KVM- und Linux-Umgebungen eignen. Im Vergleich zur HDMI-Version sind sie so viel teurer, dass es fast sinnvoller ist, gleich einen neuen KVM zu kaufen
    • Bei DisplayPort schreibt man nicht einfach in ein EEPROM auf einem I2C-Bus, sondern nutzt den AUX-Bus, der spezifisch für DisplayPort ist; das ist wesentlich komplexer aufgebaut. Öffentlich verfügbare Dokumentation ist schwer zu finden, und für brauchbare Referenzen braucht man wohl eine VESA-Mitgliedschaft und ein NDA
  • Das Hex-Dump-Ergebnis eines USB-ibus2-Plugs ist an die EDID angehängt