使用 xrandr 设置未检测到的分辨率

使用 xrandr 设置未检测到的分辨率

我正在尝试在 Debian 10 上运行带有 HDMI 转 VGA 适配器的 Samsung 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?

答案1

我刚刚花了 2-3 个小时来解决同样的问题。太烦人了,xrandr 似乎根本不适用于新的 nvidia 驱动程序。现在,在疯狂和疯狂之后,我终于想出了一个解决方案,希望它也对你有用。

在终端“nvidia-settings”中启动,切换到“X服务器显示配置”,单击底部的按钮“保存到X配置文件”,然后单击“显示预览”。现在,在此预览中,转到“Section“Monitor”..... EndSection”块并保存以供以后使用。这就是我如何发现 xorg.conf 的监视器设置的。请注意,还有其他方法,但对于 nvidia 用户来说,这种方法应该非常安全且方便。

然后获取适合您的分辨率的“Modeline”,在终端中输入:

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 设置中保存的内容,最后一行是 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

相关内容