Linux下修复分辨率显示异常

家里放了台老旧的台式机,显卡是GTX 660Ti,windows下必须安装特定的驱动版本才能显示最佳分辨率(1680x1050),如果更新到最新的Nvidia驱动,反而显示器无法正常显示(1024x768)。

没想到,这种情况在Linux下依然存在,不论是安装Debian还是Linux Mint或者Ubuntu,默认都是1024x768。

网上找到了修复分辨率异常的方法,整理如下。

检查当前显卡硬件情况

$ lspci |grep VGA
01:00.0 VGA compatible controller: NVIDIA Corporation GK104 [GeForce GTX 660 Ti] (rev a2)

可以看到,显卡硬件识别正常。

检查显卡分辨率情况

$ xrandr
Screen 0: minimum 320 x 200, current 1024 x 768, maximum 8192 x 8192
VGA-1 disconnected (normal left inverted right x axis y axis)
DVI-I-1 connected primary 1024x768+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
   1024x768      60.00* 
   800x600       60.32    56.25  
   848x480       60.00  
   640x480       59.94  
HDMI-1 disconnected (normal left inverted right x axis y axis)

可以看到,有三个视频输出,当前正在用的是DVI-I-1,分辨率就是1024x768,第一行显示最大支持8192x8192。

我们需要通过手动定义,将分辨率调整为最佳的1680x1050

新增分辨率模式

$ sudo 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

这里定义了一个1680x1050 60Hz的新分辨率模式。

下来将新的分辨率模式应用生效。

$sudo xrandr --newmode "1680x1050"  146.25  1680 1784 1960 2240  1050 1053 1059 1089 -hsync +vsync
$sudo xrandr --addmode DVI-I-1 1680x1050
$sudo xrandr --output DVI-I-1 --mode 1600x1050

执行完以上命令后,但前显示分辨率就调整为1680x1050了。

为了使新的分辨率模式每次启动都生效,需要将以下命令添加到~/.profile中。

cvt 1680 1050
xrandr --newmode "1680x1050"  146.25  1680 1784 1960 2240  1050 1053 1059 1089 -hsync +vsync
xrandr --addmode DVI-I-1 1680x1050