如何映射哪个外接显示器被视为哪个 DVI 插头?对于 displaylink、xrandr、udev

如何映射哪个外接显示器被视为哪个 DVI 插头?对于 displaylink、xrandr、udev

4 个外接显示器进入:4 个 DisplayLink 品牌外接显卡的集线器。(HDMI 转 USB)

我们称其为基座。基座通过一个 USB(-C) 插入我的笔记本电脑。

我已经制定了一条 udev 规则,它可以检测 dock 的识别属性,并xrandr在我热插拔它时运行我的命令。

这是 bash 命令:

#!/bin/sh
xrandr \
--output DP-1 --off \
--output DP-2 --off \
--output HDMI-1 --off \
--output HDMI-2 --off \
--output DVI-I-4-3 --mode 1920x1080 --pos 0x0 --rotate normal \
--output DVI-I-5-4 --mode 1920x1080 --pos 0x1080 --rotate normal \
--output DVI-I-2-1 --mode 1920x1080 --pos 1920x240 --rotate left \
--output DVI-I-3-2 --mode 1920x1080 --pos 3000x240 --rotate left \
--output eDP-1 --primary --mode 1920x1080 --pos 4080x1900 --rotate normal

问题是每次热插拔时,内核都会随机加载扩展坞的显示器/卡。换句话说,我无法预测命令DVI-I-M-N中将使用哪个显示器xrandr

您可以在附图中看到:我首先使用 GUI 检测并相应地编写脚本xrandr,然后我拔下底座,重新插入,现在 GUI 是错误的,因为显示的是以前的布局,而现在情况已经改变,因为当我再次单击检测时出现的红色标签不再与脚本匹配。(这意味着在现实世界中,我现在看到的是一个混乱的安排,而不是屏幕截图中 GUI 上显示的安排)

https://ibb.co/7VtznZq

因此,我需要唯一地标识每个显示器,并在最后一次热插拔时将其映射到内核为其“动态”(自适应)分配的 DVI 端口。为此,我看到了一些 EDID 内容。这里有一个文档,只是为了完整性,但不要费心阅读:

这里的重点是,所有插头类型都相同:HDMI(虽然在内核中加载为 DVI)。因此,这种方法不可用:https://stackoverflow.com/questions/5469828/how-to-create-a-callback-for-monitor-plugged-on-an-intel-graphics

更糟糕的是,所有显示器都是同一品牌的同一型号。这意味着所有这些方法:

  1. $ ls /sys/class/drm/*/edid | xargs -i{} sh -c "echo {}; parse-edid < {}"(需要 $ sudo apt install read-edid -y),为四个监视器检索相同的IdentifierModelName和。(来源:VendorName通过命令行显示监视器信息
  2. $edid-decode </sys/class/drm/card2-DVI-I-1/edid应用于 { card3-DVI-I-2, card4-DVI-I-3, card5-DVI-I-4} 检索 2 个不同的Serial Number, Made in week, 和两个批次Checkshum。这是因为我首先购买了 2 台显示器,然后第二年又购买了 2 台。如果您想知道为什么有这么多卡,那么 card0 是英特尔 iGPU,card1 是 nvidia dGPU,其他属于底座https://ibb.co/CJvZPzg.(来源:https://askubuntu.com/a/1149585/1173345
  3. $sha1sum /sys/class/drm/card2-DVI-I-1/edid | cut -f1 -d " "仅为 4 个不同的显示器/卡提供 2 个不同的 40 位密钥。(来源:https://tyler.vc/auto-monitor-detection-on-linux

失败。

如何为每个监视器获取一个非常独特的标识符,以便在某些 udev 规则中重命名它们,以便知道每个监视器与哪个 DVI 相关联?

我可以自己重写 EDID 吗?怎样做?

相关内容