SDB:配置显卡和监视器设置

跳转至: 导航, 搜索

有时候 X 服务器读取监视器的扩展显示识别数据(EDID)可能会出现问题,导致回退到一个安全的分辨率,这个分辨率是远低于监视器能承受的分辨率的。

若是这种情况可能需要修改 /etc/X11/xorg.conf.d/50-monitor.conf 文件。

例如,一部分辨率为 1680x1050 的华硕 X223w 需要定义其 HorizSync 和 VertRefresh 来显示其原生分辨率。

Section "Monitor"
 Identifier "Monitor1"
 VendorName "Unknown"
 ModelName "Acer X223W"
 HorizSync 31.0 - 84.0
 VertRefresh 56.0 - 77.0
EndSection

您需要自行去搜索正确的 HorizSync 和 VertRefresh。

然后按 CTRL + ALT + 退格两次来重启 X 服务器。

若有需要您也可以添加一行 modeline,但请先实验上面的。

为了计算 modeline 您需要使用 cvt 命令。参考这里的讨论学习它的用法。http://forums.opensuse.org/english/get-technical-help-here/how-faq-forums/unreviewed-how-faq/430150-opensuse-graphic-card-practical-theory-guide-users-6.html#post2280876

于是对于 1680x1050 的分辨率:

$ cvt 1680 1050

答案为:

# 1680x1050 59.95 Hz (CVT 1.76MA) hsync: 65.29 kHz; pclk: 146.25 MHz
Modeline "1680x1050_60.00"  146.25  1680 1784 1960 2240  1050 1053 1059 1089 -hsync +vsync

现在 /etc/X11/xorg.conf.d/50-monitor.conf 文件像这样:

Section "Monitor"
 Identifier "Monitor1"

 VendorName "Unknown"
 ModelName "Acer X223W"
 HorizSync 31.0 - 84.0
 VertRefresh 56.0 - 77.0

 ModeLine "1680x1050_60.00"  146.25  1680 1784 1960 2240  1050 1053 1059 1089 -hsync +vsync

EndSection

检测到了 EDID 但分辨率还是错的,原生分辨率不可用

这在使用 nouveau 驱动时会发生(nVIDIA gfx 和新的 LCD 监视器,它们的制造商声称它们只会在原生分辨率下才能好好工作),但使用其它显卡驱动时也可能发生。

在这种情况下监视器并不是工作在正确的分辨率下的,甚至命令xrandr 也不会显示需要的分辨率。例如您期望您的监视器(显示器是华硕 VE228H 配 nouveau 0.0.16_20120321 甚至是 1.0.2 驱动)工作在完全高清的分辨率下(1920x1080),但实际的分辨率很不一样(目前很差)并且您无法通过您桌面环境的显示管理器的 xrandr 来选择正确的分辨率。<bf /> 但若您打开 /var/log/Xorg.0.log 文件并查找您显示器的原生分辨率(例如 1920x1080,高清分辨率),您将找到:

[  1205.464] (II) NOUVEAU(0): Using EDID range info for horizontal sync
[  1205.464] (II) NOUVEAU(0): Using EDID range info for vertical refresh
[  1205.464] (II) NOUVEAU(0): Printing DDC gathered Modelines:
[  1205.464] (II) NOUVEAU(0): Modeline "1920x1080"x0.0  148.50  1920 2008 2052 2200  1080 1084 1089 1125 +hsync +vsync (67.5 kHz eP)
[  1205.464] (II) NOUVEAU(0): Modeline "800x600"x0.0   40.00  800 840 968 1056  600 601 605 628 +hsync +vsync (37.9 kHz e)
[  1205.464] (II) NOUVEAU(0): Modeline "800x600"x0.0   36.00  800 824 896 1024  600 601 603 625 +hsync +vsync (35.2 kHz e)

正如您可从这个真实案例中发现的那样,监视器分辨率的 modeline 是由 EDID 提供、Xorg 列出的,而不是由 xrandr 提供的。

还有注意这些命令:

$ cvt 1920 1080 # 60 Hz is default (resolution "native" for the screen)
$ cvt -r 1920 1080 # reduced mode, useful for non-CRT screen

(包括了 gtf 1920 1080 命令),对于测试监视器它们全部输出了标准的但是错误的 modeline。

因此,若您遇到了同样的问题,您应该检查与上面以粗体字符所示雷同的 modeline。也就是说,例如,您可以使用这一系列命令(其实是真正地去添加并应用新 modeline 到您的监视器,但作为临时设置在 X11 重启后不会存活):

xrandr --newmode "1920x1080" 148.50 1920 2008 2052 2200 1080 1084 1089 1125 +hsync +vsync
VGA_out="$(xrandr -q | grep -m 1 '\<connected\>' | cut -d ' ' -f1)"
xrandr --addmode $VGA_out "1920x1080"
xrandr --output $VGA_out --mode "1920x1080"

当然您需要替换 '"1920x1080" ...' 为从监视器 EDID 搜集到并且适合您 LCD 屏幕的 modeline。

若您发现此设置管用,请对应修改 /etc/X11/xorg.conf.d/50-screen.conf 文件(或者您也可以把上面一系列命令放到一个 bash 脚本中在每次图形界面登入时自动运行,这可用作单用户或单会话设置)。