我在 Ubuntu 18.04 桌面上,配备英特尔高清集成显卡和一个 2560x1440 屏幕,通过 DP (DisplayPort) 电缆连接。使用具有较小显示器的同一个桌面时,我没有遇到过这个问题。
在这个大显示器上,每次我从锁定屏幕(输入系统唯一用户帐户的密码)恢复时,可用的最高分辨率逐渐从 GNOME 设置和显示的选项列表中删除xrandr
。最初,在系统启动后:
$ xrandr
Screen 0: minimum 320 x 200, current 2560 x 1440, maximum 8192 x 8192
VGA-1 disconnected (normal left inverted right x axis y axis)
HDMI-1 disconnected (normal left inverted right x axis y axis)
DP-1 connected primary 2560x1440+0+0 (normal left inverted right x axis y axis) 699mm x 393mm
2560x1440 59.95*+
2880x1620 60.00
2048x1152 60.00
1920x1200 59.88
...然后在第一次屏幕锁定和恢复之后,消除了比自然分辨率更高的分辨率(通过还没有可见的效果):
Screen 0: minimum 320 x 200, current 2560 x 1440, maximum 8192 x 8192 ...
2560x1440 59.95*+
2048x1152 60.00
1920x1200 59.88
...然后第二个屏幕锁定和恢复将当前分辨率降低到 2048x1152:
Screen 0: minimum 320 x 200, current 2048 x 1152, maximum 8192 x 8192 ...
DP-1 connected primary 2048x1152+0+0 (normal left inverted right x axis y axis) 699mm x 393mm
2048x1152 60.00*
1920x1200 59.88
...第三个将屏幕缩小到 1920x1200,每次都在列表的下方:逐步消除每个屏幕锁定的最高可用屏幕分辨率和视频频率对。
显示器是 Acer EB321HQU - 将其关闭并再次打开对可用分辨率没有影响,除非系统也重新启动。有相关的错误报告,但仅针对 nVidia 显卡确认,不适用于我的情况。到目前为止,我也尝试过这些,但对问题没有影响:
- 从默认切换
gdm3
到lightdm
- 在Open Graphics Drivers PPA 上将视频驱动程序
xserver-xorg-video-intel/bionic
从本机升级2:2.99.917+git20171229-1
到更新版本2:2.99.917+git1903011933.6afed3~oibaf~b amd64
- 编辑:断开和重新连接 DP 电缆将最大分辨率进一步降低到 1024x768。
首先生成
xorg.conf
如下模板文件(即使您已经在运行 X / GNOME / 显示管理器,它也应该可以工作):然后将生成的文件复制
/root/xorg.conf.new
到/etc/X11/xorg.conf
其中,因为默认情况下会自动确定 X 参数,因此在更高版本的 Ubuntu 上该文件将成为新文件。这是我自己的解决方案与更简单、更通用的解决方案不同的地方:1,一般)某些图形卡的用户可以通过在以以下开头的部分中添加适合行为不端的显示器的行来简单地解决此问题
Section "Monitor"
:X 服务器使用一个名为EDID的系统来自动查询分辨率,并且有许多报告的问题是外部和笔记本电脑显示器的结果不完整(我首先认为这是在屏幕锁定/解锁和挂起/恢复之后发生在我身上)。显式设置
Modeline
倾向于确保无论 EDID 响应如何,X 服务器都可以使用此分辨率。我能够通过Modeline
两种方式得到这个(还有其他方式):/var/log/Xorg.0.log
xorg.conf 中的 Ubuntu 文档页面X/Config/Resolution > statically setup很好地概述了 X 配置和相关问题。
2,我自己的解决方案)但是,在Xorg日志文件中我发现
DDC gathered Modelines
)PreferredMode
正确解析但随后被拒绝。我意识到我必须用仅包含 Modelline 的显卡来替换损坏的 EDID,以实现正确的分辨率。但是我的系统在 Intel HD 显卡上,大多数处理 EDID (
UseEDID
,UseEDIDFreqs
,IgnoreEDID
) 的选项都不受支持(在日志文件中标记is not used
),所以我完全没有成功抑制 EDID。关于使用另一个 EDID Xorg 选项来提供自己的 EDID 配置的正面和负面报告(源于此错误报告)都有。
CustomEDID
我在这里尝试了这个过程(用于编译和 edid.bin 文件,其中只有我自己的模式行)并且它工作,尽管报告它不会:通过 xorg.conf 创建和使用 edid.bin >方法 2:生成 edid。来自 Xorg 模式行的 bin(edid 生成器)我当前的工作配置,问题已解决,因此将这两行添加到该
"Screen"
部分(而不是解决方案#1中的相应"Monitor"
行):... where
DP1
与该"Monitor"
部分中的标识符标记匹配,因此与xrandr
. 下次重新启动时,xorg.conf
我有一个更短的分辨率列表xrandr
,现在无论显示器上的屏幕变黑多少次,它都会持续存在。顺便说一句,如果互联网上有关英特尔驱动程序无法识别该
CustomEDID
选项的报道对我来说是真的(!注意!我正在使用 OP 中提到的开源驱动程序!),我会在将自定义 EDID 数据指定为内核参数:ArchLinux > 内核模式设置 > 强制模式和 EDID为什么会发生这种情况? (简短的回答:显示器 EDID 是由宏碁生产并损坏的,但这将通过“驱动程序”为大多数 Windows 修复,这实际上只是将 EDID 配置硬编码到计算机本身的注册表项。)一个程序
get-edid
,在上面的链接过程中提到,从我的显示器中提取了损坏的 EDID:...并且当通过它运行其输出时
edid-decode
,显示只有较低的分辨率被归类为“已建立的时序”或“标准时序”,而不断下降的较高分辨率仅出现为一组时序特征。此外,当将该输出通过第三个程序parse-edid
时,它显示模式1920x1080
实际上是PreferredMode
,这最终解释了为什么屏幕重新启动最终返回到该模式。编辑:截至 2020 年 1 月中旬,使用任何 EDID 选项时,带有英特尔驱动程序的更新 Xorg 服务器将崩溃或无法启动。有一些关于此的未解决的错误可以在第一眼互联网搜索中找到。因此,上面的解决方案在这种特殊情况下不再适用,尽管它可能仍然具有更普遍的用途。
如果无法以任何其他方式升级固件,我建议遇到此问题的任何人立即联系他们的硬件制造商更换显示器。具有讽刺意味的是,微软提供了最好的解释,为什么这个问题真的只能在制造厂解决,而不是在桌面上:覆盖监视器 EDID
编辑 2:截至 2020 年 2 月末,我已经测试了使用内核模式设置(强制模式和 EDID)设置 EDID,通过添加引导选项注册自定义 EDID 文件:
在上述条件下(我的显示器、显示器和 DP 连接),这可以完美地在挂起/睡眠后唤醒时保持理想的显示分辨率,但只要显示器在没有从睡眠中唤醒的情况下不消屏,那么 X 屏幕就会被打乱。
总结:我只能希望以上提供一些选项来帮助解决其他平台上的这个问题,而不是提供一个通用的解决方案。
我有一个非常相似的问题:暂停后有时会丢失最高分辨率。根本原因似乎是监视器中的 EDID 有点错误。
解决方案1.:升级您的显示器固件或更换它。解决方案 2:当您拥有最高分辨率时(当您可以使用例如 xrand 更改为该分辨率时),然后读取您的显示器的 EDID 并将其设置为 xorg.conf 中的 CustomEDID。
2. 解决方案对我有用(AOC 24" display with intel/i915 graphics card on 4.19 kernel)。上面的两个解决方案都非常详细@rphair,非常感谢!(我仍然无法将其添加为评论然而..)