1P by GN⁺ 15시간전 | ★ favorite | 댓글 1개
  • HDMI 더미 플러그의 EDID를 Raspberry Pi를 활용해 쉽게 변경할 수 있는 방법 소개
  • 더미 플러그는 실제 출력 장치 없이 기기에 모니터가 연결된 것처럼 인식시키는 용도임
  • EDID 정보를 1080p 캡처 장치의 것과 동일하게 복사해, 플러그가 4K 모니터로 표시되지 않도록 설정 가능함
  • Raspberry Pi의 I2C 컨트롤러와 표준 리눅스 도구만으로 플러그의 EEPROM을 읽고 쓸 수 있음
  • 모든 과정에서 장치 손상 예방을 위해 올바른 I2C 버스 선택과 백업 필수임

더미 플러그와 EDID 개요

  • 더미 플러그란 HDMI 또는 DVI 포트에 연결했을 때 실제 영상 처리는 없고, 최소 회로만으로 기기가 모니터 연결을 감지하게 만드는 작은 동글 형태의 장치임
  • 모니터의 EDID(Extended Display Identification Data) 를 모방한 EEPROM 칩과 +5V에 연결된 Pull-up 저항 등 회로가 존재함
  • 헤드리스 서버, 무인 기기 등에서 운영체제(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 백업 수행, 두 번 읽어 비교해 일치성 검증
  • od -v -An -txCEDID를 16진수 배열로 출력, edidreader.com으로 유효성 검사

캡처 장치의 EDID 추출 및 플러그에 기록

  • 더미 플러그 분리 후 HDMI 캡처 장치를 Pi에 연결
  • 동일 방식으로 캡처 장치의 EDID 추출, 유효성 재확인
  • 다시 더미 플러그를 연결하고, 캡처 장치 EDID를 EEPROM에 작성
  • 각 바이트별로 i2cset 명령을 통해 쓰기 작업, 이는 표준 리눅스 툴과 bash만으로 가능

최종 검증 및 결과

  • 작업이 끝난 후 더미 플러그의 EDID를 재추출하고 원본 파일과 diff로 비교해 내용 일치 확인
  • 테스트 컴퓨터에 연결 시, 원래의 4K 모니터가 아니라 HDMI 캡처 장치로 인식
  • 성공적으로 더미 플러그의 EDID 교체 완료

마무리 및 활용 조언

  • 동일한 절차로 구형 1080p 더미 플러그를 4K 지원 장치로 변경 가능함
  • I2C 쓰기 작업은 Raspberry Pi에서만 수행 권장, 일반 PC에서 직접 진행시 하드웨어 손상 위험 있음
  • 관련 기능이 필요한 경우 이 절차가 유용할 수 있음
Hacker News 의견
  • 집에서 시도하고 싶은 분들을 위해 작은 팁 하나 공유하고 싶음, 저렴한 dummy plug들은 대부분 256 바이트 EEPROM만 있어서, 고해상도·고주사율이 필요한 EDID 확장 블록까지 모두 저장하기에는 용량이 부족함, 1080p60까지만 시뮬레이션 가능함, 예를 들어 4k240 모니터를 흉내 내는 일은 불가능함. 그리고 어떤 제품은 write-protect 라인이 이미 연결되어 있어서, 직접 납땜 등 물리적으로 건드려야 데이터 쓰기가 가능함
  • 이 dummy plug들은 HDCP 처리가 안 되는 점이 단점임, 헤드리스 머신에서 해상도를 강제로 출력하게 하는 용도에는 훌륭하지만, HDCP가 필요한 스트리밍 서비스 테스트에는 쓸 수 없음. 혹시 HDCP까지 협상 가능한 HDMI dummy plug 솔루션을 알고 있는 분 계신가요? 매번 TV를 테스트 장비로 쓰기 번거로움. 내가 발견한 하나의 해법은 HDMI 멀티뷰어인데, 각 포트마다 HDCP를 개별적으로 협상함
    • 나는 HDMI 스플리터를 사용 중임, 사전 프로그램된 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 스트리퍼”로 광고되는 HDMI 스플리터를 사용해보길 추천함
  • 혹시 EDID 바이너리 파일 모음을 제공하는 곳이나, 편하게 만드는 프로그램이 있는지 궁금함. 나는 프로그래머블 EDID 에뮬레이터 플러그를 쓰는데, 특정 해상도나 세부 기능 (예: DSC가 포함된 8K 해상도 등)을 직접 세팅하는 게 어렵거나 불가능함. github.com/bsdhw/EDID는 신형 모니터 자료가 부족함. 내가 AnalogWay EDID Editor로 직접 만들어보기도 했는데, 지원 모드의 미묘한 차이나 우선순위 지정 등 세세한 세팅 과정이 쉽지 않음
    • 비슷한 고민을 경험함, Dolby TrueHD까지 지원하는 저렴한 5.1ch 사운드바를 샀는데, HDMI 연결은 eArc 지원 디바이스(최신 TV)에서만 작동함. PC를 연결하면 SPIDF나 aux만 써야 해서 음질 저하가 생김. 오디오 익스트랙터/스플리터 대신 PC의 edid 값을 사운드바가 eArc 디바이스로 인식하도록 조작하는 방법을 시도 중임, 아직 엄격한 가이드라인이 없는 듯 함
  • 패스쓰루 기능이 있는 dummy plug도 구입 가능함, 구형 시스템에서 고해상도 모니터와의 호환성 문제가 있을 때 유용함. 예를 들어 내 2011년 AMD FX8350 시스템은 4K 출력에 문제가 있어 1080p로 강제하려고 플러그를 인라인으로 꽂으면, 모니터가 자동으로 2x 업스케일 해서 깔끔하게 4K로 표시함
    • 패스쓰루 장치 몇 개도 가지고 있음, 글에 이런 옵션도 언급했어야 했음. 내 제품은 좀 특이해서 모니터의 EDID를 읽고 저장한 후, 다른 모니터에 오버라이드로 적용 가능함. 또 하나 신기한 점은, 모니터가 항상 연결된 것처럼 인식하게 강제할 수 있음. 내 모니터 중 하나는 전원을 끄면 가상으로 플러그가 분리된 상태가 되어 문제를 일으키는데, 패스쓰루 장치로 완벽하게 해결함. 내가 쓰는 제품은 THWT사의 HD-EWB임
  • 일반 모니터나 노트북 화면에 저장된 edid 정보도 이 방법으로 수정 가능함. TCON의 여러 설정도 기타 i2c 주소에 쓰기 방식으로 변경 가능함. Raspberry Pi도 필요 없음, 어떤 컴퓨터든 사용 가능함
    • 글의 저자는 Pi를 추천하긴 하지만 필수는 아님, 만약 PC에서 그대로 따라 하면 EDID가 아닌 하드웨어 예컨대 램 모듈의 SPD EEPROM 등을 실수로 플래시 할 수도 있음
    • 플래시 칩에는 쓰기 활성/비활성 핀이 따로 있고, 대부분의 모니터나 TV는 edid 쓰기를 차단하도록 배선되어 있음, 저가형만 그냥 놔두는 경우가 많다고 추정함. 무방비라면 읽기 중 전압 노이즈만으로도 쓰기 동작이 일어나 플래시가 날아갈 위험이 있음
    • 대부분의 모니터에서 edid를 수정할 수 있다는 건 하드웨어 개발사의 허점을 의미함. 보통 미리 프로그램된 EEPROM을 받아서 쓰기 핀을 아예 high로 두지 않는 게 관례임. 굳이 writable로 출하하는 건 흔치 않은 설계임, 하지만 실제 현장에선 예상 밖의 사례도 종종 있음
  • 왜 dummy plug가 필요한지 궁금함? 소프트웨어로 해결할 수 없는 무엇이 있어서인지 알고 싶음, 난 소프트웨어로 18개의 가상 디스플레이를 아무 문제 없이 사용함
    • 한 가지 사례는 내 PC에서 Looking Glass라는 소프트웨어로 Windows 가상 머신을 다룰 때임. GPU가 두 개(A MD와 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가 훨씬 간편함. 리눅스+Xorg+오픈소스 드라이버나 Windows+Nvidia에서는 될 때도 있지만, MacOS 혹은 Windows+AMD/Intel GPU에서는 거의 작동하지 않음
    • 크롬박스에 윈도우/리눅스를 모드해서 쓰는데, HDMI 포트에 비디오 장치가 없으면 아예 부팅이 안 됨. dummy plug 없으면 불가피하게 막힘
    • dummy plug는 일반인에게 훨씬 쉽고 간편함. 소프트웨어만으로 4K 가상 모니터를 원격 게임 스트리밍 용도로 세팅하는 것은 생각보다 엄청 복잡함 4k-sunshine 설정기 참고
    • 라즈베리파이 원격 데스크탑에는 물리적으로 모니터가 연결되어 있어야만 데스크탑이 렌더링됨, 예산과 시간이 부족한 대학원생에겐 dummy plug가 최고임
  • KVM 및 리눅스 환경에서 문제를 해결할 목적으로 쓸만한 저렴한 DisplayPort EDID 에뮬레이터가 있을지 궁금함. HDMI 버전에 비해 가격이 훨씬 비싸서 차라리 KVM 새로 사는 게 나은 수준임
    • DisplayPort는 단순히 I2C 버스의 EEPROM을 쓰는 게 아니라, DisplayPort 전용 AUX 버스를 이용하는데, 이게 훨씬 복잡한 구조임. 공개 문서도 찾기 힘들고, 제대로 된 레퍼런스를 얻으려면 VESA 가입과 NDA 서명 절차가 필요함
  • USB ibus2 plug의 hex dump 결과가 EDID와 이어져 있음