Nvidia

使用 xrandr 設置未檢測到的解析度

  • July 15, 2020

我正在嘗試在 Debian 10 上執行帶有 HDMI 到 VGA 適配器的三星 SyncMaster 226 NW 顯示器。GPU 是 RTX 2060 Super,具有版本 440.64 的專有 Nvidia 驅動程序。

在 Linux 中,唯一被檢測為可用的解析度是 1280×720、1024×768、800×600 和 640x480。

但實際原生解析度為1680×1050,雙啟動Windows時,可以設置使用這個解析度。

我曾嘗試使用xrandr添加自定義解析度,首先使用cvt生成模式行。用於為 xrandr 創建新模式的命令是

xrandr --newmode "1680×1050_60.00"  146.25  1680 1784 1960 2240  1050 1053 1059 1089 -hsync +vsync

執行此操作後,執行xrandr返回

Screen 0: minimum 8 x 8, current 1024 x 768, maximum 32767 x 32767
DP-0 disconnected (normal left inverted right x axis y axis)
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-0 connected primary 1024x768+0+0 (normal left inverted right x axis y axis) 304mm x 228mm
  1024x768      60.00*+  60.00  
  1280x720      60.00  
  800x600       60.32  
  640x480       59.94  
DP-2 disconnected (normal left inverted right x axis y axis)
DP-3 disconnected (normal left inverted right x axis y axis)
DP-4 disconnected (normal left inverted right x axis y axis)
DP-5 disconnected (normal left inverted right x axis y axis)
USB-C-0 disconnected (normal left inverted right x axis y axis)
 1680x1050_60.00 (0x1e4) 146.250MHz -HSync +VSync
       h: width  1680 start 1784 end 1960 total 2240 skew    0 clock  65.29KHz
       v: height 1050 start 1053 end 1059 total 1089           clock  59.95Hz

但是,當嘗試使用

xrandr --addmode HDMI-0 "1680×1050_60.00"`

錯誤

X Error of failed request:  BadMatch (invalid parameter attributes)
 Major opcode of failed request:  140 (RANDR)
 Minor opcode of failed request:  18 (RRAddOutputMode)
 Serial number of failed request:  43
 Current serial number in output stream:  44

被退回。使用

xrandr --output HDMI-0 --mode "1680×1050_60.00"

回來

xrandr:找不到模式 1680x1050_60.00` 作為錯誤。

如何正確將輸出解析度設置為 1680x1050?

我只是在完全相同的問題上花了 2-3 個小時。太煩人了,xrandr 似乎根本不適用於新的 nvidia 驅動程序。現在,在變得瘋狂和瘋狂之後,我終於想出了一個解決方案,希望它也對你有用。

在終端“nvidia-settings”中啟動,切換到“X Server Display Configuration”,點擊底部的“Save to X configuration File”按鈕,然後點擊“Show Preview”。現在在此預覽中,轉到“部分“監視器”….. EndSection 塊並將其保存以備後用。這就是我發現 xorg.conf 的監視器設置的方式。請注意,還有其他方法,但是對於 nvidia 使用者來說,這種方法應該是相當安全和方便的。

然後為您的解析度獲取“Modelline”,輸入終端:

cvt 1680x1050

並保存輸出以備後用。

好的,現在您只需將所有這些內容添加到 xorg.conf 文件中,將其命名為 /etc/X11/xorg.conf.d/10-monitor.conf(至少是我的發行版的路徑)。因為我既沒有你的監視器部分也沒有你的模型線我會給你一個例子,我的監視器部分和我的模型線(我想要/未檢測到的解析度是 1920x1080):

Section "Monitor"
 Identifier "Monitor1"
 VendorName     "Unknown"
 ModelName      "Acer B246HL"
 HorizSync       30.0 - 80.0
 VertRefresh     55.0 - 76.0
 Option         "DPMS"
 Modeline "1920x1080_60.00"  173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync +vsync
EndSection

Section "Device"
 Identifier "Card0"
 Driver "nvidia"
 Option "HDMI-0" "Monitor1"
EndSection

Section "Screen"
 Identifier "Screen0"
 Device "Card0"
 Monitor "Monitor1"
 DefaultDepth 24
 SubSection "Display"
   Depth 24
   Modes "1920x1080_60.00"
 EndSubSection
EndSection

因此,在監視器部分中,您只需保留第一行(標識符)並將其餘部分替換為您從 nvidia-settings 中保存的內容,最後一行是您的 cvt 命令的輸出。設備部分應該適合您。螢幕部分只需要將“模式”行更改為您的模式名稱,因此可能類似於模式“1680x1050_60.00”

在我的設備部分也是一行’BusID“PCI:39:0:0”’,但我認為你不需要。但是,我從執行“X -configure”(xorg 不能執行)中得到了這條線。BusID 應該在生成的 xorg.conf.new 中。奇怪的是,在我的情況下,它與 lspci 的 BusID 不同。

此外,如果您想執行多個監視器(如我),只需添加帶有標識符“Monitor2”等的新監視器部分,然後在設備部分添加例如“選項“HDMI-1”“Monitor2”’,然後最後在螢幕部分添加監視器,如“監視器”Monitor2“”。

就我而言,奇怪的是,我有 3 台完全相同的顯示器,其中一台總是無法被 nvidia-modeset 辨識。它與 EDID 有關,錯誤可以通過以下方式找到:

dmesg | grep EDID

引用自:https://unix.stackexchange.com/questions/574071