如何移动帧缓冲区或 X 屏幕相对位置?

如何移动帧缓冲区或 X 屏幕相对位置?

很久以前在遥远的银河系里我使用固定启动屏幕这个不错的解决方案。从那时起,我一直在寻找将虚拟控制台中的帧缓冲区相对于X屏幕位置稍微向右和向下移动的方法(反之亦然),因为它显示在错误的位置,并且无法看到部分符号。我使用裁剪工具和fbgrab命令重现了这个问题的外观和感觉:

控制台截图

GRUB 菜单也将其左侧隐藏在屏幕后面,但我不知道如何在没有 VirtualBox 的情况下进行屏幕截图(我怀疑这个屏幕截图会有用)。然而,主 X 屏幕显示在正确的位置(在我看来),并且我的显示器 (ACER AL1916) 始终自动调整到该位置,即使显示虚拟控制台也是如此。

我查看了包括 AskUbuntu 在内的许多来源,但只找到了一种解决方案:从 VGA 电缆切换到 DVI,这是不可接受的,因为我的显卡(NVIDIA 6150SE)只有板载 VGA 端口。

我还发现该fbset命令可以调整屏幕参数,但需要帮助来了解它是如何工作的。这是命令的输出sudo fbset

mode "1280x1024-77"
    # D: 131.096 MHz, H: 80.328 kHz, V: 76.649 Hz
    geometry 1280 1024 1280 1024 32
    timings 7628 160 32 16 4 160 4
    rgba 8/16,8/8,8/0,8/24
endmode

UPD:在报告不受影响的错误期间发现一行内容如下:

.proc.driver.nvidia.warnings.fbdev:
 Your system is not currently configured to drive a VGA console
 on the primary VGA device. The NVIDIA Linux graphics driver
 requires the use of a text-mode VGA console. Use of other console
 drivers including, but not limited to, vesafb, may result in
 corruption and stability problems, and is not supported.

那么,有谁知道如何调整虚拟控制台或 X 屏幕的相对位置?

答案1

恐怕你的问题的核心与VGA的使用有很大关系。问题在于 VGA 信号是模拟信号。基本上,视频卡在 hte VGA 端口上发出的模拟信号用于驱动电磁线圈并调整老式电子管显示器中电子枪的输出。这些较旧的显示器没有离散的像素网格,并且显示屏很少从边缘到边缘齐平。

对于非模拟设备的 LCD,当使用 VGA 时,LCD 显示器中的电路必须(我在这里大大简化了细节)基本上模拟旧的 CRT 显示器的工作原理,将输入信号转换为每个显示器的数据。液晶显示器像素。这绝不是一个完美的过程,有时 LCD 电路在与 VGA 信号扫描线的开头同步时会遇到问题。通常,具有模拟输入的 LCD 显示器会有一个“自动调整”按钮,该按钮将触发显示器内部的“重新配置/重新同步”算法。我建议您查看 LCD 手册以了解详细信息。

这种尴尬的情况就是为什么鼓励有能力的人改用 DVI,其中像素数据以数字方式从视频卡传输到显示器。

对于您的情况,我发现通常可以通过更改显卡使用的分辨率和刷新率来解决该问题。例如,在 Linux 文本控制台中,尝试以下命令:

sudo fbset -a 1280x1024-60

如果有效,则可以确认您的液晶显示器在与视频卡的输出同步时遇到问题。

如果您打算使用 NVIDIA 专有驱动程序,我鼓励您注意 NVIDIA Linux 驱动程序的警告并禁用控制台帧缓冲区驱动程序。如果帧缓冲区支持很重要,那么我建议您考虑使用 nouveau 驱动程序,考虑到您的显卡的使用年限,该驱动程序应该可以很好地工作。

祝你好运。

相关内容