Такая информация доступна через подсистему /sys/class/drm
. Такие инструменты, как xrandr
, широко используют его. Теперь, в частности, для каждого дисплея в этой подсистеме есть каталог с файлом edid
, Расширенные данные идентификации дисплея .
В системах на базе Debian -доступно два пакета: edid-decode
и read-edid
. Оба работают нормально, но на старых и устаревших моделях read-edid
работает достаточно хорошо, тогда как edid-decode
возвращает ошибки:
EDID block does NOT conform to EDID 1.3!
Detailed block string not properly terminated
EDID block does not conform at all!
Bad year of manufacture
Поэтому я бы рекомендовал установить пакет read-edid
. После установки используйте команду parse-edid
, как показано ниже :
.
$ parse-edid < /sys/class/drm/card0-HDMI-A-1/edid
Checksum Correct
Section "Monitor"
Identifier "X20G-NagaIII"
ModelName "X20G-NagaIII"
VendorName "SPT"
# Monitor Manufactured week 42 of 2005
# EDID version 1.3
# Digital Display
DisplaySize 410 310
Gamma 2.20
Option "DPMS" "true"
Horizsync 30-92
VertRefresh 40-86
# Maximum pixel clock is 170MHz
Другая команда get-edid
предназначена для подключения к шине i2c и автоматически определяет, какие дисплеи подключены и какие данные доступны. Теперь, конечно, это не метод C++, но эти два инструмента, вероятно, написаны на C. Посмотрите на их исходный код и обратите внимание, какие библиотеки они используют.