我的一台 PC 机通过 VGA 接口连接一台微软之星 23.8 英寸显示器,该显示器的分辨率为 1920x1080。 在 Arch Linux 中通过“设置 → 显示”选择分辨率时,发现最大只有 1024x768。 (以前使用 Lenovo 笔记本电脑通过 HDMI 接口连接这台显示器, 同样在 Arch Linux 中,可以正确选择到 1920x1080 的分辨率)

上网查找一下,通过以下方法解决了该问题。

xrandr 是一款官方的 RandR (Resize and Rotate) X Window System 扩展配置工具。 它可以设置屏幕显示的大小、方向、镜像等。 当没有添加任何选项直接运行时,xrandr 列出该系统可用的显示输出设备 (VGA-1, HDMI-1 等等) 和每一台设备可设置的分辨率,当前分辨率后面带有一个*号和一个+号:

~$ xrandr
Screen 0: minimum 8 x 8, current 1024 x 768, maximum 32767 x 32767
VGA1 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  
VIRTUAL1 disconnected (normal left inverted right x axis y axis)

由于出错的硬件或驱动,xrandr 可能并不能检测出您的显示器所有的有效分辨率。 不过,我们可以在 xrandr 里添加所需要的分辨率。 首先,运行 cvt 查询某分辨率的有效扫描频率:

~$ cvt 1920 1080
# 1920x1080 59.96 Hz (CVT 2.07M9) hsync: 67.16 kHz; pclk: 173.00 MHz
Modeline "1920x1080_60.00"  173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync +vsync

然后通过--newmode 参数新建一种 xrandr 模式, 输入上面所得到的查询结果,其中 Modeline 关键词自然需要被省略。

~$ xrandr --newmode "1920x1080_60.00"  173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync +vsync

新建模式后,我们需要把这模式添加到当前的输出设备(这里是 VGA1)上。 由于一些参数已经事先设置,只需输入模式名称即可,即 "1920x1080_60.00"。

~$ xrandr --addmode VGA1 "1920x1080_60.00"

最后,再把 VGA1 的分辨率指定为刚刚添加的新模式:

~$ xrandr --output VGA1 --mode "1920x1080_60.00"

再次使用 xrandr 检查一下:

~$ xrandr
Screen 0: minimum 8 x 8, current 1920 x 1080, maximum 32767 x 32767
VGA1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 0mm x 0mm
1920x1080     59.96 +
1024x768      60.00  
800x600       60.32    56.25  
848x480       60.00  
640x480       59.94  
1920x1080_60.00  59.96* 
VIRTUAL1 disconnected (normal left inverted right x axis y axis)

注意,以上设置只能在当前会话暂时生效。

在 /etc/X11/xorg.conf.d/ 中设置分辨率, 使 xrandr 所更改的分辨率设置永久生效:

$ sudo vim /etc/X11/xorg.conf.d/10-monitor.conf
Section "Monitor"
    Identifier "VGA1"
    Modeline "1920x1080_60.00"  173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync +vsync
    Option "PreferredMode" "1920x1080_60.00"
EndSection

Section "Screen"
    Identifier "Screen0"
    Monitor "VGA1"
    DefaultDepth 24
    SubSection "Display"
        Modes "1920x1080_60.00"
    EndSubSection
EndSection

Section "Device"
    Identifier "Device0"
    Driver "intel"
EndSection

参考资料

  1. ArchWiki: Xrandr
  2. CSDN: 更改archlinux不识别高分辨率