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 的分辨率:
答案为:
# 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 提供的。
还有注意这些命令:
(包括了 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 脚本中在每次图形界面登入时自动运行,这可用作单用户或单会话设置)。