Как отличить подключенные мониторы?

Как отличить подключенные мониторы?

Чтобы автоматически изменить макет дисплея Xserver, когда я подключаю свой ноутбук, мне нужно не только обнаружить, что это событие действительно произошло, но икоторыймониторы подключены так, чтобы можно было различать настройки нескольких док-станций, т. е. есть несколько док-станций с разными подключенными мониторами. Как это возможно в Linux (предпочтительно в коде оболочки POSIX)?

решение1

Если вы действительно ищете способ автоматической настройки дисплеев при (от)стыковке, я предлагаю вам взглянуть наавторандрпрежде чем начать что-то подобное самостоятельно (в отличие от меня ;).

Чтобы определить, подключен ли определенный выход дисплея к монитору или нет, существуют хорошие ответы.в этом вопросе. Самым интригующим, кажется, будет посмотреть, /sys/class/drm/card0-*-*/statusчто читается connectedили disconnected.

Это не решает проблему, указанную в этом самом вопросе, но можно использовать очень похожий подход, поскольку существуют /sys/class/drm/card0-*-*/edid(кэшированные)Информация EDID или DDCсоответствующих мониторов. Если вам немного повезет, эти данные даже содержат серийный номер монитора и, таким образом, могут различать даже настройки идентичных типов мониторов (вы можете проверить с помощью edid-decode /sys/class/drm/.../edid).

Итак, для различения наборов подключенных мониторов я использую следующую функцию оболочки, которая во многом основана на функции с похожей функциональностью вавторандр.

# hash_sysfs_edid() simply concatenates the md5 hashes of all connected 
# monitors and hashes them again so that the output is always 32 characters long.
hash_sysfs_edid () {
  edid_hash=""
    for DEVICE in /sys/class/drm/card*-*; do
        [ -e "${DEVICE}/status" ] && grep -q "^connected$" "${DEVICE}/status" || continue
      edid_hash="${edid_hash}"$(md5sum "${DEVICE}/edid" | awk '{print $1}')
    done
  echo $(echo "$edid_hash" | md5sum | awk '{print $1}')
}

Связанный контент