Linux检索监视器名称

Jān*_*zis 12 linux ubuntu xserver

情况:我正在使用多个显示器,我想用bash命名.目前我正在使用Ubuntu 10.04.

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

如果没有从某种字符串中删除名称,有没有明确的方法可以做到这一点?一个明确的方法是从文件中读取它们.一个不太明确的方法是将xrandr输出管道输出到某种类型的函数来从中删除名称.

Mes*_*ion 16

受Beni的回答启发,这将根据EDID规范读取EDID数据xrandr并提取显示器名称,无需任何外部工具,如: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}' | sort
)
Run Code Online (Sandbox Code Playgroud)

采用awk精确地提取监控器名称唯一,并从EDID没有多余的垃圾,因此"幻数"之类000000fc00,260a.最后用于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

Run Code Online (Sandbox Code Playgroud)


Ben*_*kin 9

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 = "";
}'
Run Code Online (Sandbox Code Playgroud)

  • 对于Intel卡,edid文件在/ sys中提供.`find/sys -name edid`.对于ATI来说,情况并非如此.无法验证NVidia. (2认同)

cod*_*n48 8

在Ubuntu 16.04,18.04上测试.(我知道回答太晚了,但今天这个解决方案很有用)

$ sudo apt-get install -y hwinfo
...
$ hwinfo --monitor --short
monitor:
                   SONY TV
                   AUO LCD Monitor
Run Code Online (Sandbox Code Playgroud)

我有两台显示器.一台配备笔记本电脑,另一台配备外接显示器.只要外接显示器插入或拔出,​​此命令就会反映出更改.你不断需要进行民意调查.删除--short选项可提供更详细的信息.

您可以使用以下后台作业轮询状态:

$ while true;
>  do
>   hwinfo --monitor --short;
>   sleep 2;
>  done >> monitor.log &
Run Code Online (Sandbox Code Playgroud)

while true循环运行无限次.该sleep 2暂停环路2秒的每次迭代.并hwinfo --monitor --short附加输出monitor.log.此日志文件可以为您提供监视器插件和插件的活动历史记录.

仅供参考:我正在使用上面的命令(和其他类似命令)使用后台(守护程序)python脚本来检测是否有人在计算机实验室中使用某些硬件插件和插件.如果是这样,我会得到适当的通知,表示有人几乎实时地插入显示器,鼠标或键盘!

有关hwinfo命令的更多信息在这里.它的手册页也是一个很好的来源.