使用 VGA 分配器的显示分辨率问题

使用 VGA 分配器的显示分辨率问题

硬件

我的硬件配置如下:

  • 电脑运行Ubuntu 10.04
  • 带有一个 VGA 输出的板载显卡(Intel P4M800 - Via Unichrome)
  • VGA 分配器:1 个输入,4 个输出。最高可达 2048x1536(根据规格)
  • 一台 42 英寸电视/显示器通过其 VGA 输入连接到分配器
  • 两台 32 英寸电视/显示器通过 VGA 输入连接到分配器

问题

在该配置下,Ubuntu 仅显示 640x480 和 800x800 作为可能的分辨率。但是,如果我将任何电视/显示器直接连接到 PC(通过 VGA),Ubuntu 会显示一长串可能的分辨率(我尝试了其中几种,效果很好)。

看起来X 窗口系统自动配置无法正常工作。我该如何手动配置它?事先应该了解涉及的不同设备的哪些信息?


语境:监视器安装在一栋建筑的公共区域,用于显示在电脑中处理的动态信息(在 Firefox 中以全屏模式运行的 Flash 演示文稿)。

更新

我尝试了以下操作,如答案中提供的链接所述:

  1. 使用以下方法获取分辨率的模式行:cvt

  2. 使用创建新模式xrandr --newmode

  3. 使用以下方式将模式添加到输出显示xrandr --addmode

  4. 尝试使用更改分辨率xrandr --output ... --mode ...

但我明白这一点:xrandr screen cannot be larger than 800x600 (desired size ...)

答案1

显示器自动检测的工作原理如下:每个显示器的固件都包含一个称为 EDID 的数据块,该数据块对显示器的分辨率和刷新率等进行编码。视频驱动程序通过视频卡/显示器连接进行硬件调用来检索这些数据。

分离器(如 KVM)控制从卡到显示器的路径。有些 KVM 可以正确传递 EDID,有些则不行。我猜是您的分离器不允许 EDID 传回。

事实上,我猜测系统调用有一个内置假设,即在给定的连接器上只存在一个 EDID 块,所以即使它返回了某些东西,也可能不是你想要的。

此外,虽然所有显示器都会返回 EDID,但有些电视不会,或者会返回损坏的 EDID。但由于您在没有分路器的情况下进行了测试并且工作正常,因此我认为这个问题不会影响您。

不同的显示器支持不同的分辨率和频率,但 VESA 标准要求所有显示器至少支持两种分辨率:640x480 和 800x600。因此,当 X 对所连接的显示器一无所知时,它会回退到这两种分辨率。这就是为什么您只能看到这两种分辨率。

无论如何,我认为在这种情况下您不能依赖 EDID 来神奇地自动配置您的显示器。相反,您需要自己手动指定数据。

如果您指定了视频驱动程序或链接到了 Xorg.0.log,我可以为您提供更具体的信息。具体过程取决于您使用的视频驱动程序。如果是支持 KMS 的驱动程序(如 -intel 或 -ati),则必须通过内核指定它。如果您已关闭 KMS 或正在使用非 KMS 驱动程序,但该驱动程序支持 RANDR(例如 -fglrx),则可以使用 xrandr 命令行工具(如底部所述)添加 modelinehttps://wiki.ubuntu.com/X/Config/Resolution。如果您使用的是非 KMS、非 RANDR 驱动程序(例如 -nvidia),则完全由您的 /etc/X11/xorg.conf 控制;在后一种情况下,您需要查找所有显示器的垂直和水平刷新率(希望它们都接近相同的范围,否则您就麻烦了),然后通过 xorg.conf 中的 HorizSync 和 VertRefresh 选项指定它们。您还需要在 xorg.conf 中添加分辨率。 有可能您可能还需要构建一个 ModeLine,但我敢打赌,仅 HorizSync 和 VertRefresh 就足够了。

祝你好运,如果你遇到困难请务必发布你的 /var/log/Xorg.0.log。

答案2

看起来 X 无法正确检测分离器的分辨率。

您可以使用 xrand 强制它使用任意分辨率。有一些 文档在上面,检查添加未检测到的分辨率部分设置 Xrand 更改持久性

相关内容