硬件
我有以下硬件配置:
- 运行Ubuntu 10.04的 PC
- 带 1 个 VGA 输出的板载显卡(Intel P4M800 - Via Unichrome)
- VGA分配器:1输入,4输出。高达 2048x1536(根据规格)
- 一台 42 英寸电视/显示器通过其 VGA 输入连接到分配器
- 两台 32 英寸电视/显示器通过其 VGA 输入连接到分配器
问题
使用该配置,Ubuntu 仅显示 640x480 和 800x800 作为可能的分辨率。但是,如果我将任何电视/显示器直接连接到 PC(通过 VGA),那么 Ubuntu 会显示一长串可能的分辨率(我尝试了其中的几个,它们工作正常)。
X Window 系统自动配置似乎无法正常工作。如何手动配置它?哪些信息应该事先了解所涉及的不同设备?
背景:监视器安装在一栋建筑物的公共空间中,以显示在 PC 中处理的动态信息(在 Firefox 中以全屏模式运行的 Flash 演示文稿)。
更新:
我尝试了以下方法,因为答案中提供的链接说:
使用获取分辨率的模式行
cvt
使用创建新模式
xrandr --newmode
使用将模式添加到输出显示
xrandr --addmode
尝试使用更改分辨率
xrandr --output ... --mode ...
但我明白了:xrandr screen cannot be larger than 800x600 (desired size ...)
以下是显示器自动检测的工作原理:每个显示器的固件都包含一个称为 EDID 的数据块,它对显示器的分辨率和刷新率等进行编码。视频驱动程序通过视频卡/监视器连接进行硬件调用以检索此数据。
分离器(如 KVM)操纵从卡到监视器的路径。一些 KVM 正确地传递了 EDID,而另一些则没有。我的猜测是您的拆分器不允许传回 EDID。
事实上,我猜系统调用有一个内置假设,即给定连接器上只有一个 EDID 块,所以即使它返回一些东西,它也可能不是你想要的。
此外,虽然所有显示器都返回 EDID,但有些电视不会,或者返回损坏的 EDID。但是由于您在没有分配器的情况下对其进行了测试并且它工作正常,所以我认为这个问题不会影响您。
不同的显示器支持不同的分辨率和频率集,但 VESA 标准要求所有显示器至少支持两种:640x480 和 800x600。因此,当 X 对与其连接的显示器一无所知时,它会回退到这两种分辨率。这就是为什么这些是您看到的唯一可用的。
无论如何,我认为在这种情况下,您不能依靠 EDID 来神奇地自动配置您的显示器。相反,您需要自己手动指定数据。
如果您指定了您的视频驱动程序或链接到您的 Xorg.0.log,我可以为您提供更具体的信息。该过程因您使用的视频驱动程序而异。如果它是支持 KMS 的驱动程序,例如 -intel 或 -ati,则必须通过内核指定它。如果您关闭了 KMS 或正在使用非 KMS 驱动程序,但该驱动程序支持 RANDR(例如 -fglrx),您可以使用 xrandr 命令行工具添加模式行,例如https://wiki 底部的文档。 ubuntu.com/X/Config/Resolution. 如果您使用的是非 KMS、非 RANDR 驱动程序,例如 -nvidia,则它完全在您的 /etc/X11/xorg.conf 中进行控制;在后一种情况下,您需要查找所有显示器的垂直和水平刷新率(希望它们都接近相同的范围,否则您会搞砸的),然后通过 HorizSync 和 VertRefresh 选项指定这些值在 xorg.conf 中。您还需要在 xorg.conf 中添加分辨率。 可能您可能还需要构建一个 ModeLine,但我敢打赌只有 HorizSync 和 VertRefresh 就足够了。
祝你好运,如果您遇到困难,请务必发布您的 /var/log/Xorg.0.log。
看起来 X 无法正确检测分离器的分辨率。
您可以使用 xrand 强制它使用任意分辨率。上面有一些 文档,请检查添加未检测到的分辨率部分和设置 Xrand 更改持久性。