我刚刚在我的新 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 像素格式,您需要执行以下三件事:
- 复制显示器的 EDID 二进制文件
- 编辑二进制文件以禁用 YPbPr 输入
- 在启动时加载修改后的二进制文件
这个过程有点难以解决,但执行起来相对简单,并且所需时间应该比看起来的要少。
此外,您只需对每个显示器执行一次步骤 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然后,使用+O和Ctrl+保存并关闭文件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 驱动程序支持手动选择像素格式。不幸的是,由于这个问题已经存在了一段时间,如果戴尔用户和其他用户注意到这个问题,他们可能仍然需要这种解决方法。