使用 nvidia 驱动程序为 1366x768 编写 Xorg 自定义模式行

使用 nvidia 驱动程序为 1366x768 编写 Xorg 自定义模式行

我最近买了一台 18.5 英寸的戴尔 e1914h 显示器,支持 1366x768@60Hz 显示。专有 nvidia 驱动程序的问题是由于某些 nvidia 特定问题(分辨率不能被 8 整除),默认情况下不支持 1366x768 分辨率。因此,我得到1368x768分辨率与 nvidia 驱动程序。我使用 live cd 上的 nouveau 启动,并将 modelines 复制到 /etc/X11/xorg.conf 并正常工作。是的 - 在从使用 nouveau 驱动程序模块的 lmde live cd 复制自定义 modeline 后,Nvidia 的 1366x768@60Hz 模式可以正常工作。但是,我想要的是,当水平/垂直前廊、后廊等值未知时,如何计算 modeline,尽管我有一些关于显示器的详细信息: http://cdn2.bhphotovideo.com/lit_files/94125.pdf

我想要实现的是使用 nvidia 支持的 1366x768@60 生成自定义 edid 二进制文件。我拥有的是显示器规格,如水平、垂直同步范围、像素时钟等。我找不到水平前沿等值来手动写入模式行。有知识的人可以帮忙吗?videogen、cvt、gtf 等的问题是它们都生成了 1368x768 模式行而不是 1366x768。gtf 输出:

:~$ gtf 1366 768 60
# 1368x768 @ 60.00 Hz (GTF) hsync: 47.70 kHz; pclk: 85.86 MHz 
Modeline "1368x768_60.00"  85.86  1368 1440 1584 1800  768 769 772 795  -HSync +Vsync

我看过一个帖子这里,但没有解释所有水平和垂直值。我需要手动编写自定义模式行,这很令人困惑。有人能解释一下吗?

以下是监视器的详细信息:

**Dell E1914H:**
  • 水平解析度:47.7Khz

  • 垂直分辨率:59.8Hz

  • 像素时钟:85.5Mhz

  • 同步极性:+/+ 扫描范围

  • 水平: 30 kHz 至 83 kHz(自动) 30 kHz 至 83 kHz(自动)

  • 垂直最大预置分辨率:56 Hz 至 75 Hz(自动)

  • 最大预设分辨率:1366 x 768(60 Hz)

  • 像素间距 0.30(水平)毫米 x 0.30(垂直)毫米

  • 亮度(典型值) 200 cd/m2

  • 色域(典型值) 83%

  • 色彩深度 1670 万色

  • 对比度(典型值)600:1

支持的分辨率: 支持的分辨率 Dell E1914H

这是我从 LMDE livecd 复制的自定义模式行:

    Section "Monitor"
    Identifier     "Monitor0"
    VendorName     "Dell"
    ModelName      "Dell E1914H"
    HorizSync      30.0 - 83.0
    VertRefresh    56.0 - 75.0
    DisplaySize    409.8  230.4
Modeline "1366x768"   85.50  1366 1436 1579 1792  768 771 774 798 +Hsync +Vsync
    Option         "DPMS"
EndSection

Nvidia 的具体事项,例如在 /etc/X11/xorg.conf.d/20-nvidia.conf 上禁用 edid:

    Section "Screen"
    Identifier     "Screen0"
    Device         "Nvidia 7300GT"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option         "UseEdidDpi" "FALSE"
    Option "ModeDebug" "true"
    Option "ExactModeTimingsDVI" "true"
    Option         "ModeValidation" "NoWidthAlignmentCheck, NoDFPNativeResolutionCheck"
#    Option "ModeValidation"    "AllowInterlacecModes, NoTotalSizeCheck,AllowNon60HzDFPModes,NoEdidMaxPClkCheck,NoVertRefreshCheck,NoHorizSyncCheck,NoDFPNativeResolutionCheck,NoVesaModes,NoEdidModes,NoXServerModes,NoPredefinedModes,NoMaxSizeCheck,NoVirtualSizeCheck,NoMaxPclkCheck,NoVertRefreshCheck"
    Option "UseEDID" "False"
    Option         "TwinView" "0"
    SubSection     "Display"
        Depth       24
        Modes   "1366x768"
    EndSubSection
EndSection

来自 Xorg.0.log:

    [     8.847] (II) NVIDIA(GPU-0):   Validating Mode "1366x768":
[     8.847] (II) NVIDIA(GPU-0):     1366 x 768 @ 60 Hz
[     8.847] (II) NVIDIA(GPU-0):     Mode Source: X Configuration file ModeLine
[     8.847] (II) NVIDIA(GPU-0):       Pixel Clock      : 85.50 MHz
[     8.847] (II) NVIDIA(GPU-0):       HRes, HSyncStart : 1366, 1436
[     8.847] (II) NVIDIA(GPU-0):       HSyncEnd, HTotal : 1579, 1792
[     8.847] (II) NVIDIA(GPU-0):       VRes, VSyncStart :  768,  771
[     8.847] (II) NVIDIA(GPU-0):       VSyncEnd, VTotal :  774,  798
[     8.847] (II) NVIDIA(GPU-0):       H/V Polarity     : +/+
[     8.847] (II) NVIDIA(GPU-0):     Mode is valid.

当前模式行 hsyncstart hsyncend 等可能不正确。根据 XFree86 Wiki,我缺少 hsyncstart hsyncend 和 vsyncstart vsyncend。

Modeline syntax: pclk hdisp hsyncstart hsyncend htotal vdisp vsyncstart vsyncend vtotal [flags]
 Flags (optional): +HSync, -HSync, +VSync, -VSync, Interlace, DoubleScan, CSync, +CSync, -CSync

我确实在查看后计算了这些值这里

"1366x768" 85.5 1366 hsyncstart hsyncend 1792 768 vsyncstart 795 vtotal +Hsync +Vsync

答案1

频率和 4 个水平值与水平分辨率成比例,而 4 个垂直值与垂直分辨率成比例。

因此,您只需要求双倍分辨率(1366*2 = 2736)

gtf 2736 768 60

将所有水平值和频率除以二。

相关内容