AMD 显卡和外接显示器的清晰度

AMD 显卡和外接显示器的清晰度

我刚刚在我的新 AMD 笔记本电脑上安装了 Ubuntu 20.04。

主显示器似乎没问题,但我通过 HDMI(唯一选项)连接的任何外接显示器(在 1920x1200 戴尔和 4K 松下上测试)都存在清晰度问题(见右图,注意边缘)。阅读白色背景上的黑色文字时,模糊感非常烦人。

我可以通过直接在特定外接显示器的设置中手动设置较低的锐度(实际上是最低的)来降低它(见图中间)。建议采用此解决方法这里但它并不能完全解决问题,在某些情况下甚至是不可能的。

Windows 10 上一切正常(见左图)。

以下是有关图形的信息:

*-display                 
       description: VGA compatible controller
       product: Renoir
       vendor: Advanced Micro Devices, Inc. [AMD/ATI]
       physical id: 0
       bus info: pci@0000:06:00.0
       logical name: /dev/fb0
       version: d1
       width: 64 bits
       clock: 33MHz
       capabilities: pm pciexpress msi msix vga_controller bus_master cap_list fb
       configuration: depth=32 driver=amdgpu latency=0 mode=1920x1080 visual=truecolor xres=1920 yres=1080
       resources: iomemory:40-3f iomemory:40-3f irq:46 memory:460000000-46fffffff memory:470000000-4701fffff ioport:1000(size=256) memory:fd300000-fd37ffff

内核版本5.8.5-050805-generic

任何帮助表示感谢:]

展示

答案1

我在网上搜索了一下,发现人们在 Linux 上使用某些戴尔显示器和 amdgpu 时遇到问题的情况很常见。基本上,如果您发现戴尔显示器的轮廓/清晰度不佳且红色渗色,则很可能是这个问题。

无论是什么品牌,如果您的显示器支持 YPbPr(分量)输入,amdgpu 都会在 HDMI 输出上优先考虑这种像素格式,而不是 RGB(无论出于何种原因)。我注意到在我的显示器设置中,选择了 YPbPr,而当将其设置为 RGB 时,颜色完全不对。内核加载后,每次重启时,该设置也会自动“恢复”。

显然,这也是 Windows 系统上的一个潜在问题,但 Windows AMD 显卡驱动程序更改像素格式的本机设置,但不幸的是,Linux 驱动程序却不支持。(直到 5.10)

为了强制 RGB 像素格式,您需要执行以下三件事:

  1. 复制显示器的 EDID 二进制文件
  2. 编辑二进制文件以禁用 YPbPr 输入
  3. 在启动时加载修改后的二进制文件

这个过程有点难以解决,但执行起来相对简单,并且所需时间应该比看起来的要少。

此外,您只需对每个显示器执行一次步骤 1 和 2,然后在安装新系统时只需重复步骤 3。

1. 复制显示器的 EDID 二进制文件来源

您的显示器会发送元数据(称为“EDID”),该元数据保存在系统分区上的二进制文件中。您可以通过终端找到该二进制文件的位置:

find /sys/devices/pci*/*/*/*/card*/*HDMI* -name "*edid*"

输出看起来会像这样,你的数字可能会有所不同:

/sys/devices/pci0000:00/0000:00:08.1/0000:05:00.0/drm/card0/card0-HDMI-A-1/edid

如果您有多个 HDMI 显示器,您可以输入xrandr以尝试根据其分辨率确定哪个是第一个。否则,显示启动和登录屏幕的显示器是第一个显示器。如果有疑问,您也可以暂时拔下不会引起问题的显示器。

一旦确定了有故障的 HDMI 显示器,也许可以在主文件夹中创建一个新目录并将文件复制到那里:

mkdir EDID
cp /sys/devices/<YOUR-PATH>/drm/card0/card0-HDMI-A-1/edid EDID/<YOUR-MONITOR-MODEL>-edid.bin

(假设 HDMI-A-1 导致问题 - 用您自己的路径替换这些片段,并可能根据您的显示器型号命名您的文件。)

2. 编辑二进制文件以禁用 YPbPr 输入

现在您已经复制了显示器的 EDID 文件,但由于它是二进制文件,因此您需要特定的软件来编辑它。

现在,您必须从 Sourceforge 下载 wxEDID:https://sourceforge.net/projects/wxedid/

源代码位于 Debian 的存储库中,但不幸的是,目前(21 年 6 月)Debian 或 Ubuntu 中还没有该软件包,因此您必须自己构建它。

首先,安装必要的开发包:

sudo apt update && sudo apt install libwxgtk3.0-gtk3-dev

然后,解压您下载的 wxEDID 源档案并在该目录中打开一个终端。

./configure --prefix=$HOME
make
make install

(这将构建并安装 wxEDID 到您的主目录中,您可以稍后将其删除,甚至可以在实时系统上构建它。)

之后,打开一个新的终端并启动 wxEDID:

bin/wxedid

在 wxEDID 中,打开显示器的复制 EDID 文件,该文件可能位于用户的 home/EDID 中。然后根据需要编辑以下几行:

SPF: Supported features- vsig_format=0b00

CHD: CEA-861 header- YCbCr 4:2:2& YCbCr 4:4:4=0

VSD: Vendor Specific Data Block- DC_Y444=0

然后从菜单中选择Option和。然后保存修改后的文件,如下所示Assemble EDID<YOUR-MONITOR-MODEL>-edid-rgb.bin

如果您再次需要修改后的显示器 EDID 文件,您可以立即复制并存储它。

3. 在启动时加载修改后的二进制文件来源

要将其加载到您的系统中,首先创建一个具有 root 权限的目录:

sudo mkdir -p /lib/firmware/edid

然后将修改后的文件复制到那里,同样具有 root 权限:

sudo cp EDID/<YOUR-MONITOR-MODEL>-edid-rgb.bin /lib/firmware/edid/

此后,您必须将文件的加载添加到内核启动命令中,例如通过 GRUB:

sudo nano /etc/default/grub

编辑此行GRUB_CMDLINE_LINUX_DEFAULT=以包含:

drm.edid_firmware=HDMI-A-1:edid/<YOUR-MONITOR-MODEL>-edid-rgb.bin

quiet splash

(这假设您的故障显示器一开始是 HDMI-A-1,否则,请相应地更改数字。)

Ctrl然后,使用+OCtrl+保存并关闭文件X并重新加载 GRUB:

sudo update-grub

最后,您必须添加一个 initramfs-hook 来加载自定义固件,否则您将在启动日志中收到错误。创建一个新文件:

sudo touch /etc/initramfs-tools/hooks/edid

打开它:

sudo nano /etc/initramfs-tools/hooks/edid

输入以下代码:

#!/bin/sh
PREREQ=""
prereqs()
{
    echo "$PREREQ"
}

case $1 in
prereqs)
    prereqs
    exit 0
    ;;
esac

. /usr/share/initramfs-tools/hook-functions
# Begin real processing below this line
mkdir -p "${DESTDIR}/lib/firmware/edid"
cp -a /lib/firmware/edid/<YOUR-MONITOR-MODEL>-edid-rgb.bin "${DESTDIR}/lib/firmware/edid/<YOUR-MONITOR-MODEL>-edid-rgb.bin"
exit 0

(再次用显示器的修改后的 EDID 文件替换二进制路径。)

然后,保存并关闭此文件并使其可执行:

sudo chmod +x /etc/initramfs-tools/hooks/edid

最后,更新你的 initramfs:

sudo update-initramfs -u

现在,您需要做的就是重新启动(我必须完全关机并关闭显示器一次),显示质量应该很好。

我希望这个问题将在未来的驱动程序版本中得到解决,尤其是因为 Windows 驱动程序支持手动选择像素格式。不幸的是,由于这个问题已经存在了一段时间,如果戴尔用户和其他用户注意到这个问题,他们可能仍然需要这种解决方法。

相关内容