使用双显示器设置时英特尔显卡屏幕撕裂 Nvidia 和 Intel

使用双显示器设置时英特尔显卡屏幕撕裂 Nvidia 和 Intel

好的,我知道有很多关于英特尔显卡或 nvidia 显卡屏幕撕裂的答案,但我已经搜索了我能找到的每一个帖子,这就是我遇到的(我使用的是 ubuntu 20.04)

我的设置 Nvidia Gtx 1050 ti 运行 nvidia 470 最新稳定驱动程序运行 1080p 显示器

另一台显示器通过 VGA 连接到英特尔显卡,分辨率为 1366x1768,频率均为 60 赫兹

最初,两个显示器都有屏幕撕裂问题,但我修复了 nvidia 显示器的屏幕撕裂问题,方法是

nvidia-settings --assign CurrentMetaMode="nvidia-auto-select @1920x1080 +0+0 {ViewPortIn=1920x1080, ViewPortOut=1920x1080+0+0, ForceCompositionPipeline=On, ForceFullCompositionPipeline=On, ForceCompositionPipeline = On}"

并将其添加到启动应用程序,导致保存nvidia-settings/etc/X11/xorg.conf禁用英特尔图形监视器

因此,现在当 nvidia 撕裂问题修复后,英特尔撕裂问题仍然存在,我找到的修复屏幕撕裂问题的答案是这样的

Section "Device"
   Identifier  "Intel Graphics"
   Driver      "intel"
   Option      "TearFree"    "true"
EndSection

并且将它添加到/etc/X11/xorg.conf.d/20-intel.conf我的情况下不起作用。

有什么建议我应该怎么做?这个问题之前在 askubuntu 上被问过几次,但他们似乎没有得到答案。看到这个这也他们有和我同样的问题

这也是我的xrandr 输出

Screen 0: minimum 8 x 8, current 3286 x 1080, maximum 32767 x 32767
DVI-D-0 disconnected (normal left inverted right x axis y axis)
HDMI-0 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 480mm x 270mm
   1920x1080     74.97 +  60.00    60.00*   59.94    50.00    60.05    60.00    50.04  
   1680x1050     59.95  
   1600x900      60.00  
   1440x900      59.89  
   1400x1050     59.98  
   1280x1024     75.02    60.02  
   1280x800      59.81  
   1280x720      60.00    59.94    50.00  
   1152x864      75.00  
   1024x768      75.03    60.00  
   800x600       75.00    60.32  
   720x576       50.00  
   720x480       59.94  
   640x480       75.00    59.94    59.93  
DP-0 disconnected (normal left inverted right x axis y axis)
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-1-1 disconnected (normal left inverted right x axis y axis)
HDMI-1-2 disconnected (normal left inverted right x axis y axis)
DP-1-1 disconnected (normal left inverted right x axis y axis)
HDMI-1-3 disconnected (normal left inverted right x axis y axis)
DP-1-2 connected 1366x768+1920+142 (normal left inverted right x axis y axis) 410mm x 230mm
   1366x768      59.79*+
   1280x720      60.00  
   1024x768      75.03    70.07    60.00  
   832x624       74.55  
   800x600       72.19    75.00    60.32    56.25  
   640x480       75.00    72.81    66.67    59.94  
   720x400       70.08  
  1280x720 (0x1ce) 74.250MHz +HSync +VSync
        h: width  1280 start 1390 end 1430 total 1650 skew    0 clock  45.00KHz
        v: height  720 start  725 end  730 total  750           clock  60.00Hz
  1024x768 (0x1d2) 78.750MHz +HSync +VSync
        h: width  1024 start 1040 end 1136 total 1312 skew    0 clock  60.02KHz
        v: height  768 start  769 end  772 total  800           clock  75.03Hz
  1024x768 (0x1d3) 65.000MHz -HSync -VSync
        h: width  1024 start 1048 end 1184 total 1344 skew    0 clock  48.36KHz
        v: height  768 start  771 end  777 total  806           clock  60.00Hz
  800x600 (0x1d4) 49.500MHz +HSync +VSync
        h: width   800 start  816 end  896 total 1056 skew    0 clock  46.88KHz
        v: height  600 start  601 end  604 total  625           clock  75.00Hz
  800x600 (0x1d5) 40.000MHz +HSync +VSync
        h: width   800 start  840 end  968 total 1056 skew    0 clock  37.88KHz
        v: height  600 start  601 end  605 total  628           clock  60.32Hz
  640x480 (0x1d8) 31.500MHz -HSync -VSync
        h: width   640 start  656 end  720 total  840 skew    0 clock  37.50KHz
        v: height  480 start  481 end  484 total  500           clock  75.00Hz
  640x480 (0x1d9) 25.175MHz -HSync -VSync
        h: width   640 start  656 end  752 total  800 skew    0 clock  31.47KHz
        v: height  480 start  490 end  492 total  525           clock  59.94Hz

这是一个错误吗?任何建议都会非常有用,谢谢!

编辑 1:建议的信息输出sancho.s 恢复MonicaCellio的回答

shantanu@shantanu-pc:~$ inxi -F
    System:    Host: shantanu-pc Kernel: 5.11.0-37-generic x86_64 bits: 64 Desktop: Gnome 3.36.9 
               Distro: Ubuntu 20.04.3 LTS (Focal Fossa) 
    Machine:   Type: Desktop System: Gigabyte product: H310M H v: N/A serial: <superuser/root required> 
               Mobo: Gigabyte model: B250M H v: x.x serial: <superuser/root required> 
    CPU:       Topology: Quad Core model: Intel Core i5-7400 bits: 64 type: MCP L2 cache: 6144 KiB 
               Speed: 800 MHz min/max: 800/3500 MHz Core speeds (MHz): 1: 1318 2: 1513 3: 2666 4: 1741 
    Graphics:  Device-1: Intel HD Graphics 630 driver: i915 v: kernel 
               Device-2: NVIDIA GP107 [GeForce GTX 1050 Ti] driver: nvidia v: 470.63.01 
               Display: x11 server: X.Org 1.20.11 driver: modesetting,nvidia unloaded: fbdev,nouveau,vesa 
               resolution: 1920x1080~75Hz, 1366x768~60Hz 
               OpenGL: renderer: NVIDIA GeForce GTX 1050 Ti/PCIe/SSE2 v: 4.6.0 NVIDIA 470.63.01 
    Audio:     Device-1: Intel 200 Series PCH HD Audio driver: snd_hda_intel 
               Device-2: NVIDIA GP107GL High Definition Audio driver: snd_hda_intel 
               Sound Server: ALSA v: k5.11.0-37-generic 
    Sensors:   System Temperatures: cpu: 32.8 C mobo: 29.8 C gpu: nvidia temp: 38 C 
               Fan Speeds (RPM): N/A gpu: nvidia fan: 48%

输出 2

shantanu@shantanu-pc:~$ lspci -knn | grep -EA3 'VGA|3D|Display'
00:02.0 Display controller : Intel Corporation HD Graphics 630 
    DeviceName:  Onboard IGD
    Subsystem: Gigabyte Technology Co., Ltd HD Graphics 630
    Kernel driver in use: i915
--
01:00.0 VGA compatible controller: NVIDIA Corporation GP107 [GeForce GTX 1050 Ti] 
    Subsystem: ZOTAC International (MCO) Ltd. GP107 [GeForce GTX 1050 Ti] 
    Kernel driver in use: nvidia
    Kernel modules: nvidiafb, nouveau, nvidia_drm, nvidia 

输出 3

shantanu@shantanu-pc:~$ grep "LoadModule" /var/log/Xorg.0.log
[     6.323] (II) LoadModule: "glx"
[     6.557] (II) LoadModule: "nvidia"
[     6.560] (II) LoadModule: "nouveau"
[     6.561] (II) LoadModule: "modesetting"
[     6.562] (II) LoadModule: "fbdev"
[     6.562] (II) LoadModule: "vesa"
[     6.577] (II) LoadModule: "fb"
[     6.578] (II) LoadModule: "wfb"
[     6.579] (II) LoadModule: "ramdac"
[     6.580] (II) LoadModule: "fbdevhw"
[     6.581] (II) LoadModule: "glxserver_nvidia"
[     7.510] (II) LoadModule: "glamoregl"
[     7.683] (II) LoadModule: "fb"
[     7.770] (II) LoadModule: "dri2"
[     7.977] (II) LoadModule: "libinput"

输出 4

    22: None 00.0: 10002 LCD Monitor                                
  [Created at monitor.125]
  Unique ID: UNIQUE ID
  Parent ID: PARENT ID
  Hardware Class: monitor
  Model: "SAMSUNG S19B150"
  Vendor: SAM "SAMSUNG"
  Device: eisa "S19B150"
  Serial ID: "SERIAL ID"
  Resolution: 720x400@70Hz
  Resolution: 640x480@60Hz
  Resolution: 640x480@67Hz
  Resolution: 640x480@72Hz
  Resolution: 640x480@75Hz
  Resolution: 800x600@56Hz
  Resolution: 800x600@60Hz
  Resolution: 800x600@72Hz
  Resolution: 800x600@75Hz
  Resolution: 832x624@75Hz
  Resolution: 1024x768@60Hz
  Resolution: 1024x768@70Hz
  Resolution: 1024x768@75Hz
  Resolution: 1280x720@60Hz
  Resolution: 1366x768@60Hz
  Size: 410x230 mm
  Year of Manufacture: 2012
  Week of Manufacture: 38
  Detailed Timings #0:
     Resolution: 1366x768
     Horizontal: 1366 1436 1579 1792 (+70 +213 +426) +hsync
       Vertical:  768  771  774  798 (+3 +6 +30) +vsync
    Frequencies: 85.50 MHz, 47.71 kHz, 59.79 Hz
  Driver Info #0:
    Max. Resolution: 1366x768
    Vert. Sync Range: 56-75 Hz
    Hor. Sync Range: 30-81 kHz
    Bandwidth: 85 MHz
  Config Status: cfg=new, avail=yes, need=no, active=unknown
  Attached to: #19 (Display controller)

答案1

可能是您使用的/etc/X11/xorg.conf.d/20-intel.conf还不够。由于没有关于您系统的详细信息,我建议您先尝试几件事。然后,我会提供一些信息供您在系统上发布。

可能的解决方案

邮政在问题主体中以下选项的结果(请复制粘贴逐字当适用):

  1. 司机。也许您使用的驱动程序

    Driver      "intel"
    

    应进行更改。请尝试modesettingi915(每次更改后重新启动)。来源

  2. 更多选项. 包括一个或多个额外选项(XXXX用您的驱动程序替换)

     Section "Device"
         Identifier "Intel Graphics"
         Driver "XXXX"
         Option "TearFree"    "true"
         Option "TripleBuffer" "true"
         Option "AccelMod"    "uxa"
         Option "DRI"         "3"
     EndSection
    
  3. 模块部分。 添加

     Section "Module"
         Load "dri3"
     EndSection
    

    多于Section "Device"来源

  4. 删除分数缩放以检查这是否会增加导致屏幕撕裂的因素组合。来源

  5. 删除英特尔驱动程序被建议,并获得了一些积极的反馈。我会考虑将其作为最后的尝试。

有关您的系统的更多信息

邮政在问题主体中以下命令的输出:

$ inxi -F
$ lspci -knn | grep -EA4 'VGA|3D|Display'
$ grep "LoadModule" /var/log/Xorg.0.log
$ hwinfo --monitor

你可能需要

$ sudo apt install inxi hwinfo

笔记

  1. 考虑将这些建议作为指南,或者作为分步说明手册。
  2. 花些时间阅读链接的帖子,稍加修改,然后发布您得到的内容。
  3. 尝试阅读输出消息并解释它们告诉您的内容。甚至可以进行一些网络搜索。尤其是警告和错误。
  4. 避免“叙述”您获得的内容;复制粘贴输出。使用 GUI 时请包含屏幕截图。
  5. 还包括您从复制+粘贴中输入的确切命令。
  6. 如果某个特定命令的输出很长而无法发布,请使用 pastebin。

答案2

经过数周的修修补补,试图找出可能出现的问题,之后sancho.s 恢复MonicaCellio的详细回答,但仍然没有解决问题,我感到沮丧并放弃了。并且想到也许两个显示器连接两个不同的显卡注定会导致英特尔屏幕撕裂。

但我无意中发现了nvidia-prime,并开始阅读它,我的理解是,它让任一 GPU 渲染另一个 GPU 显示器的屏幕。因此,nvidia 可以使用其处理来渲染连接到英特尔端的所有内容。

所以我使用的步骤是

步骤1:使能够nvidia 强力合成管道

您必须使用启动脚本来执行此操作,其他方法不起作用,并且不要尝试将其保存到 xorg.conf ,如果您从中启用nvidia-settings它将在下次重启时禁用英特尔显示。

不要这样做 在此处输入图片描述

我发现这个脚本可以自动检测你的屏幕配置并启用nvidia 强力合成管道

nvidia-settings --assign CurrentMetaMode="$(nvidia-settings -q CurrentMetaMode -t|tr '\n' ' '|sed -e 's/.*:: \(.*\)/\1\n/g' -e 's/}/, ForceCompositionPipeline = On}/g')" > /dev/null

它需要我进行一些修改,复制此部分并运行

"$(nvidia-settings -q CurrentMetaMode -t|tr '\n' ' '|sed -e 's/.*:: \(.*\)/\1\n/g' -e 's/}/, ForceCompositionPipeline = On}/g')"

它会产生类似这样的结果

shantanu@shantanu-pc:~$ "$(nvidia-settings -q CurrentMetaMode -t|tr '\n' ' '|sed -e 's/.*:: \(.*\)/\1\n/g' -e 's/}/, ForceCompositionPipeline = On}/g')"
DPY-1: nvidia-auto-select @1920x1080 +0+0 {ViewPortIn=1920x1080, ViewPortOut=1920x1080+0+0, ForceCompositionPipeline=On, ForceFullCompositionPipeline=On, ForceCompositionPipeline = On} : command not found

删除DPY-1:: command not found 部分

并使用生成的值修改命令,如下所示(只需将编辑的值替换为之前的“引号内的命令”)

nvidia-settings --assign CurrentMetaMode="nvidia-auto-select @1920x1080 +0+0 {ViewPortIn=1920x1080, ViewPortOut=1920x1080+0+0, ForceCompositionPipeline=On, ForceFullCompositionPipeline=On, ForceCompositionPipeline = On}"

第2步:将其添加到你的启动脚本中 在此处输入图片描述

步骤3:安装 nvidia-prime

sudo apt install nvidia-prime

使用 prime 切换到 nvidia,因此所有渲染都由 nvidia 完成 英特尔屏幕也将由 nvidia 渲染

sudo prime-select nvidia

这将有效地修复屏幕撕裂问题,唯一的缺点是 nvidia gpu 的使用率会更高,因为它正在为两个显示器进行渲染,而英特尔只需输出它。

这是许多线程中长期存在的问题,也许它可以为正在寻求帮助的人提供一些帮助。

相关内容