无法在xrandr中为外部监视器添加新模式


16

今天,我试图将第二台显示器连接到笔记本电脑。我有:

  • NVIDIA图形卡
  • 304.43驱动程序[支持xrandr 1.2]
  • archlinux [最新]
  • 真棒
  • xrandr 1.3

我的问题是外接显示器(VGA)的分辨率大于640x480。xrandr -q:

Screen 0: minimum 8 x 8, current 1920 x 800, maximum 8192 x 8192
VGA-0 connected 640x480+1280+0 (normal left inverted right x axis y axis) 0mm
   640x480        59.9*+
   320x240       120.1  
LVDS-0 connected 1280x800+0+0 (normal left inverted right x axis y axis) 331m
   1280x800       59.9*+
HDMI-0 disconnected (normal left inverted right x axis y axis)

我们可以看到VGA没有更高的分辨率,因此我添加了新模式:

xrandr --newmode $(gtf 1280 1024 70.4 | grep Modeline | sed s/Modeline\ // | tr -d '"')

我检查了Windows下的可用分辨率和刷新率:其中之一是1024x768x70(显示器的OSD说是70.4HZ)。创建新模式后,我想添加它:

xrandr --addmode VGA-0 1280x1024_70.40

而且...失败了:

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

从谷歌那里,我了解到在较旧的xrandr / nvidia驱动程序中存在可用模式列表的问题,但是现在nvidia驱动程序对xrandr 1.2的支持应该会更好。我也尝试使用较低的分辨率和刷新率(例如1024x768x50),但是出现了同样的错误。我不知道该怎么办...

Answers:


11

我不确定是您自己创建了该字符串xrandr --newmode还是从其他位置复制了该字符串,但是它不能以当前形式运行。

我建议逐步进行。

首先,您需要生成新模式。我建议液晶显示器使用60Hz或CRT显示器使用85Hz

gtf 1280 1024 60

您将得到类似的内容:

 # 1280x1024 @ 60.00 Hz (GTF) hsync: 63.60 kHz; pclk: 108.88 MHz 
 Modeline "1280x1024_60.00"  108.88  1280 1360 1496 1712  1024 1025 1028 1060  -HSync Vsync

然后将此模式呈现为xrandr使用--newmode(复制粘贴以“ Modeline”开头的行。

 xrandr --newmode "1280x1024_60.00"  108.88  1280 1360 1496 1712  1024 1025 1028 1060  -HSync Vsync

然后将此模式添加到VGA-0:

xrandr --addmode VGA-0 "1280x1024_60.00"

最后,您可以使用此新模式:

 xrandr --output VGA-0 --mode 1280x1024_60.00

没错,我不是xrandr --newmode $(gtf 1280 1024 70.4 | grep Modeline | sed s/Modeline\ // | tr -d '"')自己创建的,但是我先将其分成小块,首先看它是如何工作的gtf 1280 1024 70.4,然后是grep,最后是sed和tr。它给你在你相同的输出xrandr --newmode与一个差异-你必须"1280x1024_60.00", I have 1280x1024_60.00` -在最后我使用tr -d '"'删除“'不幸的是我仍然有同样的错误。
博尔戈

为什么刷新率这么奇怪?70.4?如果是LCD,请使用60Hz;如果使用CRT,请使用85Hz。并按照我的书面说明逐步进行。
帕维尔Rumian

现在,我尝试使用60Hz逐步进行操作,但仍然有相同的错误。
Borgo 2012年

1
我的分辨率为1280x1024,我正在尝试使(newmode)/ add(addmode)此模式:"1280x1024_60.00" 108.88 1280 1360 1496 1712 1024 1025 1028 1060 -HSync +Vsync
Borgo

1
仍然是相同的错误: X Error of failed request: BadMatch (invalid parameter attributes) Major opcode of failed request: 153 (RANDR) Minor opcode of failed request: 18 (RRAddOutputMode) Serial number of failed request: 29 Current serial number in output stream: 30 仅更改了最后两个数字。
Borgo 2012年

4

在删除以前添加的“ 1280x1024_60.00”之前,我一直遇到这个BadMatch错误问题,因为它永远无法成功使用双引号模式。最终,意识到该模式的更好名称有所帮助。

因此,我通过以普通用户身份运行以下命令来删除“ 1280x1024_60.00”:

$ xrandr --version 
reports 1.4.0 and 1.4
$ xrandr | grep 1280 #Do you see any 1280x1024 anywhere?  Does it have double quotes?
$ xrandr --verbose --delmode VGA1 '"1280x1024_60.00"'
$ xrandr --verbose --rmmode '"1280x1024_60.00"' 

删除和删除系统中的垃圾通常不起作用,甚至会回来,即使我从帐户和根目录中删除它也是如此。通常会返回到名为VIRTUAL1的输出,而不是VGA1。

发现在我新创建的模式的末尾放下垃圾并附加字母甚至放下.00(即1280x1024_60B)要容易得多。请注意,在下面仔细注意--newmode参数周围有双引号,但不包括--addmode或--mode

$ xrandr --verbose --newmode "1280x1024_60B" 108.88 1280 1360 1496 1712 1024 1025 1028 1060 -HSync +Vsync
$ xrandr --verbose --addmode VGA1 1280x1024_60B
$ xrandr --verbose --output VGA1 --mode 1280x1024_60B

屏幕略微闪烁,我的外接19英寸方形显示器以1280x1024运行。


经过数小时的研究,这是唯一可行的解​​决方案,非常感谢,您节省了我的时间。干杯
Shanil Soni 2014年

但是,设置在会话后丢失,有什么解决方案可以使其永久存在?
Shanil Soni 2014年

0

如果在VM(特别是VirtualBox)上运行Linux,请确保VM具有足够的视频内存。

尝试运行xrandr时,视频内存太少会导致此错误。


0

我花了2个小时来解决类似的问题,但问题出在VGA电缆上。更换vga电缆我可以不使用xrandr或xorg将分辨率更改为1920x1080,这很奇怪。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.