2 ポイント 投稿者 GN⁺ 2025-06-16 | 1件のコメント | WhatsAppで共有
  • HDMIダミープラグのEDIDをRaspberry Piを使って簡単に変更する方法を紹介
  • ダミープラグは、実際の出力機器がなくても、機器にモニターが接続されているように認識させるためのもの
  • EDID情報を1080pキャプチャデバイスのものと同じにコピーし、プラグが4Kモニターとして表示されないように設定可能
  • Raspberry PiのI2Cコントローラーと標準のLinuxツールだけで、プラグのEEPROMを読み書きできる
  • すべての工程で、機器損傷の防止のために正しいI2Cバスの選択とバックアップが必須

ダミープラグとEDIDの概要

  • ダミープラグとは、HDMIまたはDVIポートに接続したとき、実際の映像処理は行わず、最小限の回路だけで機器にモニター接続を検知させる小型ドングル状のデバイス
  • モニターのEDID (Extended Display Identification Data) を模倣したEEPROMチップと、+5Vに接続されたプルアップ抵抗などの回路がある
  • ヘッドレスサーバーや無人機器などで、OSがディスプレイの存在を認識するようにする用途に便利

目的とアプローチ

  • 既存の4K解像度をサポートするHDMIダミープラグを、単純な1080pデバイスとして認識されるようEDIDを書き換えた経験を共有
  • 目的は、ダミープラグ内部のEDIDをHDMIキャプチャデバイス(1080p対応)のEDID情報と同一になるよう置き換えること
  • ダミープラグのEEPROMに書き込み可能かは確実ではなかったが、試す価値はあった
  • Raspberry Pi ZeroのHDMIポートがI2Cコントローラーに接続されているため、アクセスしやすい

安全上の注意と手順の開始

  • 実際のモニターが接続された状態でこの作業を行うと、EDID保護のないモニターでは損傷リスクがある
  • 必ずダミープラグのような、壊れても問題ないデバイスに対してのみ作業を行う必要がある
  • また、正しいI2Cバスを使うこと、書き込み前に必ずEDIDを事前に読み出して検証することが重要

環境設定と準備作業

  • Raspberry Pi OS Liteをインストール後、sudo raspi-configで設定を調整
  • sudo apt install i2c-toolsでI2Cツールを導入(Pi Zeroではネットワークが必要。USB-イーサネットアダプターやSDカードのchrootで回避可能)
  • HDMI-to-Mini-HDMIアダプターが必要

EDID EEPROMの認識とバックアップ

  • Raspberry Pi ZeroではI2Cバス2を使用(他のPiモデルでは番号が異なる)
  • i2cdetectコマンドで0x50アドレスにデバイスが見えることを確認。これはEDID EEPROMの標準アドレス
  • 興味深いことに、0x51〜0x57アドレスにも応答し、EDIDの複数コピーが保存されている形になっている
  • get-edidで既存ダミープラグの元のEDIDをバックアップし、2回読み出して一致するか確認
  • od -v -An -txCEDIDを16進数配列として出力し、edidreader.comで妥当性を検証

キャプチャデバイスのEDID抽出とプラグへの書き込み

  • ダミープラグを外した後、HDMIキャプチャデバイスをPiに接続
  • 同じ方法でキャプチャデバイスのEDIDを抽出し、再度有効性を確認
  • 再びダミープラグを接続し、キャプチャデバイスのEDIDをEEPROMに書き込む
  • 各バイトごとにi2csetコマンドで書き込みを実行。これは標準のLinuxツールとbashだけで可能

最終検証と結果

  • 作業完了後、ダミープラグのEDIDを再抽出し、元ファイルとdiffで比較して内容の一致を確認
  • テスト用コンピューターに接続すると、元の4KモニターではなくHDMIキャプチャデバイスとして認識された
  • ダミープラグのEDID置き換えに成功

まとめと活用のアドバイス

  • 同じ手順で、古い1080pダミープラグを4K対応デバイスに変更することも可能
  • I2C書き込み作業はRaspberry Pi上でのみ行うことを推奨。一般的なPCで直接行うとハードウェア損傷の危険がある
  • 関連する機能が必要な場合、この手順は役立つ可能性がある

1件のコメント

 
GN⁺ 2025-06-16
Hacker Newsのコメント
  • 自宅で試してみたい人向けに小さなコツをひとつ共有したいのですが、安価な dummy plug はたいてい 256 バイト EEPROM しか搭載しておらず、高解像度・高リフレッシュレートで必要になる EDID 拡張ブロックまで全部保存するには容量が足りません。1080p60 までしかシミュレートできず、たとえば 4k240 モニターを装うことは不可能です。また、製品によっては write-protect ラインがすでに接続されていて、はんだ付けなど物理的に手を入れないと書き込みできません
  • これらの dummy plug の欠点は HDCP を処理できないことです。ヘッドレスマシンで解像度を強制的に出力させる用途には優秀ですが、HDCP が必要なストリーミングサービスのテストには使えません。HDCP までネゴシエーション可能な HDMI dummy plug ソリューションをご存じの方はいますか? 毎回 TV をテスト機材として使うのは面倒です。私が見つけた 1 つの解決策は HDMI マルチビューアで、各ポートごとに個別に HDCP をネゴシエーションします
    • 私は HDMI splitter を使っています。事前にプログラムされた EDID を設定することもできるし、HDMI output 1 に接続したモニターから EDID を学習させることもできます。splitter に電源が入っていれば、実際にモニターをつながなくても接続されているように動作します。splitter が PC やコンソールと HDCP をネゴシエーションしたあと、実際のモニター側には HDCP なしで信号を送ります。amazon.com 参照
    • Aliexpress では HDCP を終端して HDMI をパススルーする機器を販売しているという広告も多いので、購入前に注意が必要です
    • HDCP の解除は簡単ではありません。HDCP 1.4 にダウングレードし、1.4 規格をサポートする「compliant」な機器を接続して dummy monitor として使う方式です。HDCP 1.4 以上が必要なら、ほぼ不可能です
    • HDMI 出力の組み込みシステムがあり、起動画面を別の HDMI ストリーム(静止画像でも可)に差し替えたいのですが、組み込みシステム側には一切手を入れられません。安価かつ堅牢に HDMI 信号だけを差し替える方法が必要です
    • Amazon で事実上「HDCP stripper」として宣伝されている HDMI splitter を試してみることをおすすめします
  • EDID のバイナリファイル集を提供している場所や、手軽に作成できるプログラムがあるのか気になります。私はプログラマブルな EDID emulator plug を使っていますが、特定の解像度や細かな機能(例: DSC を含む 8K 解像度など)を直接設定するのが難しい、あるいは不可能です。github.com/bsdhw/EDID には新しめのモニター資料が不足しています。私も AnalogWay EDID Editor で自作してみましたが、サポートモードの微妙な差や優先順位付けなど、細かな設定作業が簡単ではありません
    • 似た悩みを経験しました。Dolby TrueHD まで対応する安価な 5.1ch サウンドバーを買ったのですが、HDMI 接続は eArc 対応デバイス(新しい TV)でしか動きません。PC をつなぐと SPDIF や aux しか使えず、音質が落ちます。オーディオエクストラクターや splitter の代わりに、PC の edid 値をサウンドバーが eArc デバイスだと認識するように細工する方法を試していますが、まだ厳密なガイドラインはなさそうです
  • パススルー機能付きの dummy plug も購入できます。古いシステムで高解像度モニターとの互換性問題があるときに便利です。たとえば私の 2011 年製 AMD FX8350 システムは 4K 出力に問題があるので、1080p に固定するためにプラグをインラインで挿すと、モニターが自動で 2x アップスケールして綺麗な 4K 表示になります
    • パススルー機器をいくつか持っていますが、記事でこうした選択肢にも触れるべきでした。私の製品は少し変わっていて、モニターの EDID を読み取って保存し、それを別のモニターにオーバーライドとして適用できます。もうひとつ面白いのは、モニターが常に接続されているように強制できる点です。私のモニターの 1 台は電源を切ると仮想的にプラグが抜けた扱いになって問題を起こすのですが、パススルー機器で完全に解決しました。私が使っているのは THWT の HD-EWB です
  • 一般的なモニターやノート PC 画面に保存されている edid 情報もこの方法で変更できます。TCON の各種設定も、別の i2c アドレスへの書き込みで変更可能です。Raspberry Pi も不要で、どんなコンピューターでも使えます
    • 記事の著者は Pi を勧めていますが必須ではありません。ただし PC でそのまま実行すると、EDID ではなく、たとえば RAM モジュールの SPD EEPROM などハードウェアを誤ってフラッシュしてしまう可能性があります
    • フラッシュチップには書き込み有効/無効のピンが別にあり、たいていのモニターや TV は edid への書き込みを防ぐよう配線されています。低価格モデルだけがそのままになっていることが多いのではと推測します。無防備な状態だと、読み取り中の電圧ノイズだけで書き込み動作が起きてフラッシュが壊れる危険があります
    • 大半のモニターで edid を変更できるというのは、ハードウェアメーカー側の甘さを意味します。普通は事前書き込み済み EEPROM を受け取って、書き込みピンを high にしないのが慣例です。わざわざ writable のまま出荷するのは一般的な設計ではありませんが、現場では想定外の事例も時々あります
  • なぜ dummy plug が必要なのか気になります。ソフトウェアで解決できない何かがあるのでしょうか? 私はソフトウェアだけで 18 台の仮想ディスプレイを問題なく使っています
    • ひとつの例は、私の PC で Looking Glass というソフトウェアを使って Windows 仮想マシンを扱うケースです。GPU が 2 枚(AMD と NVidia)あり、NVidia は Windows VM にパススルーしています。Looking Glass で NVidia GPU の出力をデスクトップ上のウィンドウに表示できるので、VM 内の Windows アプリを性能低下なしで使えます(Windows 7 以降は GPU アクセラレーションなしでは実用が厳しくなります)。ただし NVidia GPU は実際のディスプレイが接続されていないと動作しません。Quadro GPU ならモニターの EDID ファイルをダンプして常時接続されているように見せられますが、一般向け GPU にはこの機能がありません。そういうとき dummy plug が唯一の代替手段になります
    • OS / GPU / ドライバーの組み合わせによって、仮想ディスプレイ設定の自由度はかなり異なります。OBS や Steam/Parsec のゲームストリーミング用にディスプレイを追加するなら、dummy plug のほうがずっと簡単です。Linux+Xorg+オープンソースドライバーや Windows+Nvidia では動くこともありますが、MacOS や Windows+AMD/Intel GPU ではほとんど機能しません
    • Chromebook を改造して Windows/Linux を入れて使っていますが、HDMI ポートにビデオ機器がないとそもそも起動しません。dummy plug がないと詰みます
    • dummy plug は一般ユーザーにとってずっと簡単で手軽です。ソフトウェアだけで 4K 仮想モニターをリモートゲームストリーミング用に設定するのは、思った以上に非常に複雑です。4k-sunshine 設定ツール 参照
    • Raspberry Pi のリモートデスクトップでは、物理的にモニターが接続されていないとデスクトップがレンダリングされません。予算も時間も足りない大学院生にとって、dummy plug は最高です
  • KVM と Linux 環境で問題を解決する目的で使える、安価な DisplayPort EDID emulator がないか気になります。HDMI 版に比べてはるかに高価で、いっそ KVM を買い直したほうがマシなレベルです
    • DisplayPort は単に I2C バス上の EEPROM を使うのではなく、DisplayPort 専用の AUX バスを使っており、こちらのほうがはるかに複雑な構造です。公開文書も見つけにくく、まともなリファレンスを得るには VESA への加入と NDA 署名が必要です
  • USB ibus2 plug の hex dump の結果が EDID に続いています