通過 VGA 介面連線顯示器時解析度不正確

黃志斌發表於2020-04-10

我的一臺 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不識別高解析度

相關文章