วิธีรับ EDID สำหรับจอภาพเดียว


20

รอดำเนินการคำตอบกับผู้ตรวจ xrandr Amplifier เป็นตรวจสอบวิธีแก้ปัญหาที่เป็นไปได้กับอุปกรณ์ที่มีบัญชีดำเฉพาะEDID s แต่น่าเสียดายที่xrandr --verboseพิมพ์ทุกอย่างในรูปแบบที่ยุ่งยากในการแยกวิเคราะห์และไม่สนับสนุนการสืบค้นอุปกรณ์เดียวและget-edidผลลัพธ์ของมันดูเหมือนจะไม่ง่ายในการจับคู่กับxrandrID การตรวจสอบของ (เช่นDVI-1)

มีวิธีรับEDID ที่แยกวิเคราะห์ได้ง่ายสำหรับจอภาพเดียวหรือไม่?


ฉันจะไปxrandrแยก มันยุ่งยาก แต่คุณแค่เขียนสคริปต์ของคุณครั้งแล้วครั้งเล่าและจากนั้นมันก็จะทำงานได้ทุกที่
Gilles 'SO- หยุดความชั่วร้าย'

คำตอบ:


18

ลูกค้าเป้าหมายอันดับ 1: monitor-edid

ฉันไม่ได้ใช้ EDID และจอภาพ แต่ฉันพบเครื่องมือนี้monitor-edidซึ่งอาจเป็นประโยชน์กับคุณที่นี่เช่นกัน

ยกโทษให้ฉันถ้ามันออกจากฐานฉันพยายามเรียนรู้เพิ่มเติมเกี่ยวกับพื้นที่นี้ด้วยคำถามที่หลากหลายที่คุณถามในหัวข้อ

$ monitor-edid 
EISA ID: LEN4036
EDID version: 1.3
EDID extension blocks: 0
Screen size: 30.3 cm x 19.0 cm (14.08 inches, aspect ratio 16/10 = 1.59)
Gamma: 2.2
Digital signal

    # Monitor preferred modeline (60.0 Hz vsync, 55.8 kHz hsync, ratio 16/10, 120 dpi)
    ModeLine "1440x900" 114.06 1440 1488 1520 2044 900 903 909 930 -hsync -vsync

    # Monitor supported modeline (50.0 Hz vsync, 51.8 kHz hsync, ratio 16/10, 120 dpi)
    ModeLine "1440x900" 114.06 1440 1488 1520 2204 900 903 909 1035 -hsync -vsync

ลูกค้าเป้าหมายอันดับ 2: ddcontrol

มีเครื่องมืออีกอย่างที่ฉันพบเจอddccontrolซึ่งอาจเป็นประโยชน์ในการรับข้อมูลที่คุณตามมา

ตะกั่ว # 3: / sys

ในที่สุด/sysฉันก็สังเกตเห็นว่ามีปมใบไม้ห้อยออกมาจากส่วนต่อประสานวิดีโอต่าง ๆ

$ sudo find . |grep -i edid
./devices/pci0000:00/0000:00:02.0/drm/card0/card0-HDMI-A-1/edid
./devices/pci0000:00/0000:00:02.0/drm/card0/card0-HDMI-A-2/edid
./devices/pci0000:00/0000:00:02.0/drm/card0/card0-HDMI-A-3/edid
./devices/pci0000:00/0000:00:02.0/drm/card0/card0-VGA-1/edid
./devices/pci0000:00/0000:00:02.0/drm/card0/card0-LVDS-1/edid
./devices/pci0000:00/0000:00:02.0/drm/card0/card0-DP-1/edid
./devices/pci0000:00/0000:00:02.0/drm/card0/card0-DP-2/edid
./devices/pci0000:00/0000:00:02.0/drm/card0/card0-DP-3/edid
./module/drm/parameters/edid_fixup
./module/drm_kms_helper/parameters/edid_firmware

อย่างไรก็ตามในแล็ปท็อป Lenovo ของฉัน "ไฟล์" เหล่านี้ว่างเปล่าบางทีพวกมันอาจแตกต่างจากระบบของคุณ ฉันพบกระทู้ในฟอรัมที่แสดงผลลัพธ์ตัวอย่างจาก VGA EDID

$ lspci | grep VGA
01:00.0 VGA compatible controller: nVidia Corporation NV17 [GeForce4 440 Go 64M] (rev a3)
$ xxd  /sys/devices/pci0000:00/0000:00:0b.0/0000:01:00.0/drm/card0/card0-VGA-1/edid
0000000: 00ff ffff ffff ff00 5a63 0213 0101 0101  ........Zc......
0000010: 2b0a 0103 1c25 1bb0 eb00 b8a0 5749 9b26  +....%......WI.&
0000020: 1048 4cff ff80 8199 8159 714f 6159 4559  .HL......YqOaYEY
0000030: 3159 a94f 0101 863d 00c0 5100 3040 40a0  1Y.O...=..Q.0@@.
0000040: 1300 680e 1100 001e 0000 00ff 0033 3139  ..h..........319
0000050: 3030 3433 3030 3737 330a 0000 00fd 0032  004300773......2
0000060: a01e 6114 000a 2020 2020 2020 0000 00fc  ..a...      ....
0000070: 0047 3930 6d62 0a20 2020 2020 2020 00ba  .G90mb.       ..

ที่มา: แยกการตรวจสอบหมายเลขซีเรียล / วันที่ผลิตโดยใช้ EDID .

อ้างอิง


@ l0b0 - เป็นแค่ 2 ใช่ไหม ดูเหมือนจะมากขึ้น ฉันอาจสับสนในหมวดหมู่ของคำถามนี้ด้วยคุณแค่ถามพวกเขา ฉันจะลบบิตที่ละเมิดออกไป)
slm

# 3 / sys / ... ได้ผลสำหรับฉันฉันมีIntel Corporation 3rd Gen Core processor Graphics Controller (rev 09)พร้อมi915คนขับ Kubuntu 15.04
user.dz

# 3 / sys / ... และxrandr --verboseทั้งสองส่งคืนข้อมูล EDID สำหรับจอภาพ HDMI ของฉัน แต่ไม่ส่งคืนข้อมูล EDID สำหรับจอภาพ DVI ของฉัน
noobninja

ลิงค์ monitor-edid นั้นตายแล้วและ archive.org ไม่มีการสำรองข้อมูลใด ๆ ใครรู้ว่าฉันจะได้รับเครื่องมือที่?
ปีเตอร์ดับบลิว.

@PeterW - มีทางเลือกขอบคุณที่นำสิ่งนี้มาให้ฉัน เครื่องมือยังอยู่ในส่วนใหญ่ของ repos ที่สำคัญ ฉันพบมันใน Fedora 24 เช่นและ CentOS ดังนั้นคุณสามารถติดตั้งเครื่องมือเป็นไบนารี่ซึ่งเป็นตัวเลือกที่ง่ายกว่ามาก
slm

11

เอาต์พุตของxrandr --propsประกอบด้วยสตริง hex EDID สำหรับแต่ละจอแสดงผลที่เชื่อมต่อด้วยวิธีที่ละเอียดน้อยกว่า ต่อไปนี้เป็นสคริปต์ Python แบบง่าย ๆ ที่ใช้ประโยชน์จากการจับ EDID สำหรับจอภาพที่เชื่อมต่อเฉพาะ

ฉันไม่พบเครื่องมือ CLI distro-packaged อื่น ๆ ที่ทำงานสำหรับการแยก EDID บนระบบที่ใช้ NVidia ของฉัน แต่เครื่องมือส่วนใหญ่สำหรับการแยกวิเคราะห์ไบนารี EDID ดูเหมือนจะทำงานได้ดี


8

หากคุณเกิดขึ้นจะใช้ x86 หรือโค้ง PowerPC read-edidคุณสามารถใช้ ใน Debian นี้มีอยู่ที่นี่

การใช้งานเป็นเรื่องง่าย (คุณต้องรูท):

$ sudo get-edid > /tmp/edid

แล้วแยกวิเคราะห์โครงสร้าง:

$ parse-edid < /tmp/edid
Checksum Correct

Section "Monitor"
    Identifier "HP v220"
    ModelName "HP v220"
    VendorName "HWP"
    # Monitor Manufactured week 13 of 2008
    # EDID version 1.3
    # Analog Display
    DisplaySize 470 300
    Gamma 2.20
    Option "DPMS" "true"
    Horizsync 30-81
    VertRefresh 56-76
    # Maximum pixel clock is 160MHz
    #Not giving standard mode: 1152x720, 60Hz
    #Not giving standard mode: 1280x960, 60Hz
    #Not giving standard mode: 1280x1024, 60Hz
    #Not giving standard mode: 1440x900, 60Hz
    #Not giving standard mode: 1600x1000, 60Hz
    #Not giving standard mode: 1680x1050, 60Hz
    Modeline    "Mode 0" -hsync +vsync 
EndSection

บ่อยครั้งที่สิ่งนี้รวมเข้าด้วยกัน:

$ sudo get-edid | parse-edid

ดูเพิ่มเติมที่นี่เกี่ยวกับวิธีส่งไฟล์ edid ที่กำหนดเองนี้ไปยังการ์ดกราฟิกของคุณโดยใช้:

  • CustomEDID หรือ
  • drm_kms_helper.edid_firmare

3
เพียงชี้แจงว่า get-edid ไม่ได้ผลสำหรับฉันจนกว่าฉันจะทำ "modprobe i2c-dev" และ "parse-edid" ผลิต Modeline ไม่ได้รับการยอมรับจาก Xorg ดังนั้นฉันจึงใช้สิ่งนี้ในส่วนของอุปกรณ์: ตัวเลือก "CustomEDID" "CRT-0: /etc/X11/edid-StarLight-170418_gb-nv-gf-650-GTX-VGA.bin" ฉันต้องจัดทำ EDID ด้วยตนเอง เนื่องจากไม่สามารถอ่านสายเคเบิล VGA ที่มีความยาว 10 เมตรได้อย่างถูกต้อง การตั้งค่า "DisplaySize" ก็มีประโยชน์สำหรับฉันเช่นกัน
Delian Krustev

3

เครื่องมือรุ่นล่าสุดที่เรียกว่า edid-decode สามารถแยกวิเคราะห์ข้อมูล EDID และสามารถอ่านและเขียนข้อความและไฟล์ไบนารี EDID ได้ xrandr --verboseมันทำงานได้ดีในการส่งออกของ ตัวอย่างเช่นสามารถใช้เพื่อบันทึก EDID ในไฟล์ไบนารี:

xrandr --verbose | edid-decode - /file/to/save

เวอร์ชั่นของ edid-decode ที่มาพร้อมกับ Fedora 27 (แพ็คเกจ: xorg-x11-utils) นั้นเก่าเกินไปและมันใช้งานไม่ได้อย่างสมบูรณ์ ผมใช้มากที่สุดรุ่นล่าสุด


2

ในรูปแบบไบนารี EDID มีอยู่ที่/sys/class/drm/card%d-%s/edidซึ่ง%dแสดงถึงดัชนีอุปกรณ์ DRM (อาจเป็นดัชนี GPU) และ%sเป็น ID ตัวเชื่อมต่อที่คุณเห็นในxrandrเอาต์พุต

หากต้องการแสดงรายการทั้งหมดที่มีให้เรียกใช้ ls -1 /sys/class/drm/*/edid

หากไดรเวอร์ GPU ของคุณไม่รองรับ DRM คุณจะไม่สามารถรับ EDID ได้ด้วยวิธีนี้

หากต้องการดูในรูปแบบเลขฐานสิบหกให้รันhexdumpบน

หากคุณต้องการแบบฟอร์มที่มนุษย์อ่านได้ให้ส่งผ่านไปที่edid-decodeเช่น:

cat /sys/class/drm/card0-eDP-1/edid | edid-decode

(คุณอาจต้องติดตั้งโดยใช้ตัวจัดการแพ็คเกจsudo apt install edid-decodeสำหรับ Ubuntu)


คุณจะส่งต่อไปยังedid-decodeไง? นอกจากนี้โปรดทราบว่ามีไดเรกทอรีย่อยสำหรับจอภาพที่ตัดการเชื่อมต่อด้วย
WinEunuuchs2Unix

@ WinEunuuchs2Unix ฉันได้เพิ่มตัวอย่าง
ผู้ใช้
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.