получить производителя, идентификатор продукта и серийный номер дисплея.

getreport не может читать с терминала, потому что это фоновый процесс.

человек 2 прочитал :

EIO: ошибка ввода-вывода.
Это произойдет, например, когда процесс находится в группе фоновых процессов, пытается читать со своего управляющего терминала и либо игнорирует, либо блокирует SIGTTIN, либо его группа процессов осиротела.

Думаю, то, что вы хотите, невозможно без оболочки. Но, возможно, это ближе к тому, что вы хотите:

mkfifo fifo; read -p "Input for FIFO: " input; echo "$input">fifo &
cat <(read bginput <fifo; echo "$bginput"); rm fifo

Это явно не работает для неправильных паролей и повторных попыток чтения.

mkfifo fifo; read -p "Input for FIFO: " input; echo "$input">fifo &
processreport -i <(getreport <fifo); rm fifo
1
15.03.2019, 11:04
2 ответа

Такая информация доступна через подсистему /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. Посмотрите на их исходный код и обратите внимание, какие библиотеки они используют.

5
27.01.2020, 23:18

У меня было два монитора Dell U3014, которые были почти идентичными (никакой разницы в синтаксическом анализе -выводе edid ), но я мог видеть разные серийные номера при проверке файла edid для 5-го и 6-го портов дисплея:

# Compare edid output
diff -a /sys/class/drm/card0-DP-{5,6}/edid
1c1
PT�K���qO�@�����h��@.`0 6��!�P1V6N45V001L
---
PT�K���qO�@�����h��@.`0 6��!�P1V6N45V002L
4c4
<       ��P� #  �:�q8-@X,E��!�q X,%��!�rQ� n(U��!�
---
>       ��P� #  �:�q8-@X,E��!�q X,%��!�rQ� n(U��!�

# Better view of just serial numbers:
grep -ao 'P1V6N45V00.L' /sys/class/drm/card0-DP-*/edid
/sys/class/drm/card0-DP-5/edid:P1V6N45V001L
/sys/class/drm/card0-DP-6/edid:P1V6N45V002L

Также следует отметить, что карта 0 -DP была помечена как 1 -8, где, как и в arandr, они были указаны как 0 -7. Таким образом, чтобы сопоставить edid с arandr, вы вычитаете один :DP -5=DP -4 и DP -6=DP -5.

0
27.01.2020, 23:18

Теги

Похожие вопросы