- Untuk membuat HDMI dummy plug murah yang terdeteksi seperti monitor 4K tampak sebagai perangkat capture HDMI 1080p, EDID EEPROM internalnya ditulis ulang menggunakan Raspberry Pi
- Dummy plug membuat komputer mendeteksi seolah monitor terhubung hanya dengan pull-up pin HPD dan EEPROM I2C, sementara EDID menentukan informasi layar seperti resolusi yang didukung, audio, dan ruang warna
- Port HDMI pada Raspberry Pi terhubung ke kontroler I2C untuk EDID, sehingga selama nomor bus sesuai dengan modelnya, EDID dari dummy plug dan perangkat capture bisa dibaca lalu dibandingkan
- Pekerjaan dilakukan dengan urutan mengaktifkan I2C, memasang
i2c-tools, memeriksa alamat 0x50, melakukan dump dengan get-edid, lalu menulis 256 byte melalui loop i2cset
- Jika menjalankan perintah tulis pada bus I2C yang salah atau pada monitor sungguhan, EDID atau EEPROM lain bisa rusak, sehingga parsing dan verifikasi target wajib dilakukan sebelum menulis
Membuat dummy plug 4K tampak seperti perangkat capture 1080p
- HDMI dummy plug murah yang dulu dibeli di Amazon bekerja seperti monitor 4K, sehingga tujuannya adalah mengubahnya agar tampak seperti perangkat yang lebih sederhana dan tidak mendukung resolusi 4K
- Tujuannya adalah mengganti EDID dummy plug dengan salinan EDID dari salah satu dari beberapa perangkat capture HDMI 1080p
- Setelah penggantian selesai, komputer akan mengenali bahwa yang terhubung bukan monitor 4K melainkan perangkat capture HDMI
Peran HDMI dummy plug dan EDID
- Dummy plug untuk HDMI, DVI, dan sejenisnya tidak benar-benar memproses sinyal video, melainkan hanya memiliki rangkaian minimum agar perangkat output video seperti komputer menganggap monitor terhubung
- Umumnya ada dua elemen yang dibutuhkan
- EDID berisi informasi seperti produsen monitor, tanggal pembuatan, resolusi yang didukung, kanal audio, dan ruang warna
- Dummy plug seperti ini berguna pada mesin headless agar sistem operasi mengira monitor sedang terpasang
Bus I2C HDMI pada Raspberry Pi
- Port HDMI pada Raspberry Pi Zero memiliki kontroler I2C untuk membaca EDID yang terhubung ke pin yang benar
- Bus I2C yang perlu diperiksa berbeda menurut model Pi
- Pi 0-3:
/dev/i2c-2
- Pi 4:
/dev/i2c-20, /dev/i2c-21
- Pi 5:
/dev/i2c-11, /dev/i2c-12
- Saat menggunakan Raspberry Pi Zero, pengaturannya adalah
edid_i2c=2
- Pada model lain, nomor bus harus disesuaikan dengan daftar di atas
Persiapan
- Pada instalasi baru Raspberry Pi OS Lite, siapkan dulu lingkungan akses I2C
- jalankan
sudo raspi-config, lalu aktifkan I2C di Interface Options
- pasang alat I2C dengan
sudo apt install i2c-tools
- Pada Pi Zero, akses jaringan bisa menjadi masalah sehingga mungkin diperlukan adaptor USB-Ethernet
- Sebagai alternatif, kartu SD dapat dipasang ke PC desktop Debian/Ubuntu, lalu setelah memasang
binfmt-support dan qemu-user-static, lakukan chroot ke rootfs kartu SD dan jalankan apt install
- Tergantung lingkungan kerja, adaptor HDMI-to-Mini-HDMI juga mungkin diperlukan
Membaca dan memverifikasi EDID asli
- Pertama, periksa apakah dummy plug terdeteksi sebagai EEPROM EDID
edid_i2c=2
i2cdetect -y $edid_i2c
- Dari hasilnya, perangkat I2C terdeteksi di alamat
0x50, yang merupakan alamat yang digunakan untuk EDID
- Dummy plug tersebut juga merespons dari
0x51 hingga 0x57, dan alamat-alamat itu tampaknya berisi salinan dari EDID yang sama
- Tidak semua dummy plug bekerja seperti ini; dummy plug lain hanya terdeteksi pada
0x50
- Lakukan dump EDID asli dengan perintah berikut
get-edid -b $edid_i2c > edid-orig.bin
get-edid menampilkan bahwa EDID 256 byte berhasil dibaca dari bus I2C 2
- Lakukan dump yang sama dua kali lalu bandingkan hasilnya untuk memastikan keduanya identik
- Setelah itu, tampilkan hexdump dengan
od dan tempelkan ke edidreader.com untuk memastikan datanya adalah EDID yang valid
od -v -An -txC edid-orig.bin
Menulis EDID perangkat capture ke dummy plug
- Setelah mencadangkan EDID asli dummy plug, lepaskan dummy plug dari port HDMI Pi lalu hubungkan perangkat capture HDMI
- Lakukan dump EDID perangkat capture dengan cara yang sama
get-edid -b $edid_i2c > edid-capture-card.bin
- Pastikan EDID perangkat capture itu juga merupakan EDID yang valid
- Setelah itu, lepaskan perangkat capture, sambungkan kembali dummy plug, lalu tulis EDID perangkat capture ke EEPROM dummy plug
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
- Skrip ini mengubah EDID dari file dump menjadi array string heksadesimal dua digit, menambahkan
0x di depan tiap byte, lalu menulisnya berurutan ke EEPROM dengan i2cset
- Ada juga alat seperti edid-checked-writer, tetapi cara di atas bekerja hanya dengan alat I2C userspace Linux standar serta bash atau dash
Memeriksa hasil penulisan
- Setelah penulisan selesai, baca lagi EDID dari dummy plug lalu bandingkan dengan file EDID perangkat capture
get-edid -b $edid_i2c > edid-test.bin
diff edid-test.bin edid-capture-card.bin
diff tidak menghasilkan keluaran apa pun, yang menandakan dump baru identik dengan EDID asli perangkat capture
- EEPROM pada dummy plug telah diprogram ulang dengan EDID perangkat capture
- Setelah dicolokkan ke komputer uji dan dinyalakan, komputer pun berperilaku seolah yang terhubung adalah perangkat capture HDMI, bukan monitor 4K
Risiko yang harus diperiksa sebelum menulis
- Jika prosedur ini dijalankan saat monitor sungguhan terhubung dan EDID monitor itu tidak dilindungi, monitor bisa rusak
- Perintah tulis hanya boleh dijalankan saat port HDMI terhubung ke perangkat yang tidak masalah jika rusak, seperti dummy plug
- Harus benar-benar yakin bus I2C yang dipilih sudah benar, dan sebelum menulis EDID harus dibaca serta diparse untuk memastikan memang berisi EDID sungguhan
- Jika perintah ini dijalankan di PC, ada kemungkinan tanpa sengaja mem-flash perangkat keras yang bukan EDID, seperti SPD EEPROM pada modul RAM
- Menggunakan Raspberry Pi alih-alih bereksperimen dengan penulisan I2C langsung di PC sungguhan dapat mengurangi risiko merusak PC desktop
- Dengan cara yang sama, proses ini juga bisa dibalik untuk memasukkan EDID yang mendukung 4K ke dummy plug 1080p lama
1 komentar
Komentar Hacker News
Catatan kecil bagi yang ingin mencobanya di rumah: dummy plug murah seperti ini hanya punya EEPROM 256 byte, jadi tidak cukup untuk menyimpan beberapa blok ekstensi EDID yang diperlukan untuk pengaturan resolusi tinggi dan refresh rate tinggi
Kalau hanya butuh 1080p60 tidak masalah, tetapi tidak bisa dipakai untuk meniru monitor 4k240
Selain itu, pada sebagian perangkat jalur write-protect dipatok ke high atau low, sehingga untuk benar-benar menulisnya diperlukan sedikit pekerjaan hardware
Salah satu keterbatasan dummy plug seperti ini adalah tidak mendukung HDCP
Ini cocok untuk memaksa output resolusi tertentu pada mesin headless, tetapi akan gagal untuk keperluan menjalankan sesuatu yang mensyaratkan HDCP
Saya penasaran apakah ada solusi bagus yang bertindak seperti dummy plug HDMI sekaligus melakukan negosiasi HDCP
Saya perlu menguji aplikasi streaming video yang membutuhkan HDCP agar bisa diputar pada resolusi penuh, tetapi merepotkan kalau harus menyediakan satu TV untuk setiap pengujian
Solusi yang sejauh ini saya temukan adalah HDMI multiviewer, yang tampaknya menegosiasikan HDCP secara terpisah untuk tiap port
Bisa memakai EDID preset, atau mempelajari EDID dari perangkat yang terhubung ke HDMI output 1, lalu selama splitternya mendapat daya, perangkat itu akan terlihat seperti monitor yang tersambung meski tidak ada apa pun yang terhubung ke output
Sejauh yang saya tahu, HDCP dinegosiasikan antara komputer atau konsol dan splitter, lalu sinyal dikirim ke monitor output tanpa HDCP
https://www.amazon.com/dp/B07VP37KMB
Saya punya sistem embedded yang mengeluarkan HDMI, dan ingin mengganti layar boot-nya dengan stream HDMI lain. Gambar statis saja sudah cukup
Karena berbagai alasan, saya sama sekali tidak ingin mengubah sistem embedded itu sendiri, dan penasaran apakah ada cara murah dan tangguh untuk melakukannya
Namun perlu prinsip buyer beware
Jika butuh yang lebih baru daripada HDCP 1.4, kemungkinan hampir mustahil
Terkait hal ini, saya penasaran apakah ada arsip bagus berisi biner EDID, atau program generator yang lebih baik
Saya punya plug emulator EDID yang dapat diprogram, jadi saya bisa mengkloning monitor saya atau monitor lain, tetapi kadang tidak ada cara untuk mengatur resolusi atau fitur tertentu. Misalnya 8K dengan DSC
Saya tahu https://github.com/bsdhw/EDID, tetapi untuk monitor terbaru isinya cukup terbatas
Saya juga pernah membuat sendiri dengan https://www.analogway.com/products/aw-edid-editor, tetapi menyetel perbedaan detail antara berbagai mode dan urutan preferensi dengan benar terasa cukup sulit, setidaknya bagi saya
Rekomendasi saya: AW EDID Editor yang sudah disebutkan, CRU khusus Windows, 010 Hex Editor dengan template EDID, wxEDID dari Flatpak di Linux, dan edid-decode dari v4l-utils
CRU bekerja dengan memodifikasi file EDID yang didump dari monitor dan menghapus deskriptor seperti nomor seri untuk menyediakan ruang bagi detailed resolution. Tetap berfungsi, tetapi tidak berjalan di Wine
Seingat saya, paket distro wxEDID crash di WxWidgets, dan saya tidak tahu apakah bisa membuat section baru
edid-decode juga bisa dipakai sebagai tool textconv untuk git diff, tetapi tidak membantu meng-encode file EDID
Dari yang saya lihat, EDID HDMI memiliki blok ekstensi CEA, sedangkan EDID DP memiliki blok ekstensi DisplayID
Saya belum pernah menangani EDID multipage yang lebih dari 256 byte, dan juga tidak tahu chip EEPROM apa yang harus dipakai untuk emulasi ataupun protokol/API baca-tulisnya
https://www1.kramerav.com/au/product/edid%20designer
Keduanya gratis, tetapi bukan software yang bisa didistribusikan ulang secara bebas
Untuk yang Extron, Anda mungkin perlu bekerja di proyek atau organisasi yang memakai hardware terkait
Saya membeli soundbar surround 5.1 murah yang bahkan mendukung Dolby TrueHD melalui HDMI, tetapi jebakannya adalah perangkat itu hanya bekerja dengan benar pada perangkat yang mendukung eARC, yaitu TV baru
Jika disambungkan ke PC, saya harus memakai SPDIF atau AUX sehingga kualitasnya turun
Selain membeli audio extractor atau splitter, ada cara untuk mengelabui EDID PC agar soundbar dikenali sebagai eARC
Masih saya kerjakan, dan sayangnya belum ada panduan yang jelas
Saya mencarinya baru-baru ini, tetapi belum jelas perangkat mana punya fitur apa, dan apakah ada produk yang lebih murah tetapi cukup bagus
Produk semacam ini juga bisa dibeli dalam bentuk dengan passthrough, dan berguna untuk sistem lama yang bermasalah dengan monitor beresolusi tinggi
Saya punya sistem AMD FX8350 sekitar tahun 2011, dan chipset northbridge+video 880G bawaannya tidak bisa mengeluarkan gambar HDMI dengan benar ke display 4K
Kalau perangkat seperti ini dipasang di tengah lalu memberi tahu agar mengirim gambar 1080p, semuanya berjalan baik, dan monitor melakukan integer upscaling 2x ke 4K
Yang saya punya termasuk cukup kelas atas, sehingga bisa membaca EDID dari monitor, menyimpannya, lalu memakainya sebagai override untuk monitor lain
Hal hebat lainnya adalah perangkat ini bisa memaksa monitor agar selalu terdeteksi
Salah satu monitor saya, ketika dimatikan, pada dasarnya bertindak seperti terputus, sehingga menimbulkan berbagai masalah, dan passthrough menyelesaikannya sepenuhnya
Produk yang saya pakai adalah HD-EWB dari THWT
HDMI dummy plug adalah solusi hardware untuk menyelesaikan masalah software yang sejak awal seharusnya tidak perlu ada
Saya penasaran kenapa dummy plug diperlukan
Saya tidak tahu apa yang hanya bisa dilakukan dengan dummy plug dan tidak bisa dilakukan lewat software. Saya bertanya dari sudut pandang orang yang pernah memakai 18 display virtual tanpa dummy dan tanpa masalah
Komputer ini punya dua GPU: GPU AMD untuk host Linux, dan GPU NVidia dipassthrough ke guest Windows
Looking Glass menangkap output GPU NVidia dan menampilkannya di sebuah jendela di desktop saya
Dengan cara ini saya bisa memakai software Windows di VM, dan performanya juga lumayan. Sejak Windows 7, Windows pada dasarnya baru layak dipakai kalau ada akselerasi grafis
Masalahnya, GPU NVidia tidak melakukan apa pun jika tidak ada display yang terhubung
GPU NVidia Quadro bisa men-dump EDID monitor lalu memetakan file itu ke output, tetapi GPU konsumer tidak mendukungnya
Karena itu dummy plug diperlukan
Gunakan layar dummy plug sebagai output PowerPoint, dan layar laptop sebagai catatan presenter
Lalu bagikan layar dummy plug tersebut
Ini mungkin bukan jawaban terbaik bagi pembaca Hacker News, tetapi bagi guru atau staf sales, ini benar-benar sederhana
Ini mungkin dibutuhkan untuk streaming OBS atau pengaturan game streaming seperti Steam dan Parsec
Beberapa tahun lalu, hal ini cukup bisa dilakukan pada kombinasi Xorg Linux dengan driver open-source, serta Windows dengan Nvidia, tetapi tidak berjalan sebaik itu di MacOS atau Windows+GPU AMD/Intel
Jika sistem operasi dikelabui agar tampak seperti ada display yang terhubung, muncul variabel baru yang tidak ada di lingkungan deployment nyata pengguna, sementara dummy plug adalah solusi hardware yang murah
Membeli dan menancapkannya kemungkinan lebih hemat biaya daripada meminta engineer menulis
echo on > /sys/whateverbeserta logika di sekitarnyaSaya pernah menambahkan monitor 4K palsu ke desktop lewat software untuk remote game streaming, dan itu jauh lebih rumit dari perkiraan
https://pfy.ch/programming/4k-sunshine.html
Tip menarik: dengan prosedur yang sama, EDID yang tersimpan di monitor biasa atau layar laptop juga bisa dimodifikasi
Kadang dengan menulis ke alamat I2C lain, beberapa pengaturan TCON pun bisa diubah
Tidak harus memakai Raspberry Pi; komputer apa pun bisa
Saya sedang memodifikasinya agar LED backlight melakukan strobing untuk menghasilkan gambar tanpa blur seperti CRT
Saya menemukan bahwa bus DDC juga mengekspos register lain yang mengontrol backlight dan sebagainya, lalu menghubungkan rangkaian eksternal untuk strobing
Register untuk membaca dan menulis flash ROM juga terlihat, jadi saya men-dump-nya, menulis disassembler 8051 dan melakukan reverse engineering kasar, lalu akhirnya memodifikasi ROM agar menyertakan mode strobe
Mode ini dibuat menempati rentang bawah pengaturan kecerahan, sehingga bisa dinyalakan dan disesuaikan lewat OSD atau kontrol kecerahan DDC biasa
Saat melakukan flashing, casing harus dibuka untuk menghubungkan jalur write
Untungnya ada interrupt vblank, dan timer yang mengontrol LED backlight memiliki mode yang bisa menyalakannya tepat sebelum interrupt berikutnya lalu mematikannya setelah durasi yang dapat disetel
Timing-nya pas untuk menyalakan backlight segera setelah refresh LCD stabil
Tujuan awalnya sebenarnya hanya menghilangkan logo boot yang muncul selama beberapa detik, dan itu berhasil
Sepertinya hanya produk murah yang menghilangkannya
Tanpa proteksi, glitch tegangan saat pembacaan bisa berubah menjadi penulisan dan merusak flash, jadi itu berbahaya
“Jika mencoba perintah ini di PC, Anda bisa tidak sengaja mem-flash hardware selain EDID, misalnya SPD EEPROM pada modul RAM”
Biasanya orang membeli EEPROM yang sudah diprogram sebelumnya, memasangnya di board, dan menghubungkan pin write enable agar tidak pernah naik ke high
Menaruh EEPROM di produk seperti monitor lalu membiarkannya dapat ditulis itu aneh, tetapi saya pernah melihat hal yang lebih aneh pada hardware yang sudah dirilis
Saya bingung
Saya mengira akan melihat plug dihubungkan ke pin GPIO I2C, tetapi tampaknya cukup dengan menancapkannya ke RPi
Kalau begitu, saya penasaran apakah HDMI mengekspos antarmuka I2C secara langsung
Seperti disebutkan dalam tulisan, RPi memiliki kontroler I2C yang terhubung ke pin port HDMI tersebut. Sebab EDID memang harus dibaca melalui DDC
Saya penasaran apakah ada yang tahu emulator EDID DisplayPort murah untuk mengatasi masalah KVM dan Linux
Terakhir kali saya cek, harganya jauh lebih mahal daripada HDMI, sampai-sampai rasanya lebih baik membeli KVM baru saja
Sebagai gantinya, ia menggunakan bus AUX berkecepatan tinggi khusus DisplayPort yang jauh lebih rumit untuk ditangani
Sepertinya bahkan dokumentasi yang layak pun sulit ditemukan kecuali bergabung dengan VESA dan menandatangani banyak NDA
https://foosel.net/til/how-to-override-the-edid-data-of-a-mo...
Namun jika tujuannya menambahkan monitor virtual, saya kurang yakin apakah https://askubuntu.com/questions/453109/add-fake-display-when... bisa berfungsi
Saya penasaran apakah dummy plug juga bisa digunakan untuk mengubah pelacakan sidik jari perangkat