"--scale 2x2" 在 xrandr 中会导致显示器不显示任何内容。

我有一台4k的外接主显示器,正在尝试将一个1680x1050的外接显示器连接在左侧。

我已经尝试使用:

 xrandr --output HDMI-0 --scale 2x2 --pos 0x0 --fb 7200x2160 --output DP-4 --pos 3360x0

看起来应该可以工作,当我查看nvidia-settings中计算机认为正在进行的操作时,它正确地显示了一个3200x2160的监视器在我的4k监视器左侧。

然而,在我的外部监视器上只显示黑屏,并且顶部有一条闪烁的线。

唯一能够纠正这个问题的方法是将缩放重置为1x1,这样图像就会恢复(同时保持X服务器的大小。这意味着我必须滚动才能在我的监视器之间切换)。

所以我认为问题特别与xrandr中的2x2缩放有关。我不确定该怎么办?

计算机运行的是14.04版本,配备了一块nvidia GTX960显卡和推荐的驱动程序(352.63)。

以下是我的xrandr输出:

  Screen 0: minimum 8 x 8, current 7200 x 2160, maximum 16384 x 16384
  DVI-I-0 disconnected (normal left inverted right x axis y axis)
  DVI-I-1 disconnected (normal left inverted right x axis y axis)
  DP-0 disconnected (normal left inverted right x axis y axis)
  DP-1 disconnected (normal left inverted right x axis y axis)
  DP-2 disconnected (normal left inverted right x axis y axis)
  DP-3 disconnected (normal left inverted right x axis y axis)
  HDMI-0 connected 1680x1050+0+0 (normal left inverted right x axis y axis) 474mm x 296mm
     1680x1050      59.9*+   60.0  
     1280x1024      75.0     60.0  
     1280x960       60.0  
     1152x864       75.0  
     1024x768       75.0     70.1     60.0  
     800x600        75.0     72.2     60.3     56.2  
     640x480        75.0     72.8     59.9  
  DP-4 connected primary 3840x2160+3360+0 (normal left inverted right x axis y axis) 527mm x 296mm
     3840x2160      60.0*+   30.0  
     2560x1440      60.0  
     2048x1280      60.0  
     1920x1200      59.9  
     1920x1080      60.0     60.0     59.9     50.0     24.0     60.0     50.0  
     1600x1200      60.0  
     1600x900       60.0  
     1280x1024      75.0     60.0  
     1280x720       60.0     59.9     50.0  
     1152x864       75.0  
     1024x768       75.0     60.0  
     800x600        75.0     60.3  
     720x576        50.0     50.1  
     720x480        59.9     60.1  
     640x480        75.0     59.9     59.9  

我遇到了相同的问题。在比例为1.71x1.71之前,似乎一切正常运行。但是任何更大的尺寸会导致较小的显示屏变空白。 - Maciej Wozniak
很遗憾,我从未成功解决这个问题。我尝试同时使用一个进行缩放和另一个不进行缩放的两个显示器。如果你只是想要以2倍的缩放来运行,那么在Cinammon中非常容易实现。我相信Unity也有办法做到这一点。 - m4p85r
3个回答

只是想补充一下,这是我长期以来一直在努力解决的问题,每次都放弃了 - 直到我决定彻底搞清楚。下面的解决方案对我有效,希望对你也有用。
简而言之:配置ForceFullCompositionPipeline=On 背景
其中一些内容也是为了提供更多关键词,以防有类似问题的人寻找解决方案。
我的设置如下:
- ThinkPad P50,内置4K显示屏,分辨率为3840×2160(主屏) - 外接显示器作为辅助显示屏 - Dell U2412M - 分辨率为1920×1200
我使用的是Ubuntu Gnome 16.04 LTS。
当我通过HDMI线+ HDMI转DVI转换器将显示器连接时(因为显示器没有HDMI输入),一切都太大了。各种在线文章建议使用xrandr在该显示器上配置--scale 2x2,结果显示器几乎完全黑屏,只有顶部可见一条细线。
我偶然遇到了这个问题,虽然使用2x2.001的缩放解决方案使得显示器能够正常显示内容,但也在X屏幕下方添加了一个额外的像素,导致光标在屏幕顶部/底部时出现轻微的上下滚动。
经过大量的谷歌搜索,其中很多都是问题而没有解决方案,我偶然发现了这个链接:https://devtalk.nvidia.com/default/topic/891207/-355-11-358-09-viewportin-on-2nd-monitor-results-in-garbled-display-for-values-over-3211x1800
为了测试它,我使用以下命令进行配置 - 假设xrandr尚未配置缩放。
$ nvidia-settings -q CurrentMetaMode

  Attribute 'CurrentMetaMode' (lilicorp:1.0): id=50, switchable=no, source=RandR :: DPY-4: nvidia-auto-select @3840x2160 +0+0 {ViewPortIn=3840x2160, ViewPortOut=3840x2160+0+0}, DPY-1: nvidia-auto-select @1920x1200 +3840+0 {ViewPortIn=1920x1200, ViewPortOut=1920x1200+0+0}

这显示了CurrentMetaMode的值,这是我在两个显示器上添加ForceFullCompositionPipeline=On选项的地方。请注意,DPY-4是我的内置笔记本显示器,而DPY-1是外部监视器。
需要配置的实际字符串是该命令输出中::之后的那个。
$ nvidia-settings --assign CurrentMetaMode="DPY-4: nvidia-auto-select @3840x2160 +0+0 {ViewPortIn=3840x2160, ViewPortOut=3840x2160+0+0, ForceFullCompositionPipeline=On}, DPY-1: nvidia-auto-select @1920x1200 +3840+0 {ViewPortIn=1920x1200, ViewPortOut=1920x1200+0+0, ForceFullCompositionPipeline=On}"

在这之后,我跑了:
$ xrandr --output DP-1 --scale=2x2

最后,外部显示器的分辨率很好,没有滚动或其他问题。
请注意,在运行这些命令之后,CurrentMetaMode与所分配的有些不同,可能是由于应用了缩放。
$ nvidia-settings -q CurrentMetaMode

  Attribute 'CurrentMetaMode' (lilicorp:1.0): id=50, switchable=no, source=RandR :: DPY-4: nvidia-auto-select @3840x2160 +0+0 {ViewPortIn=3840x2160, ViewPortOut=3840x2160+0+0, ForceCompositionPipeline=On, ForceFullCompositionPipeline=On}, DPY-1: nvidia-auto-select @3840x2400 +3840+0 {Transform=(2.000000,0.000000,0.000000,0.000000,2.000000,0.000000,0.000000,0.000000,1.000000), ViewPortIn=3840x2400, ViewPortOut=1920x1200+0+0, ResamplingMethod=Bilinear, ForceCompositionPipeline=On, ForceFullCompositionPipeline=On}

希望这也能解决其他人的问题!

对我来说,nvidia-settings -q CurrentMetaMode 返回 属性 'CurrentMetaMode' (zach-dell:1.0): id=50, switchable=yes, source=xconfig :: NULL - Zach

我遇到了完全相同的问题。我用--scale 2x2.001解决了它。奇怪的是,--scale 2x1.999或者2x2.0001不起作用,所以请务必尝试一些接近2的数值。

我也遇到过这个问题... brute force 对我起了作用 - juggernauthk108
1你用暴力破解了什么?2的值吗? - m4p85r
多么奇怪啊!谢谢你的帖子。最后我还是放弃了。现在我实际上有了第二台电脑,通过synergy连接起来。对于我偶尔需要使用Windows应用程序来说,效果相当不错(第二台电脑是Windows系统)。 - m4p85r
1这真的有效。有人应该报告一下...不管怎样,非常感谢! - Columbo

谢谢Milos提供的出色解决方案,对我非常有效!
我有一个小补充。除了使用命令行,你还可以在Nvidia-Settings UI中轻松设置ForceFullCompositionPipeline。为此,你需要进入“X Server Display Configuration”,点击“Advanced”,然后激活“Force Full Composition Pipeline”选项。 请参考https://imgur.com/a/3jE78查看示例。
PS:我正在使用一个三屏设置,其中包括两台外接显示器(1920x1080; 1680x1050)和一台内置的3k显示器(3840x2160)。为了使其正常工作,我应用以下 xrandr-config 配置:
xrandr --output eDP-1-1 --auto --output HDMI-0 --auto --scale 2x2 --above eDP-1-1 --output DP-1 --auto --scale 2x2 --rotate left --right-of eDP-1-1