我正在尝试在 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