首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取显示器的制造商和产品ID及序列号。

问获取显示器的制造商和产品ID及序列号。
EN

Unix & Linux用户
提问于 2019-03-15 09:04:22
回答 2查看 6.6K关注 0票数 3

目标是在Linux平台下获取制造商和产品ID以及显示器的序列号。我最终需要在C++的程序中获得这些信息。但我也接受命令行的获取方法。

EN

回答 2

Unix & Linux用户

发布于 2019-03-15 09:26:57

这些信息可以通过/sys/class/drm子系统获得。像xrandr这样的工具广泛地使用它。现在,具体来说,这个子系统中的每个显示都有一个目录,其中有一个文件edid,扩展显示识别数据。

在基于Debian的系统上,有两个可用的包,edid-decode和read-edid。两者似乎都正常工作,但在旧的和过时的模型上,read-edid似乎工作得很好,而edid-decode则返回错误:

代码语言:javascript
复制
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命令,如下所示:

代码语言:javascript
复制
$ 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编写的。请考虑查看它们的源代码,并注意它们使用的是哪些库。

票数 6
EN

Unix & Linux用户

发布于 2019-06-30 20:21:45

我有两个几乎相同的戴尔U3014显示器(在解析输出方面没有区别),但在检查第5和第6显示端口的edid文件时,我可以看到不同的序列号:

代码语言:javascript
复制
# 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。因此,为了使之与数组匹配,减去一个: DP-5=DP-4,DP-6=DP-5。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/506449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档