Linux 检索监视器名称

新手上路,请多包涵

情况:我正在使用多个监视器,我想在 bash 中获取它们的名称。目前我正在使用 Ubuntu 10.04。

我知道xrandr。从中我只能得到统计数据。我想要的是读取数组中的所有监视器名称以使用它们。

有没有一种明确的方法可以做到这一点,而无需从某种字符串中删除名称?一个明确的方法是从文件中读取它们。一种不清楚的方法是将 xrandr 输出通过管道传输到某种函数以从中删除名称。

原文由 Jānis Gruzis 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 547
2 个回答

sudo get-edid 对我不起作用。 (编辑:现在可以在另一台计算机上运行,Lubuntu 14.10;我会责怪 BIOS 差异,但这是随机猜测……)

无论如何,在 X 下, xrandr --verbose 打印 EDID 块。这是一种快速而肮脏的方法来提取它并传递给 parse-edid

 #!/bin/bash
xrandr --verbose | perl -ne '
if ((/EDID(_DATA)?:/.../:/) && !/:/) {
  s/^\s+//;
  chomp;
  $hex .= $_;
} elsif ($hex) {
  # Use "|strings" if you dont have read-edid package installed
  # and just want to see (or grep) the human-readable parts.
  open FH, "|parse-edid";
  print FH pack("H*", $hex);
  $hex = "";
}'

原文由 Beni Cherniavsky-Paskin 发布,翻译遵循 CC BY-SA 3.0 许可协议

受贝尼回答的启发,这将使用 xrandr 读取 EDID 数据,并根据 EDID 规范 提取监视器名称,不需要任何外部工具,例如 parse-edid

 #!/bin/bash
while read -r output hex conn; do
    [[ -z "$conn" ]] && conn=${output%%-*}
    echo "# $output $conn   $(xxd -r -p <<< "$hex")"
done < <(xrandr --prop | awk '
    !/^[ \t]/ {
        if (output && hex) print output, hex, conn
        output=$1
        hex=""
    }
    /ConnectorType:/ {conn=$2}
    /[:.]/ && h {
        sub(/.*000000fc00/, "", hex)
        hex = substr(hex, 0, 26) "0a"
        sub(/0a.*/, "", hex)
        h=0
    }
    h {sub(/[ \t]+/, ""); hex = hex $0}
    /EDID.*:/ {h=1}
    END {if (output && hex) print output, hex, conn}
    ' | sort
)

Uses awk to precisely extract the monitor name only , and no extra garbage from the EDID, hence “magic numbers” like 000000fc00 , 26 and 0a .最后使用 xxd 将十六进制转换为 ASCII,每行打印一个监视器名称。

基于这个解决方案,我制作了一个 方便的脚本来切换监视器,它也可以用来简单地列出监视器信息:

 $ monitor-switch --list
Connected monitors:
# DFP5  HDMI    HT-R391
# DFP7  DVI-I   DELL U2412M

$ monitor-switch --list
Connected monitors:
# DisplayPort-1 DisplayPort DELL U2412M
# DisplayPort-3 DisplayPort DELL U2415
# HDMI-A-2      HDMI        LG TV

原文由 MestreLion 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题