为什么 Linux 无法识别我的显示器的原始分辨率?

为什么 Linux 无法识别我的显示器的原始分辨率?

我有一台 ViewSonic VA1931wa-LED 显示器,其原始分辨率为 1366x768 像素,刷新率为 60Hz。问题是,无论我做什么,它在 Windows 上都能正常工作,但在任何 Linux 发行版上都无法正常工作。我尝试过专有 nvidia 驱动程序(我的 GPU 是 nvidia GeForce 210)和 nouveau 驱动程序,我得到的最接近原始分辨率的分辨率是 1368x768 和 1360x768。

我也尝试在终端中输入 gtf 1366 768 60,输出如下:

    # 1368x768 @ 60.00 Hz (GTF) hsync: 47.70 kHz; pclk: 85.86 MHz

模式行“1368x768_60.00” 85.86 1368 1440 1584 1800 768 769 772 795 -HSync +Vsync

您可以清楚地看到,即使我输入 1366 个水平像素,输出结果也是 1368。那么,有没有办法强制我的显示器显示其原始分辨率?如果没有,那么还能做什么?

答案1

由于传统 CRTC 硬件在 Nvidia 显卡上的工作方式,您只能设置 8 的倍数的水平分辨率。1360 和 1368 是 8 的倍数,而 1366 不是。

您没有说明显示器如何连接到显卡(VGA、DisplayPort、HDMI/DVI 等)。细节有点复杂,但同样出于遗留原因,其中一些连接包括水平和垂直阶段,其中只发送空白像素。对于给定的模式行,您将获得总共 1584 个水平像素中的 1368 个帧缓冲区像素。

这意味着 1368 范围的最后两个像素不显示并不重要,卡会发送另外 216 个空白像素,这些像素也会被显示器忽略。

因此,对于您的情况,我只会选择 1368 水平分辨率。这意味着您的桌面右侧将有两个不可见的像素(我不知道有什么方法可以让 X 相信实际的帧缓冲区更小)。也许您可以将窗口管理器配置为始终忽略此区域。

编辑

VGA 使用模拟传输,因此连接到 VGA 的 LCD 有一个 A/D 转换器,用于将像素信息转换回数字。我不太确定你说的“显示器的某些垂直部分模糊”是什么意思,但如果你指的是等距的垂直区域或条纹,原因是 A/D 转换没有发生在像素边界上,而原因是总水平宽度(模式行中的 1584)不是显示器所需要的:这个总宽度将拉伸或收缩像素,因此在常规时间,采样将在像素之间的边界发生。

因此,您可以尝试调整模式行的总宽度(和/或同步值,以移动图像)。

另外,请查看您的/var/log/Xorg.0.log,它应该包含显示器通过 EDID 建议的模式行。或者使用其他工具读取 EDID 数据。如果您不知道如何解释日志,请将其上传到 pastebin 等,并使用链接编辑您的问题。

您可以尝试的另一件事是查找 Windows 使用的模式行(尽管我不确定在 Windows 下哪里可以找到此信息)。

相关内容