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

Num*_*r79 5 linux xorg modeline nvidia-graphics-card debian-jessie

我最近买了一台戴尔 e1914h 显示器 18.5" 并支持 1366x768@60Hz 显示。专有 nvidia 驱动程序的问题是由于某些 nvidia 特定的东西(分辨率不能被 8 整除),专有 nvidia 驱动程序的问题是默认不支持 1366x768 分辨率。所以,我得到1368x768分辨率与 nvidia 驱动程序。我在 live cd 上使用 nouveau 启动并将模式行复制到 /etc/X11/xorg.conf 并且正在工作。是的 - 从 lmde live cd 复制自定义模式行后,Nvidia 的 1366x768@60Hz 模式正在工作使用 nouveau 驱动程序模块。但是,我想要的是,当水平/垂直前廊、后廊等值未知时,如何计算模型行,尽管我有一些有关可用监视器的详细信息: 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
Run Code Online (Sandbox Code Playgroud)

我在这里看到了一个帖子,但没有解释所有的水平和垂直值。我需要手动编写一个令人困惑的自定义模式行。有人可以对此有所了解吗?

这些是监视器的详细信息:

**Dell E1914H:**
Run Code Online (Sandbox Code Playgroud)
  • 水平分辨率:47.7Khz

  • 垂直分辨率:59.8Hz

  • 像素时钟:85.5Mhz

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

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

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

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

  • 像素间距 0.30 (H) mm x 0.30 (V) mm

  • 亮度(典型) 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

来自 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.
Run Code Online (Sandbox Code Playgroud)

当前模式 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
Run Code Online (Sandbox Code Playgroud)

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

"1366x768" 85.5 1366 hsyncstart hsyncend 1792 768 vsyncstart 795 vtotal +Hsync +Vsync
Run Code Online (Sandbox Code Playgroud)

小智 1

频率和 4 个水平值随水平分辨率缩放,而 4 个垂直值随垂直分辨率缩放。

所以你可以要求双倍分辨率(1366*2 = 2736)

gtf 2736 768 60
Run Code Online (Sandbox Code Playgroud)

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