无法在配备 AMD Ryzen 7 4800H 和 Nvidia RTX 2060 的笔记本电脑上使用 20.04 的内部和外部显示器同时工作

gam*_*lor 9 nvidia multiple-monitors asus hybrid-graphics amd-ryzen

精简版

在 Ubuntu 20.04 上,内部和外部显示器不能同时工作。只能内部使用默认驱动程序或外部仅使用手动安装的 NVIDIA 驱动程序。帮助!

我的系统是华硕 TUF A15 游戏笔记本电脑 (FA506)。它具有带集成显卡的 AMD® Ryzen™ 7 4800H 处理器和 NVIDIA RTX 2060。

  • 全新 Ubuntu 20.04 安装
  • 需要nouveau.modeset=0在 grub 条目中设置才能使图形工作
  • 未检测到外部显示器
  • Ubuntu 20.04 在“附加驱动程序”对话框中不显示任何内容
  • 安装nvidia-driver-440和运行nvidia-xconfig使 nvidia 卡工作,但只检测到外部显示器(usbc 端口上的显示端口),内部显示器不工作
  • 只能通过删除/etc/X11/xorg.conf和重新启动才能切换回内部显示器,但随后会丢失外部显示器和未使用的 NVIDIA 驱动程序
  • 可以通过nvidia-xconfig再次运行并重新启动来切换回 NVIDIA

长版

在全新的 Ubuntu 20.04 安装(启用安装专有软件)后,笔记本电脑启动到带有文本的背屏

[    7.779369] ucsi_acpi USBC000:00: PPM init failed (-110)
Run Code Online (Sandbox Code Playgroud)

我可以通过切换到虚拟终端来登录ctrl + alt + F2。在我登录后,屏幕被垃圾邮件发送了超过一分钟的消息:

[   80.199703] nouveau 0000:01:00.0 fifo: SCHED_ERROR 08 []
Run Code Online (Sandbox Code Playgroud)

其次是

[   80.206302] nouveau 0000:01:00.0 DRM: failed to idle channel 0 [DRM]
Run Code Online (Sandbox Code Playgroud)

在此之后,我可以访问终端。根据互联网建议,我可以通过更改以下行来修改 linux grub 条目/etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
Run Code Online (Sandbox Code Playgroud)

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nouveau.modeset=0"
Run Code Online (Sandbox Code Playgroud)

和跑步

sudo update-grub
Run Code Online (Sandbox Code Playgroud)

重新启动后,我会看到 gdm 登录屏幕,并且可以登录图形会话,但是如果我连接外部,则不会检测到它。xrandr通过 DisplayPort-USBC 和 HDMI 连接的带或不带外接显示器的输出是

xrandr: Failed to get size of gamma for output default
Screen 0: minimum 1920 x 1080, current 1920 x 1080, maximum 1920 x 1080
default connected primary 1920x1080+0+0 0mm x 0mm
   1920x1080     77.00*
Run Code Online (Sandbox Code Playgroud)

Nvidia 驱动程序尚未安装,因此我首先使用sudo apt update和更新系统sudo apt dist-upgrade并重新启动。我检查了软件和更新的附加驱动程序选项卡,但它显示“没有可用的附加驱动程序”。跑步ubuntu-drivers devices什么都看不到。

下一个最好的建议是通过 apt 安装 nvidia 驱动程序

sudo apt install nvidia-driver-440 
Run Code Online (Sandbox Code Playgroud)

重启后显示器情况没有改变仍然只是内部显示器。xrandr输出相同,但现在安装了 Nvidia 驱动程序。nvidia-smi显示:

Thu May 28 09:42:22 2020       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.64       Driver Version: 440.64       CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce RTX 2060    Off  | 00000000:01:00.0 Off |                  N/A |
| N/A   46C    P0     9W /  N/A |      0MiB /  5934MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

nvidia-settings显示一个小的空窗口。启动来自终端打印:

ERROR: Unable to load info from any available system


(nvidia-settings:2986): GLib-GObject-CRITICAL **: 09:45:58.786: g_object_unref: assertion 'G_IS_OBJECT (object)' failed
** Message: 09:45:58.789: PRIME: No offloading required. Abort
** Message: 09:45:58.789: PRIME: is it supported? no
Run Code Online (Sandbox Code Playgroud)

现在我运行sudo nvidia-xconfig生成/etc/X11/xorg.conf. 重新启动后,外部监视器正在工作,我在外部(显示端口)监视器上看到正常的 gdm 登录屏幕,并且可以登录到图形会话。遗憾的是,不再检测到内部显示器,只显示华硕徽标。nvidia-settings对话框现在具有我期望的所有选项(从终端启动提供与以前相同的输出)

根据现在kanehekili的输出要求xrandr -q

Screen 0: minimum 8 x 8, current 2560 x 1440, maximum 32767 x 32767
DP-0 connected primary 2560x1440+0+0 (normal left inverted right x axis y axis) 597mm x 336mm
   2560x1440     60.00*+ 144.00   120.00    84.98  
   1920x1080     60.00    59.94    50.00  
   1680x1050     59.95  
   1440x900      59.89  
   1440x576      50.00  
   1440x480      59.94  
   1280x1024     75.02    60.02  
   1280x960      60.00  
   1280x720      60.00    59.94    50.00  
   1152x864      75.00  
   1024x768      75.03    70.07    60.00  
   800x600       75.00    72.19    60.32    56.25  
   720x576       50.00  
   720x480       59.94  
   640x480       75.00    72.81    59.94    59.93  
DP-1 disconnected (normal left inverted right x axis y axis)
Run Code Online (Sandbox Code Playgroud)

全输出lspci -vv在这里。但是图形设备的条目如下:

01:00.0 VGA compatible controller: NVIDIA Corporation TU106 [GeForce RTX 2060] (rev a1) (prog-if 00 [VGA controller])
    Subsystem: ASUSTeK Computer Inc. Device 1e21
    Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
    Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Latency: 0
    Interrupt: pin A routed to IRQ 94
    Region 0: Memory at fb000000 (32-bit, non-prefetchable) [size=16M]
    Region 1: Memory at b0000000 (64-bit, prefetchable) [size=256M]
    Region 3: Memory at c0000000 (64-bit, prefetchable) [size=32M]
    Region 5: I/O ports at f000 [size=128]
    Expansion ROM at fc000000 [virtual] [disabled] [size=512K]
    Capabilities: <access denied>
    Kernel driver in use: nvidia
    Kernel modules: nvidiafb, nouveau, nvidia_drm, nvidia

06:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Renoir (rev c6) (prog-if 00 [VGA controller])
    Subsystem: ASUSTeK Computer Inc. Renoir
    Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
    Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Latency: 0, Cache Line Size: 64 bytes
    Interrupt: pin A routed to IRQ 255
    Region 0: Memory at d0000000 (64-bit, prefetchable) [size=256M]
    Region 2: Memory at e0000000 (64-bit, prefetchable) [size=2M]
    Region 4: I/O ports at c000 [disabled] [size=256]
    Region 5: Memory at fc500000 (32-bit, non-prefetchable) [size=512K]
    Capabilities: <access denied>
    Kernel modules: amdgpu
Run Code Online (Sandbox Code Playgroud)

请帮我弄清楚

从我的互联网搜索来看,我并不是唯一一个与这种 AMD/NVIDIA 混合图形配置作斗争的人。圣杯将是两个显卡的无缝集成,以在可能的情况下节省电池电量,并在需要时使用独立显卡,但我很乐意在两个显示器都工作的情况下接受永久耗电的 nvidia!

根据我的研究,问题的核心是 nvidia 卡硬连接到显示端口,集成显卡连接到内部显示器。理想情况下,nvidia 可以渲染到可以复制到集成显卡的缓冲区,但我不知道具体细节,也不知道如何配置。


注意:一些互联网建议建议在安装 nvidia 驱动程序之前添加 nvidia ppa:

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

我过去曾尝试过,但没有区别,该 ppa 中的 nvidia-driver-440 包和 ubuntu 存储库是相同的版本,440.82+really.440.64-0ubuntu6并且“附加驱动程序”选项卡没有更改。

另请注意:我已禁用安全启动


编辑:这篇文章Ubuntu 20.04 无法识别第二台显示器

建议安装,nvidia-driver-435但就我而言,这并不能解决问题。


我对自己的问题有部分答案,但仍需要帮助。

阅读这篇 reddit 帖子后,我开始怀疑 Ubuntu 20.04 中的内核版本 5.4 对最新的 AMD APU 没有很好的支持。为了对此进行测试,我使用此处的说明安装了最新的内核 5.6.15 。安装较新的内核后,我现在可以在集成显卡上运行时将 HDMI 端口用于外部显示器。那是通过删除 xorg.confsudo rm /etc/X11/xorg.conf并重新启动。但是当使用 nvidia 卡时,我仍然只能使用 displayport(在 usbc 上)。我仍然希望能够在内部显示器上使用 NVIDIA。

小智 14

我设法在 Ubuntu 20.04 附带的 Linux 内核中使用对 Renoir 的实验性支持使 AMD 图形工作。

您需要添加amdgpu.exp_hw_support=1/etc/default/grub.

为此,请以 root 身份打开文件进行编辑,例如运行

sudo edit /etc/default/grub
Run Code Online (Sandbox Code Playgroud)

在行开头GRUB_CMDLINE_LINUX_DEFAULT=,双引号中的参数列表中,添加amdgpu.exp_hw_support=1. 例如,根据您之前的内容,编辑后该行可能如下所示:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amdgpu.exp_hw_support=1"
Run Code Online (Sandbox Code Playgroud)

保存文件并退出,然后运行以下命令使更改生效:

sudo update-grub
Run Code Online (Sandbox Code Playgroud)

并重新启动。现在,将 nouveau 驱动程序列入黑名单。为此,请创建一个新的配置文件,/etc/modprobe.d/例如使用

sudo nano /etc/modprobe.d/blacklist-nouveau.conf
Run Code Online (Sandbox Code Playgroud)

添加以下条目:

blacklist nouveau
options nouveau modeset=0
Run Code Online (Sandbox Code Playgroud)

保存更改并退出(如果使用 nano,请按 ctrl+x)。现在更新 initramfs

sudo update-initramsfs -u
Run Code Online (Sandbox Code Playgroud)

重启。这支持内部和外部显示器。

仍然没有nvidia图形。知道一种让这台机器(带有 Ryzen 7 4800H 和 RTX 2060 的 AsusTUF)使用 switchabme AMD/Nvidia 显卡的方法会很好。

编辑:在内部/外部显示器 (HDMI) 上激活 NVidia 卡

如果您乐于仅使用集成显卡(amdgpu 驱动程序),请不要再阅读了。要更改为 NVidia 图形继续。

首先在终端中清除任何以前安装的 NVidia 驱动程序:

sudo apt-get remove --purge '^nvidia-.*'
sudo apt-get install ubuntu-desktop
sudo rm /etc/X11/xorg.conf (if present)
Run Code Online (Sandbox Code Playgroud)

重新启动系统。现在,重新安装 NVidia 驱动程序

sudo apt-get install nvidia-driver-440
Run Code Online (Sandbox Code Playgroud)

编辑 amdgpu 和 nvidia 驱动程序的 X11 配置文件。这些位于/usr/share/X11/sorg.conf.d/. 首先,更改 amdgpu 的 conf 文件:

sudo nano /usr/share/X11/xorg.conf.d/10-amdgpu.conf
Run Code Online (Sandbox Code Playgroud)

更改文件内容,使其看起来像:

Section "OutputClass"
    Identifier "AMDgpu"
    MatchDriver "amdgpu"
    Driver "amdgpu"
    Option "PrimaryGPU" "no"
EndSection
Run Code Online (Sandbox Code Playgroud)

现在,更改 NVidia 的 conf 文件:

sudo nano /usr/share/X11/xorg.conf.d/10-nvidia.conf
Run Code Online (Sandbox Code Playgroud)

使用以下条目编辑文件

Section "OutputClass"
   Identifier "nvidia"
   MatchDriver "nvidia-drm"
   Driver "nvidia"
   Option "AllowEmptyInitialConfiguration"
   Option "PrimaryGPU" "yes"
   ModulePath "/usr/lib/x86_64-linux-gnu/nvidia/xorg"
EndSection
Run Code Online (Sandbox Code Playgroud)

重新启动系统。这个解决方案对我有用。您现在应该有一个带有 Nvidia 驱动程序的工作系统,用于使用 HDMI 的内部/外部显示器配置(我没有显示端口或 USB-C 来测试)。

要恢复到 amdgpu,请将“PrimaryGPU”条目的标志从“是”适当地更改为“否”。这个解决方案是次优的,我将继续寻找更强大的交换解决方案(例如 nvidia on-demand)。作为旁注,我无法通过更新内核(尝试 5.5.19 和 5.6.19)使任何东西正常工作。尽管有一些有趣的功能将使这款笔记本电脑在较新的内核版本中受益。Nvidia 模块在我的尝试中没有正确安装(也许如果编译与系统其余部分的集成可能会更健壮)。