在搭载 AMD Ryzen 7 4800H 和 Nvidia RTX 2060 的笔记本电脑上,无法让内置和外置显示器同时使用 20.04

在搭载 AMD Ryzen 7 4800H 和 Nvidia RTX 2060 的笔记本电脑上,无法让内置和外置显示器同时使用 20.04

简洁版本

在 Ubuntu 20.04 上,无法让内置和外置显示器同时工作。只能使用默认驱动程序来设置内置显示器,或者只能使用手动安装的 NVIDIA 驱动程序来设置外置显示器。救命!

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

  • 全新安装 Ubuntu 20.04
  • 需要在 grub 条目中进行设置nouveau.modeset=0才能使图形正常工作
  • 未检测到外部显示器
  • 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)

我可以通过切换到虚拟终端来登录ctrl + alt + F2。登录后,屏幕上持续显示一分钟以上的消息:

[   80.199703] nouveau 0000:01:00.0 fifo: SCHED_ERROR 08 []

其次是

[   80.206302] nouveau 0000:01:00.0 DRM: failed to idle channel 0 [DRM]

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

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nouveau.modeset=0"

并运行

sudo update-grub

重启后,我可以看到 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*

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

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

sudo apt install nvidia-driver-440 

重启后显示器情况不变,仍然只有内部显示器。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                                                 |
+-----------------------------------------------------------------------------+

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

现在我运行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)

完整输出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

请帮我解决这个问题

从我的互联网搜索来看,我不是唯一一个与这种 AMD/NVIDIA 混合显卡配置作斗争的人。最好的办法是无缝集成两个显卡,尽可能节省电池,并在需要时使用独立显卡,但我很乐意满足于永久耗电的 nvidia,同时两个显示器都可以工作!

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


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

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update

我以前曾尝试过这个,但没有什么区别,该 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 卡时,我仍然只能使用显示端口(在 usbc 上)。我仍然希望能够在内部显示器上使用 NVIDIA。

答案1

我设法使用 Ubuntu 20.04 附带的 Linux 内核中对 Renoir 的实验性支持使 AMD 显卡正常工作。

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

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

sudo edit /etc/default/grub

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

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash amdgpu.exp_hw_support=1"

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

sudo update-grub

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

sudo nano /etc/modprobe.d/blacklist-nouveau.conf

添加以下条目:

blacklist nouveau
options nouveau modeset=0

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

sudo update-initramsfs -u

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

不过仍然没有 nvidia 显卡。如果知道如何让这台机器(配备 Ryzen 7 4800H 和 RTX 2060 的 AsusTUF)使用可切换的 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)

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

sudo apt-get install nvidia-driver-440

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

sudo nano /usr/share/X11/xorg.conf.d/10-amdgpu.conf

更改文件内容如下:

Section "OutputClass"
    Identifier "AMDgpu"
    MatchDriver "amdgpu"
    Driver "amdgpu"
    Option "PrimaryGPU" "no"
EndSection

现在,更改 NVidia 的 conf 文件:

sudo nano /usr/share/X11/xorg.conf.d/10-nvidia.conf

使用以下条目编辑文件

Section "OutputClass"
   Identifier "nvidia"
   MatchDriver "nvidia-drm"
   Driver "nvidia"
   Option "AllowEmptyInitialConfiguration"
   Option "PrimaryGPU" "yes"
   ModulePath "/usr/lib/x86_64-linux-gnu/nvidia/xorg"
EndSection

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

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

答案2

我有同样的笔记本电脑。在尝试了很多方法后,我发现哪些方法对我有用。

  1. 内核 5.7.15(或更高版本https://kernel.ubuntu.com/~kernel-ppa/mainline/)此内核有适用于 amd cpu 和 apu 的驱动程序,可以使用 hdmi/外部显示器。(如果已安装,请删除 amdgpu 或 amdgpu-pro)

  2. Nvidia PPA sudo add-apt-repository ppa:graphics-drivers/ppa && sudo apt-get upgrade && sudo apt-get update sudo apt-get install nvidia-driver-450

答案3

我的华硕 FA506 配备 4800H 和 rtx2060,也遇到了同样的问题。我尝试了两种方法来解决这个问题,第一种方法是:

  1. 安装最新的 Ubuntu 20.04。
  2. 为 Linux 安装 AMD 图形驱动程序。

然后 HDMI 就可以正常工作了。我 5 月份试过,但不知何故无法暂停。然后我费了好大劲才暂停笔记本电脑并重新安装了几次 Ubuntu。后来我找到了另一种启用暂停的方法(来自另一个 BBS),它也解决了 HDMI 问题:

  1. 安装最新的 Ubuntu 20.04。
  2. 将内核升级到 5.7.0-rc4。

Ubuntu 20.04 采用内核 5.4,并且似乎内核 5.7 添加了 amd 图形驱动程序,因此升级内核后,HDMI 可以工作。

其实没那么简单,我还需要修复 nvme 设置,而且我不记得我是否有 block nouveau。

听说FA506的这个HDMI端口仅适用于4800H上的AMD RYZEN图形芯片,如果rtx2060正在工作,其数据仍然需要导出到Ryzen图形芯片,然后芯片导出到HDMI端口。HDMI端口不直接连接到rtx2060。但是我也听说如果你通过USB-C导出HDMI端口,那么它就是直接连接到rtx2060,但我没有尝试。我的笔记本电脑仍然运行内核5.7.0rc4,没有nvidia驱动程序。

我仍然正在寻找一种方法来仅使用 AMD 图形芯片并关闭 rtx2060,因为它消耗了太多电池电量。

相关内容