如何区分连接的显示器?

如何区分连接的显示器?

要在连接笔记本电脑时自动更改 Xserver 的显示布局,我不仅需要检测该事件是否实际发生,还需要检测哪个连接显示器能够区分多个扩展坞设置,即有多个扩展坞具有不同的连接显示器。这在 Linux 上怎么可能(最好是在 POSIX shell 代码中)?

答案1

如果您实际上正在寻找一种在对接(取消)对接时自动设置显示器的方法,我建议您查看自动排序在自己开始做类似的事情之前(不像我;)。

要检测某个显示输出是否连接到显示器,存在好的答案在这个问题中。最有趣的似乎是看看/sys/class/drm/card0-*-*/status哪个读取connecteddisconnected

尽管这并不能解决这个问题中所述的问题,但可以采取非常相似的方法,因为存在/sys/class/drm/card0-*-*/edid(缓存)EDID 又名 DDC 信息各自的监视器。如果您幸运的话,此数据甚至包含显示器的序列号,因此甚至可以区分相同显示器类型的设置(您可以使用 进行检查edid-decode /sys/class/drm/.../edid)。

因此,为了区分附加监视器组,我使用以下 shell 函数,该函数在很大程度上基于具有类似功能的函数自动排序

# 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}')
}

相关内容