2 puan yazan GN⁺ 2025-06-16 | 1 yorum | WhatsApp'ta paylaş
  • Daha önce 4K monitör gibi algılanan ucuz bir HDMI dummy plug’un, 1080p HDMI capture device gibi görünmesi için içindeki EDID EEPROM Raspberry Pi ile yeniden yazıldı
  • Dummy plug, yalnızca HPD pini pull-up’ı ve bir I2C EEPROM ile bilgisayarın bir monitör bağlı olduğunu algılamasını sağlar; EDID ise desteklenen çözünürlük, ses ve renk uzayı gibi ekran aygıtı bilgilerini belirler
  • Raspberry Pi’nin HDMI portunda EDID için bağlı bir I2C denetleyicisi bulunur; modele göre doğru bus numarası seçilirse dummy plug ve capture device EDID’leri okunup karşılaştırılabilir
  • Gerçek işlem sırası I2C’yi etkinleştirme, i2c-tools kurma, 0x50 adresini doğrulama, get-edid ile dump alma ve i2cset döngüsüyle 256 bayt yazma adımlarından oluşur
  • Yanlış I2C bus’ını kullanmak veya yazma komutunu gerçek bir monitöre göndermek EDID’yi ya da başka EEPROM’ları bozabilir; bu yüzden yazmadan önce parse etme ve hedef doğrulaması şarttır

4K dummy plug’u 1080p capture device gibi göstermek

  • Amazon’dan zamanında alınmış ucuz bir HDMI dummy plug, 4K monitör gibi davranıyordu; amaç onu daha basit ve 4K çözünürlüğü desteklemeyen bir aygıt gibi göstermekti
  • Hedef, dummy plug’un EDID’sini birkaç 1080p HDMI capture device’tan birinin EDID kopyasıyla değiştirmekti
  • Değişiklik tamamlandığında bilgisayar, 4K monitör yerine bir HDMI capture device bağlı olduğunu algılıyor

HDMI dummy plug ve EDID’nin rolü

  • HDMI, DVI ve benzeri dummy plug’lar görüntü sinyalini gerçekten işlemez; yalnızca bilgisayar gibi bir görüntü çıkış aygıtının monitör bağlı sanması için gerekli en küçük devreyi içerir
  • Genellikle gereken iki unsur şunlardır
  • EDID içinde monitörün üreticisi, üretim tarihi, desteklenen çözünürlükler, ses kanalları ve renk uzayı gibi bilgiler yer alır
  • Bu tür dummy plug’lar, headless makinelerde işletim sisteminin bir monitör bağlı olduğunu sanmasını sağlamak için kullanışlıdır

Raspberry Pi’nin HDMI I2C bus’ı

  • Raspberry Pi Zero’nun HDMI portunda, EDID okumak için doğru pinlere bağlı bir I2C denetleyicisi bulunur
  • Pi modeline göre kontrol edilmesi gereken I2C bus’ları şöyledir
    • Pi 0-3: /dev/i2c-2
    • Pi 4: /dev/i2c-20, /dev/i2c-21
    • Pi 5: /dev/i2c-11, /dev/i2c-12
  • Raspberry Pi Zero kullanılıyorsa edid_i2c=2 olarak ayarlanır
  • Diğer modellerde bus numarası bu listeye göre değiştirilmelidir

Hazırlık

  • Temiz bir Raspberry Pi OS Lite kurulumunda önce I2C erişim ortamı hazırlanır
    • sudo raspi-config çalıştırıp Interface Options içinden I2C’yi etkinleştirme
    • sudo apt install i2c-tools ile I2C araçlarını kurma
  • Pi Zero’da ağ erişimi sorun olabileceğinden bir USB-Ethernet adaptörü gerekebilir
  • Alternatif olarak SD kart bir Debian/Ubuntu masaüstü PC’ye takılıp binfmt-support ve qemu-user-static kurulduktan sonra kartın rootfs’ine chroot edilerek apt install çalıştırılabilir
  • Çalışma ortamına göre bir HDMI-to-Mini-HDMI adaptörü de gerekebilir

Orijinal EDID’yi okuma ve doğrulama

  • Önce dummy plug’un bir EDID EEPROM olarak algılanıp algılanmadığı kontrol edilir
edid_i2c=2
i2cdetect -y $edid_i2c
  • Sonuçta 0x50 adresinde bir I2C aygıtı algılandı; bu adres EDID için kullanılır
  • Bu dummy plug ayrıca 0x51 ile 0x57 arasındaki adreslere de yanıt verdi; buralarda aynı EDID’nin kopyalarının bulunduğu anlaşılıyor
  • Her dummy plug böyle davranmaz; başka bir dummy plug’da yalnızca 0x50 algılandı
  • Orijinal EDID şu komutla dump edilir
get-edid -b $edid_i2c > edid-orig.bin
  • get-edid, I2C bus 2 üzerinden 256 baytlık EDID’yi başarıyla okuduğunu bildirir
  • Aynı dump iki kez alınıp sonuçların birebir aynı olup olmadığı karşılaştırılır
  • Ardından od ile hex dump üretilir ve edidreader.com üzerine yapıştırılarak geçerli bir EDID olup olmadığı kontrol edilir
od -v -An -txC edid-orig.bin

Capture device EDID’sini dummy plug’a yazma

  • Dummy plug’un orijinal EDID’si yedeklendikten sonra, Pi’nin HDMI portundan çıkarılıp yerine HDMI capture device bağlanır
  • Aynı yöntemle capture device’ın EDID’si dump edilir
get-edid -b $edid_i2c > edid-capture-card.bin
  • Capture device’ın EDID’sinin de geçerli bir EDID olduğu doğrulanır
  • Ardından capture device çıkarılır, dummy plug yeniden takılır ve capture device’ın EDID’si dummy plug EEPROM’una yazılır
edidbytes=($(od -v -An -txC edid-capture-card.bin))
for i in "${!edidbytes[@]}"; do
	byte=0x${edidbytes[$i]}
	echo Writing byte $i: $byte...
	i2cset -f -y $edid_i2c 0x50 $i $byte
done
  • Bu betik, dump dosyasındaki EDID’yi iki basamaklı onaltılık dizelerden oluşan bir diziye dönüştürür, her baytın başına 0x ekler ve i2cset ile EEPROM’a sırayla yazar
  • edid-checked-writer gibi araçlar da var, ancak bu yöntem standart Linux userspace I2C araçlarıyla ve yalnızca bash veya dash ile çalışır

Yazma sonucunu doğrulama

  • Yazma işleminden sonra dummy plug’daki EDID yeniden okunur ve capture device EDID dosyasıyla karşılaştırılır
get-edid -b $edid_i2c > edid-test.bin
diff edid-test.bin edid-capture-card.bin
  • diff hiçbir çıktı vermedi; yani yeni dump, orijinal capture device EDID’siyle birebir aynı
  • Böylece dummy plug’un EEPROM’u capture device’ın EDID’siyle yeniden programlanmış oldu
  • Sonrasında test bilgisayarına takılıp açıldığında, bilgisayar 4K monitör yerine bir HDMI capture device bağlıymış gibi davrandı

Yazmadan önce kontrol edilmesi gereken riskler

  • Bu prosedür gerçek bir monitör bağlıyken uygulanır ve o monitörün EDID’si korunmuyorsa, monitör bozulabilir
  • Yazma komutları yalnızca dummy plug gibi bozulması sorun olmayacak bir aygıt HDMI portuna bağlıyken çalıştırılmalıdır
  • Doğru I2C bus’ında olunduğundan emin olunmalı; yazmadan önce EDID okunup parse edilerek gerçekten bir EDID içerdiği doğrulanmalıdır
  • Bu komutlar bir PC’de çalıştırılırsa, EDID olmayan donanımları, örneğin RAM modüllerindeki SPD EEPROM’u yanlışlıkla flash etme ihtimali vardır
  • Gerçek bir PC’de I2C yazma denemeleri yapmak yerine Raspberry Pi kullanmak, masaüstü PC’ye zarar verme riskini azaltır
  • Aynı yöntem ters yönde de kullanılabilir; örneğin eski bir 1080p dummy plug’a 4K destekli bir EDID yazılabilir

1 yorum

 
GN⁺ 2025-06-16
Hacker News yorumları
  • Evde denemek isteyenler için küçük bir uyarı: Bu tür ucuz dummy plug’larda EEPROM yalnızca 256 bayt olduğundan, yüksek çözünürlük ve yüksek yenileme hızı ayarları için gereken birden fazla genişletilmiş EDID bloğunu saklamaya yetmez
    Yalnızca 1080p60 gerekiyorsa sorun yok, ancak 4k240 monitör taklidi yapmak için kullanılamaz
    Ayrıca bazılarında yazma koruma hattı high ya da low’a sabitlenmiş olduğundan, gerçekten yazmak için biraz donanım işi gerekebilir

    • WP’nin high mı low mu olduğu kullanılan çip türüne göre değişebilir
  • Bu tür dummy plug’ların bir sınırlaması da HDCP desteklememeleridir
    Headless bir makinede belirli bir çözünürlük çıkışını zorla oluşturmak için gayet uygundur, ancak HDCP gerektiren bir şeyi çalıştırmanız gerekiyorsa işe yaramaz
    HDMI dummy plug gibi davranıp HDCP anlaşmasını da yapan iyi bir çözüm var mı merak ediyorum
    Tam çözünürlükte oynatmak için HDCP gerektiren video streaming uygulamalarını test etmem gerekiyor; her test için bir TV ayırmak zahmetli
    Şimdiye kadar bulduğum çözüm HDMI multiviewer oldu; her port için HDCP’yi ayrı ayrı müzakere ediyor gibi görünüyor

    • Bu HDMI splitter’ı kullanıyorum
      Önceden ayarlanmış EDID’yi kullanabiliyor ya da HDMI çıkış 1’e bağladığınız cihazdan EDID’yi öğrenebiliyor; ardından splitter’a yalnızca güç verildiği sürece, çıkışa hiçbir şey bağlı olmasa bile bağlı bir monitör varmış gibi görünmesini sağlıyor
      Bildiğim kadarıyla bilgisayar veya konsol ile splitter arasında HDCP müzakere ediyor, çıkış monitörüne ise sinyali HDCP olmadan gönderiyor
      https://www.amazon.com/dp/B07VP37KMB
    • Başka bir kullanım amacım var
      HDMI çıkışı veren bir embedded sistemim var; açılış ekranını başka bir HDMI stream’iyle değiştirmek istiyorum. Statik bir görüntü yeterli
      Çeşitli nedenlerle embedded sistemin kendisini hiç değiştirmek istemiyorum; bunu ucuz ve sağlam şekilde nasıl yapabileceğimi merak ediyorum
    • Aliexpress’te HDCP’yi sonlandırıp HDMI’ı ilettiğini iddia eden ürünler var
      Ancak alıcı dikkatli olmalı
    • Amazon’da neredeyse açıkça “HDCP stripper” gibi pazarlanan HDMI splitter’lardan birini deneyebilirsiniz
    • HDCP sonlandırma zor; HDCP 1.4’e düşürdükten sonra uçta 1.4 “uyumlu” bir cihaz olması gerekir ki dummy monitör gibi davranabilsin
      HDCP 1.4’ten daha yeni bir şey gerekiyorsa muhtemelen neredeyse imkânsız
  • Bununla ilgili olarak, EDID binary’lerini toplayan iyi bir arşiv ya da daha iyi bir üretme programı var mı merak ediyorum
    Programlanabilir EDID emülatör plug’ım var, bu yüzden kendi monitörümü veya başka monitörleri klonlayabiliyorum; ancak belirli bir çözünürlük ya da özellik ayarlamak istediğimde bazen yöntem bulamıyorum. Örneğin DSC içeren 8K gibi
    https://github.com/bsdhw/EDID’yi biliyorum ama yeni monitörler tarafında oldukça sınırlı
    https://www.analogway.com/products/aw-edid-editor ile kendim oluşturmayı da denedim, ancak birden çok modun ince farklarını veya tercih sırasını doğru ayarlamak en azından benim için oldukça zor

    • EDID düzenleme konusunda fazlasıyla deneyimim var
      Önerilerim şöyle: zaten bahsedilen AW EDID Editor, yalnızca Windows için olan CRU, EDID şablonları bulunan 010 Hex Editor, Linux’ta Flatpak üzerinden wxEDID, v4l-utils içindeki edid-decode
      CRU, monitörden dump edilen EDID dosyasını düzenlerken ayrıntılı çözünürlük alanı açmak için seri numarası gibi descriptor’ları kaldırıyor ama çalışıyor. Wine’da çalışmıyor
      wxEDID için dağıtım paketinin WxWidgets’ta çöktüğünü hatırlıyorum; yeni section oluşturabiliyor mu bilmiyorum
      edid-decode, git diff’in textconv aracı olarak da kullanılabilir ama EDID dosyası kodlamaya yardımcı olmaz
      HDMI EDID’de CEA extension block, DP EDID’de ise DisplayID extension block olduğunu görüyorum
      256 baytı aşan çok sayfalı EDID ile hiç çalışmadım; hangi EEPROM çipiyle emüle etmek gerektiğini veya okuma/yazma protokolünü/API’sini de bilmiyorum
    • https://www.extron.com/product/software/edidmanager30
      https://www1.kramerav.com/au/product/edid%20designer
      İkisi de ücretsiz, ancak özgürce yeniden dağıtılabilen yazılımlar değiller
      Extron tarafında, ilgili donanımı kullanan bir projede veya kuruluşta çalışmanız gerekebilir
    • Yakın zamanda benzer bir sorun yaşadım
      HDMI üzerinden Dolby TrueHD’ye kadar destekleyen ucuz bir 5.1 surround soundbar aldım; püf noktası, bunun yalnızca eARC destekli cihazlarda, yani yeni TV’lerde düzgün çalışması
      PC’ye bağlayınca SPDIF veya AUX kullanmak gerekiyor ve kalite düşüyor
      Ses extractor’ı veya splitter satın almak dışında, PC EDID’sini kandırıp soundbar’ın bunu eARC olarak algılamasını sağlamanın bir yolu var
      Hâlâ üzerinde çalışıyorum; ne yazık ki net bir yönerge yok
    • Hangi programlanabilir EDID emülatör plug’ını kullandığınızı merak ediyorum
      Yakın zamanda araştırdım ama hangi cihazın hangi özelliklere sahip olduğu ve daha ucuz ürünler arasında iyi bir seçenek olup olmadığı net değildi
  • Bu tür ürünleri passthrough özellikli olarak da satın alabilirsiniz; yüksek çözünürlüklü monitörlerde sorun çıkaran eski sistemlerde işe yarar.
    2011 civarından kalma bir AMD FX8350 sistemim var; dahili 880G northbridge+video yonga seti, 4K ekrana HDMI görüntüsünü düzgün veremiyor.
    Araya böyle bir cihaz bağlayıp 1080p görüntü göndermesini söyleyince iyi çalışıyor; monitör de bunu 4K’ya 2x tam sayı ölçekleme ile büyütüyor.

    • Passthrough olanlardan da birkaç tane var; yazıda başka bir seçenek olarak bahsedilmeliydi diye düşünüyorum.
      Bendekiler oldukça üst seviye; monitörden EDID okuyup kaydedebiliyor, sonra da bunu başka bir monitör için override olarak kullanabiliyor.
      Bir başka harika yanı da monitörün her zaman algılanmasını zorlayabilmesi.
      Monitörlerimden biri kapatılınca fiilen bağlantısı kesilmiş gibi davranıyor ve çeşitli sorunlara yol açıyordu; passthrough bunu tamamen çözdü.
      Kullandığım ürün THWT’nin HD-EWB modeli.
  • HDMI dummy plug, en başta var olmaması gereken bir yazılım sorununu çözen donanımsal bir çözüm.

    • Bu, mevcut sayısız donanımsal çözümü tarif eden bir ifade gibi geliyor.
  • Dummy plug’a neden ihtiyaç duyulduğunu merak ediyorum.
    Yazılımla yapılamayıp yalnızca dummy plug ile yapılabilen şeyin ne olduğunu bilmiyorum. Bunu, dummy olmadan 18 sanal ekranı sorunsuz kullanmış biri olarak soruyorum.

    • Bir örnek olarak, PC’de Windows sanal makinesiyle etkileşim kurmak için Looking Glass adlı yazılımı kullanıyorum.
      Bilgisayarda iki GPU var; AMD GPU Linux host için, NVidia GPU ise Windows guest’e passthrough ediliyor.
      Looking Glass, NVidia GPU’nun çıktısını yakalayıp masaüstümdeki bir pencerede gösteriyor.
      Bu yöntemle VM’de Windows yazılımlarını kullanabiliyorum ve performans da fena değil. Windows, 7’den beri pratikte grafik hızlandırma olmadan düzgün kullanılabilir çalışmıyor.
      Sorun şu ki NVidia GPU, bir ekran bağlı değilse hiçbir şey yapmıyor.
      NVidia Quadro GPU’larda monitör EDID’si dump edilip bu dosya bir çıkışa eşlenebiliyor, ancak tüketici GPU’ları bunu desteklemiyor.
      Bu yüzden dummy plug gerekiyor.
    • Seyahat hâlindeki birinin tek ekranla Zoom veya Teams görüşmesi yaparken PowerPoint Sunucu Görünümü kullanmasını çok kolaylaştırıyor.
      Dummy plug ekranını PowerPoint çıktısı, dizüstü ekranını da sunucu notları için kullanmak yeterli.
      Sonra dummy plug ekranını paylaşabilirsiniz.
      Hacker News okurları için en iyi yanıt olmayabilir ama öğretmenler veya satış temsilcileri için gerçekten basit.
    • Birçok işletim sistemi·GPU·sürücü kombinasyonu, keyfi ayarlara sahip bir sanal ekranı gerçekten oluşturmanıza izin vermez.
      OBS yayını veya Steam, Parsec gibi oyun streaming kurulumları için buna ihtiyaç duyulabilir.
      Birkaç yıl önce Linux’ta Xorg ve açık kaynak sürücülerle, ayrıca Windows ve Nvidia kombinasyonunda bir ölçüde mümkündü; ancak MacOS veya Windows+AMD/Intel GPU’da o kadar iyi çalışmıyordu.
    • Binary gömülü Linux dağıtımlarını test ederken kullanıyorum.
      İşletim sistemini bir ekran bağlıymış gibi kandırmak, kullanıcının gerçek dağıtım ortamında olmayan yeni bir değişken yaratır; dummy plug ise ucuz bir donanım çözümüdür.
      Bir mühendisin echo on > /sys/whatever ve etrafındaki mantığı yazmasını sağlamaktansa satın alıp takmak muhtemelen daha maliyet-etkindir.
    • Çoğu insan için dummy plug çok daha kolay.
      Uzaktan oyun streaming için yazılımla masaüstüme sahte bir 4K monitör ekledim; beklediğimden çok daha karmaşıktı.
      https://pfy.ch/programming/4k-sunshine.html
  • İlginç ipucu: Aynı prosedürle sıradan bir monitörde veya dizüstü ekranında saklanan EDID de değiştirilebilir.
    Bazen farklı I2C adreslerine yazarak TCON’un çeşitli ayarlarını bile değiştirebilirsiniz.
    Raspberry Pi şart da değil; herhangi bir bilgisayar olur.

    • Bunu bir Acer monitörde bir kez yapmıştım.
      CRT gibi blursuz görüntü elde etmek için LED arka aydınlatmayı strobe edecek şekilde modifiye ediyordum.
      DDC bus’ın arka aydınlatma vb. şeyleri kontrol eden başka register’ları da açığa çıkardığını keşfettim ve strobing için harici devre bağladım.
      Flash ROM’u okumaya ve yazmaya yarayan register’lar da görünüyordu; dump ettikten sonra bir 8051 disassembler yazıp kabaca reverse engineering yaptım ve sonunda ROM’u strobe modu içerecek şekilde değiştirdim.
      Bu modu parlaklık ayarının alt aralığını kullanacak şekilde yerleştirdim; böylece OSD veya normal DDC parlaklık kontrolüyle açılıp ayarlanabiliyordu.
      Flash ederken içini açıp write hattını bağlamak gerekiyordu.
      Uygun bir şekilde vblank interrupt vardı ve LED arka aydınlatmayı kontrol eden timer’da, bir sonraki interrupt’tan hemen önce açıp ayarlanabilir bir süre sonra kapatmaya yarayan bir mod bulunuyordu.
      LCD yenileme kararlı hâle geldikten hemen sonra arka aydınlatmayı açmak için tam uygun zamanlamaydı.
      Asıl hedef yalnızca birkaç saniyelik boot logosunu kaldırmaktı; onu başardım.
    • Flash çiplerinde genellikle write enable/disable pini bulunur ve çoğu monitör ile TV, EDID yazımını engelleyecek şekilde kablolanır.
      Bunu muhtemelen yalnızca düşük maliyetli ürünler atlar.
      Koruma yoksa okuma sırasında oluşan bir voltaj glitch’i yazmaya dönüşüp flash’ı bozabilir; bu yüzden risklidir.
    • Yazar Pi kullanımını öneriyor ama zorunlu olmadığını belirtiyor.
      “Bu komutu PC’de denerseniz EDID olmayan bir donanımı, örneğin RAM modülünün SPD EEPROM’unu yanlışlıkla flash edebilirsiniz.”
    • Sıradan bir monitörde saklanan EDID aynı yöntemle değiştirilebiliyorsa, donanım geliştiricisi açısından garip bir hata gibi görünüyor.
      Normalde önceden programlanmış EEPROM satın alıp karta monte eder ve write enable pininin asla high’a çıkmayacağı şekilde kablolardım.
      Monitör gibi bir ürüne EEPROM koyup yazılabilir bırakmak garip; ama piyasaya çıkmış donanımlarda daha gariplerini de gördüm.
  • Kafam karıştı.
    Fişin GPIO I2C pinlerine bağlandığını görmeyi bekliyordum; ama yalnızca RPi’ye takmak yeterli görünüyor.
    Öyleyse HDMI’ın I2C arayüzünü doğrudan açığa çıkarıp çıkarmadığını merak ediyorum.

    • Evet. VGA/HDMI/DVI’ın iletişim kısmı olan DDC linki temelde bir I2C linkidir; işletim sisteminin normal çalışma sırasında EDID’i sorgulama biçimi de budur.
      Yazıda da belirtildiği gibi RPi’de, HDMI portunun bu pinlerine bağlı bir I2C controller var. Çünkü EDID’in DDC üzerinden okunması gerekiyor.
  • KVM ve Linux sorununu çözecek ucuz bir DisplayPort EDID emülatörü bilen var mı merak ediyorum.
    Son kontrol ettiğimde HDMI olanlardan çok daha pahalıydı; neredeyse yeni bir KVM almak daha mantıklıydı.

  • Dummy plug’ların cihaz parmak iziyle takip yöntemini değiştirmek için de kullanılıp kullanılamayacağını merak ediyorum.