Я извлек сокращенную версию текущего монитора, подключенного к компьютеру.
Вот пример: vendor "VSC", prod id "18500"
В настройках монитора Ubuntu он обозначен как Viewsonic Corporation 16"
.
Как я могу извлечь эту читаемую человеком форму? ... а также, как я могу определить, является ли монитор CRT
или нет LCD
? (это именно то, что заставило меня начать этот квест)
Формат EDID можно найти в Википедии: Расширенные идентификационные данные дисплея
Вот код, используемый для получения EDID Vendor
иProduct id
edid=$(xrandr -q --verbose |
sed -n '/^[[:space:]]\+00ffffffffffff00/,/[^a-fA-F0-9[:space:]]/{
/[^a-fA-F0-9[:space:]]/d
s/[[:space:]]\+//g; p}')
nibble=({0..1}{0..1}{0..1}{0..1})
vend=$(for i in {16..19} ;do
printf "%s" ${nibble[$((16#${edid:$i:1}))]}
done)
vend="$(for i in 1 6 11 ;do
printf \\x$(printf %x $((2#${vend:$i:5} +64)))
done)"
prod=$((16#${edid:22:2}${edid:20:2}))
printf "monitor: vendor \"%s\", prod id \"%s\"\n" "${vend}" "$prod"
Изменить: Вот ведущие строки xrandr -q verbose
outpt ... до конца шестнадцатеричный дамп EDID
Screen 0: minimum 320 x 200, current 1280 x 960, maximum 8192 x 8192
VGA1 connected 1280x960+0+0 (0x47) normal (normal left inverted right x axis y axis) 320mm x 240mm
Identifier: 0x41
Timestamp: 26386
Subpixel: unknown
Clones:
CRTC: 0
CRTCs: 0 1
Transform: 1.000000 0.000000 0.000000
0.000000 1.000000 0.000000
0.000000 0.000000 1.000000
filter:
EDID:
00ffffffffffff005a63444809000000
15090101682018b1e84f22a157479925
0f484ffffe00315945596159714f8140
818001010101000000ff004848393231
30303030390a2020000000fd0032781e
46ff000a202020202020000000fc0056
696577536f6e696320453737000000fc
00312d320a2020202020202020200084
1280x1024 (0x46) 108.0MHz +HSync +VSync
h: width 1280 start 1328 end 1440 total 1688 skew 0 clock 64.0KHz
v: height 1024 start 1025 end 1028 total 1066 clock 60.0Hz
1280x960 (0x47) ....
...
... etc
Ответы:
Эта читаемая человеком форма ( «Viewsonic Corporation» ) не приходит (напрямую) от вашего EDID:
Ubuntu использует библиотеки gnome внизу.
libgnome-desktop
декодирует edid и - через pnp-ids - преобразует трехбуквенный идентификатор поставщика ( «VSC» в вашем конкретном случае) в красивое имя для дисплея.gnome-pnp-ids.c , строка 51:
В моей системе
возвращает:
Помимо этого, дополнительная информация может быть извлечена из EDID, а именно из блоков дескрипторов. Из той же ссылки в Википедии:
В вашем EDID у вас есть
0xFF
(серийный номер) в дескрипторе 1 (байты 54-71):и у вас есть
0xFC
(имя монитора) в дескрипторе 3 (байты 90–107) и 4 (байты 108–125):так что это только вопрос извлечения информации оттуда, например, дескриптор 3:
56 69 65 77 53 6f 6e 69 63 20 45 37 37
>> Viewsonic E77Есть некоторые инструменты Linux, которые анализируют EDID ... Я использую
monitor-edid
. Вот вывод в формате Perl dumper на моей машине:Наконец, я понятия не имею, как определить (в Linux), является ли монитор LCD или CRT. Я не знаю ни одной библиотеки, которая реализует такую функцию (как эта от MS).
источник
Следующий инструмент может быть полезен для расшифровки информации edid: http://cgit.freedesktop.org/xorg/app/edid-decode
источник