如何使用英特尔 i915 驱动程序使 linux 检测/重新探测显示器?

jor*_*rsn 8 linux drivers linux-kernel monitors

我有一台运行 linux 的笔记本电脑,带有 nvidia optimus/intel 混合显卡,其中所有输出都连接到英特尔卡。它由 i915 驱动程序驱动。

一个外部监视器或投影仪仅在一个启动周期中被发现一次:如果我禁用或拔掉它(然后再次插入),则无法再次启用它,因为 linux 内核不再检测到它:没有 udev 或 acpi在我的情况下/sys/class/drm/card0-DP-1/status,plug/unplug 和 sysfs 上的事件表明输出已断开连接。重新启动后,再次检测到显示器,并且恰好再次检测到一次。暂停/休眠和恢复也足够了,但前提是在重新启动时增加了输出。

我认为这在某种程度上与启动时输出设备的内核探测/重新探测有关。是否可以以某种方式诱导内核重新探测监视器,从而希望再次检测到它们?

der*_*ert 11

这不是我知道在 X 中有效的 xrandr 方法,但是对于控制台,您可以尝试此方法 - 您也可以写入/sys/class/drm/card0-DP-1/status文件。我找不到合适的文档,但幸运的是 Linux 是开源的。回顾源代码,它看起来像它需要几个值:detectonon-digital,和off

所以echo detect > /sys/class/drm/card0-DP-1/status应该强制重新检查显示器。或者echo on-digital > /sys/class/drm/card0-DP-1/status可能设法打开它,不管检测怎么想。

编辑:在 X 下,我用它来处理未检测到插入的 HDMI - 它会强制启用输出。但不幸的是,只有视频,HDMI 音频将无法工作(如果没有内核补丁,显然是不可能的):

xrandr --newmode "Mode 2" 148.500 1920 2008 2052 2200 1080 1084 1089 1125 +hsync +vsync
xrandr --addmode HDMI-1 "Mode 2"
xrandr --output HDMI-1 --mode "Mode 2" --right-of LVDS-1
Run Code Online (Sandbox Code Playgroud)

所有这些数字都指定了视频时间;通常它是自动检测到的,获取它们的最简单方法是在使用它启动时获取它正在使用的模式,以便它可以工作(xrandr --verbose将显示它们)。