在没有 acpi、xrandr、/sys 和 udev 的情况下如何检测显示器何时插入或拔出?

在没有 acpi、xrandr、/sys 和 udev 的情况下如何检测显示器何时插入或拔出?

我已阅读以下问题的答案这个问题但我没有 ACPI,该/sys/class/drm/card0-socket/status方法不起作用,并且该xrandr方法会阻塞我的 CPU。udevadm monitor插入(拔出)显示器时不显示任何内容。

我有一台 2013 年左右的 Lenovo ThinkPad w530,配有 nVidia Quadro 等。我正在使用nouveau驱动程序运行 Lubuntu 18.04。显示器是 27 英寸飞利浦 271S。我使用的是 VGA 电缆。

如何检测显示器的插入(拔出)情况?

答案1

我采取了轮询外部屏幕 EDID 的方式。我安装了 read-edid 包,在 visudo 中添加了一行

%sudo ALL=(ALL:ALL) NOPASSWD:/usr/bin/get-edid

允许无密码 get-edid 并使用以下循环:

#!/bin/bash
# edid_based_automatic_display_loop.sh
导出NEW_CONNECTION=1
导出NEW_DISCONNECTION=1

尽管 :
    睡觉 1
    sudo get-edid 2>/dev/null|parse-edid 2>/dev/null|grep "PHL 271S7Q">/dev/null
    _DISCONNECTED=`回显 $?`
    # 回显“已断开$_DISCONNECTED”
    如果 [ $_DISCONNECTED = "0" -a $NEW_CONNECTION = "1" ] ;然后
        导出NEW_DISCONNECTION=1;
        导出NEW_CONNECTION=0;
        bash /home/bruno/.screenlayout/only_external.sh
    elif [ $_DISCONNECTED = "1" -a $NEW_DISCONNECTION = "1" ] ;然后
        导出NEW_DISCONNECTION = 0;
        导出NEW_CONNECTION=1;
        bash /home/bruno/.screenlayout/only_laptop.sh
完毕

相关内容