get-edid всегда не удается, но Ubuntu определяет производителя/модель монитора в системных настройках.

Вопрос или проблема

Я пытаюсь написать несколько скриптов для обнаружения того, какой монитор подключен и когда. Я не уверен, иду ли я по правильному пути, но замечаю, что, что бы я ни делал, попытка использовать ‘get-edid’ всегда завершается неудачей с таким выводом:

sudo get-edid
Это версия read-edid 3.0.1. Приготовьтесь к веселью.
Пытается использовать интерфейс i2c
Похоже, что ни одна шина не имеет EDID. Извините!
Пытается использовать классический интерфейс VBE

    Выполнение вызова в режиме реального времени VBE
    Прерывание 0x10 ax=0x4f00 bx=0x0 cx=0x0
    Функция не поддерживается
    Вызов завершился неудачей

    Версия VBE 0
    Строка VBE на 0x0 "O"

Служба VBE/DDC собирается быть вызванной
    Сообщение о возможностях DDC

    Выполнение вызова в режиме реального времени VBE
    Прерывание 0x10 ax=0x4f15 bx=0x0 cx=0x0
    Функция не поддерживается
    Вызов завершился неудачей

Чтение следующего блока EDID

Служба VBE/DDC собирается быть вызванной
    Чтение EDID

    Выполнение вызова в режиме реального времени VBE
    Прерывание 0x10 ax=0x4f15 bx=0x1 cx=0x0
    Функция не поддерживается
    Вызов завершился неудачей

Данным EDID нельзя доверять, так как вызов VBE завершился неудачей
Ошибка: выходной блок не изменился
Извините, ничего не удалось. Возможно, попробуйте другие аргументы
если вы их изменяли, или отправьте электронное письмо Мэтью Керну <[email protected]>.

Однако интересная деталь в том, что если я перехожу к настройкам дисплея в Ubuntu, она обнаруживает производителя/модель/размер монитора. Я сбит с толку тем, как Ubuntu это делает, если get-edid, похоже, всегда терпит неудачу.

Я пробовал несколько разных версий get-edid, и я использую Ubuntu 12.04. У меня два монитора, один – это монитор ноутбука Acer, а второй – монитор Philips, подключенный через HDMI.

Я также использую метод загрузки EFI, интересно, может ли это иметь какое-то значение?

У кого-нибудь есть идеи?

Согласно don-crissti:

Человеко-читаемая форма […] не поступает (непосредственно) из вашего EDID:
Ubuntu использует библиотеки gnome. libgnome-desktop декодирует edid
и – через
pnp-ids
преобразует трехбуквенный идентификатор производителя […] в красивое имя для дисплея.

[Источник]

Ответ или решение

Ситуация, описанная вами, связана с получением информации о мониторе, подключенном к системе Ubuntu 12.04, и заключается в том, что команда ‘get-edid’ не работает должным образом, несмотря на то что системные настройки показывают корректные данные о мониторе. Рассмотрим более подробно природу этой проблемы и возможные пути ее решения.

Теория:

EDID (Extended Display Identification Data) — это стандарт, позволяющий устройствам отображения передавать информацию о своих характеристиках, таких как производитель, модель, разрешение, частота обновления и другие технические детали устройству вывода (например, компьютеру). Команда ‘get-edid’ в Unix-подобных системах используется для считывания этих данных. Программа пытается получить доступ к EDID через интерфейс i2c или VBE/DDC. Однако, если VBE функции и i2c интерфейс не поддерживаются графическими драйверами или оборудования, выполнение команды заканчивается ошибкой, как это произошло в вашем случае.

Пример:

В вашем случае, ‘get-edid’ не может считывать EDID из-за следующих причин:

  1. Поддержка UEFI: Ваша система использует EFI загрузку вместо традиционной BIOS. EFI может использовать другой метод взаимодействия с оборудованием на более низком уровне, что делает использование методов BIOS, таких как VBE, неэффективными.

  2. Поддержка драйверами: Драйверы вашей системы могут не поддерживать функции, которые ‘get-edid’ пытается использовать. Это может быть связано с особенностями драйвера в Ubuntu 12.04 или ограничениями самой команды ‘get-edid’.

  3. Множество мониторов: Наличие нескольких мониторов, особенно с различными подключениями (например, встроенный экран ноутбука и внешний монитор через HDMI) может вызывать сложности в определении подходящего источника EDID.

Тем не менее, несмотря на эти ограничения, Ubuntu успешно определяет характеристики вашего монитора через другие механизмы, такие как гномовых библиотек. Используются библиотеки GNOME, такие как libgnome-desktop, которые обрабатывают данные EDID и конвертируют идентификаторы производителей PnP в читаемые человеком формы.

Применение:

  1. Альтернативные методы получения EDID: Вместо использования ‘get-edid’, вы можете воспользоваться ‘xrandr’, ‘read-edid’, или командой ‘parse-edid’. Например, выполнение xrandr --props может предоставить информацию о подключенном дисплее.

  2. Обновите драйверы: Поскольку Ubuntu 12.04 является устаревшей версией, обновление драйверов до более новой версии может улучшить поддержку оборудования. Рассмотрите возможность обновления до более современной версии Ubuntu, если это возможно в вашем окружении.

  3. Используйте gnome-utils: Если цель заключается в создании скрипта для автоматизации определения подключенного монитора, воспользуйтесь возможностями gnome-utils, которые предоставляют доступ к этой информации на уровне системы.

  4. Кастомные скрипты: Создайте собственные скрипты на Python или Bash, которые будут извлекать нужную информацию через библиотеки и команды, которые гарантированно работают в вашем окружении.

  5. Проверьте конфигурацию i2c: Убедитесь, что интерфейсы управления оборудованием, такие как i2c, корректно настроены и доступны в вашей системе. Для этого может потребоваться настройка ядра или изменение параметров загрузки.

Подводя итог, вы можете нашел способы решения, позволяющие обойти ограничения ‘get-edid’ и использовать другие механизмы, доступные в Ubuntu. Понимание архитектуры загрузки, версий драйверов и использования gnome-библиотек станет ключом к успешному выполнению задачи.

Оцените материал
Добавить комментарий

Капча загружается...