如何将 nvidia gpu 的 xorg.conf 配置与 xrandr 检测到的屏幕关联起来?

如何将 nvidia gpu 的 xorg.conf 配置与 xrandr 检测到的屏幕关联起来?

我遇到了在 Alienware M15 中使用 RHEL 7.9 和 RTX 2070 的情况,但最近我没有取得太大进展。我从 Nvidia 下载了最新的兼容驱动程序(文件名:NVIDIA-Linux-x86_64-510.60.02.run),将nouveau驱动列入黑名单,然后降到init level 3,成功安装驱动(lsmod显示已加载)。但在安装过程中的引导提示中,它会询问您是否希望它为您构建 xorg.conf 文件,我选择了“是”,但它本质上是不起作用的,并且只能在重新启动后显示RHEL 7 灰色壁纸不过从不加载 X11 / GDM 的其余部分。日志显示了原因。

>>Nvidia 驱动程序已加载,但 Xorg 找不到可用屏幕<<

Xorg 日志显示,它正在尝试枚举各种输出屏幕设备,如 DP-0、-1、-2 等(显然在 xorg 中讲 DP(或 DFP)= 数字平板屏幕),但无法连接和然后它最终会停止或无法加载 X。由于 X11 启动屏幕会在显示 RHEL 7 壁纸时挂起,因此我必须在备用文本终端之一中与操作系统进行交互(<Ctrl><Alt><Fn> (n=1..6))并且当 xrandr 一直错误说它无法连接到任何东西时,我发现 X11 实际上并没有运行(尽管终端 1 上有一些图形化的东西)。

在大量搜索如何从头开始构建 xorg.conf 文件后,我尝试构建一个配置文件,指定 RTX 2070 卡的 BusID 并指定 nvidia 驱动程序,但得到相同的“黑屏”(仅限壁纸)结果。

所以(按照我在网上找到的故障排除线程)我删除了我的 xorg.conf,运行启动x(我没想到这会起作用,但奇迹般的是我终于得到了一个完整的桌面!),然后可以运行 xrandr 来查看连接的 DP 和其他显示器。我终于看到了本地笔记本电脑屏幕的屏幕 ID(见下文)。

(快速说明:Alienware M15 确实有内置英特尔卡我相信它正在使用驱动程序来显示它,所以这是不是使用 nvidia 驱动程序成功。)

>>我在寻找什么<<

以下是我对这个问题的看法: 如何指定在 xorg.conf 中使用 xrandr 检测到的特定监视器?

所以事情是这样的。这是一台笔记本电脑,我最初并不打算将其连接到外部显示器。桌面 GUI 启动并运行 xrandr 后,一个新设备在之前调用的 Xorg 日志中尚未命名或检测到eDP-1(注意额外的e前缀)显然是本地笔记本电脑屏幕的名称。

此外,今天我决定将其连接到外部 HDMI 屏幕,xrandr 也显示了其设备名称。所以这是我的问题:有了 xrandr 提供的这些信息,我如何构建 xorg.conf 来使用这些屏幕并使用英伟达驱动程序RTX2070 能够处理它们吗?

还,假设检查在这里:我是否错误地认为,当 Alienware M15 未连接到任何显示器时,RTX 2070 可用于在本地屏幕上渲染内容?这是一张只能处理外接显示器的卡吗?如果 RTX 2070 无法控制本地/内置笔记本电脑屏幕,那么难怪我的 nvidia 驱动程序无法显示。此时,虽然我什至不知道如何让它显示到外部 hdmi 连接的显示器(即使使用英特尔驱动程序,外部显示器也会在信号电平上被检测到,但由于某种原因完全是黑色的)。


更新:有趣。我删除了 nouveau 驱动程序黑名单并更新了 grub 设置,重新启动,然后再次将其列入黑名单,然后重新启动(lsmod 显示已加载 nvidia 驱动程序)并且没有 xorg.conf 存在(它可能会下降到 xorg.conf.d 并提取一些默认配置)这次我确实得到了一个 GUI,就像我手动启动时所做的那样启动x。除了根本不存在 xorg.conf 文件之外,不知道发生了什么变化。然而,我真的怀疑它是使用 nvidia 驱动程序来执行此操作/在我的本地笔记本电脑屏幕上显示,而是使用 intel 驱动程序)。以下是各种命令的一些输出。如果我还需要添加其他内容,请告诉我。

我在 /var/log/messages 中看到了一些新内容,我认为当我通过 HDMI 插入 HP Envy 显示器时会发生这种情况:

Mar 31 11:23:06  kernel: ACPI Exception: AE_NOT_FOUND, Evaluating _DOD (20130517/video-1257)
Mar 31 11:23:12  kernel: ACPI Exception: AE_NOT_FOUND, 
Evaluating _DOD (20130517/video-1257)
Mar 31 11:23:18  kernel: ACPI Exception: AE_NOT_FOUND, Evaluating _DOD (20130517/video-1257)
Mar 31 11:23:20  kernel: ACPI Warning: \_SB_.PCI0.PEG0.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20130517/nsarguments-95)
Mar 31 11:23:20 kernel: ACPI Warning: \_SB_.PCI0.PEG0.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20130517/nsarguments-95)
Mar 31 11:23:20  kernel: ACPI Warning: \_SB_.PCI0.PEG0.PEGP._DSM: Argument #4 type mismatch - Found [Buffer], ACPI requires [Package] (20130517/nsarguments-95)
# lspci | egrep "VGA|3D"
00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 630 (Mobile)
01:00.0 VGA compatible controller: NVIDIA Corporation TU106M [GeForce RTX 2070 Mobile] (rev a1)
# xrandr
Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 8192 x 8192
eDP-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 344mm x 193mm
   1920x1080     60.01*+  60.01    59.97    59.96    48.01    59.93  
   1680x1050     59.95    59.88  
   1400x1050     59.98  
   1600x900      59.99    59.94    59.95    59.82  
   1280x1024     60.02  
   1400x900      59.96    59.88  
   1280x960      60.00  
   1440x810      60.00    59.97  
   1368x768      59.88    59.85  
   1280x800      59.99    59.97    59.81    59.91  
   1280x720      60.00    59.99    59.86    59.74  
   1024x768      60.04    60.00  
   960x720       60.00  
   928x696       60.05  
   896x672       60.01  
   1024x576      59.95    59.96    59.90    59.82  
   960x600       59.93    60.00  
   960x540       59.96    59.99    59.63    59.82  
   800x600       60.00    60.32    56.25  
   840x525       60.01    59.88  
   864x486       59.92    59.57  
   700x525       59.98  
   800x450       59.95    59.82  
   640x512       60.02  
   700x450       59.96    59.88  
   640x480       60.00    59.94  
   720x405       59.51    58.99  
   684x384       59.88    59.85  
   640x400       59.88    59.98  
   640x360       59.86    59.83    59.84    59.32  
   512x384       60.00  
   512x288       60.00    59.92  
   480x270       59.63    59.82  
   400x300       60.32    56.34  
   432x243       59.92    59.57  
   320x240       60.05  
   360x202       59.51    59.13  
   320x180       59.84    59.32  
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-1 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
HDMI-2 disconnected (normal left inverted right x axis y axis)
# nvidia-xconfig --query-gpu-info
Number of GPUs: 1

GPU #0:
  Name      : NVIDIA GeForce RTX 2070 with Max-Q Design
  UUID      : GPU-ccc50115-935f-364f-d0a5-46e1799a9092
  PCI BusID : PCI:1:0:0

  Number of Display Devices: 1

  Display Device 0 (TV-0):
      EDID Name             : HPN HP ENVY 27
      Minimum HorizSync     : 135.000 kHz
      Maximum HorizSync     : 135.000 kHz
      Minimum VertRefresh   : 40 Hz
      Maximum VertRefresh   : 60 Hz
      Maximum PixelClock    : 600.000 MHz
      Maximum Width         : 3840 pixels
      Maximum Height        : 2160 pixels
      Preferred Width       : 3840 pixels
      Preferred Height      : 2160 pixels
      Preferred VertRefresh : 60 Hz
      Physical Width        : 600 mm
      Physical Height       : 340 mm

请注意 xrandr 如何检测 eDP-1(笔记本电脑屏幕),但 nvidia 命令仅检测我的外部 HP Envy 显示器。

这也是之前对 xorg.conf 的尝试,已将其重命名为备份文件。因为这不起作用,但我删除了 xorg.conf,这是它的当前状态。

# nvidia-xconfig:  version 510.60.02


Section "ServerLayout"
    Identifier     "Layout0"
    Screen      0  "Screen0" 0 0
    Inactive       "IntelDevice"
#    InputDevice    "Keyboard0" "CoreKeyboard"
#    InputDevice    "Mouse0" "CorePointer"
EndSection


Section "Monitor"
    Identifier     "Monitor0"
    VendorName     "Unknown"
    ModelName      "Unknown"
#    Option         "DPMS"
EndSection

Section "Device"
    Identifier     "NvidiaDevice"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BusID          "PCI:1:0:0"
EndSection


Section "Device"
    Identifier     "IntelDevice"
    VendorName     "Intel Corporation"
    BusID          "PCI:0:2:0"
EndSection


Section "Screen"
    Identifier     "Screen0"
    Device         "NvidiaDevice"
    Monitor        "Monitor0"
    Option         "UseDisplayDevice" "None"
#    DefaultDepth    24
#    SubSection     "Display"
#        Depth       24
#    EndSubSection
EndSection

答案1

非常片面的答案:

  • 如果不xorg.conf存在,X 会尝试自动检测所有内容,并做出明智的选择。这就是为什么没有xorg.conf往往比拥有更好。

  • xorg.conf在安装过程中创建的可能没有考虑 nvidia 的特性。

  • nvidia 驱动程序是一个奇怪的野兽:它使用 Nvidia 自己的关于驱动程序如何工作的抽象(因为它的一部分在 Windows 上重复使用),并尝试将其与 X 抽象进行强力匹配。这有时会产生摩擦。

  • 当您尝试调试此问题时,查找信息的位置是 Xorg 日志,通常位于/var/log/Xorg.0.log(不确定 RHEL 是否也将其放在那里)。

  • 强制阅读 Nvidia 驱动程序自述文件中的附录 B,例如这里(检查这是否是您的版本)。请注意该ConnectedMonitor选项。

答案2

如果您希望专有 NVIDIA 驱动程序成为主要渲染提供程序并使用内置笔记本电脑显示屏:

创建一个 xorg.file,但仅在(仅)Screen 部分中使用标识符,并在 intel Device 部分中指定 Busid 和驱动程序(模式设置),以便 xorg 可以找到 buitlin 显示。

  • 将使用 nvidia 卡
  • xorg 文件中无法显示分辨率。

示例(在 Severlayout 部分中添加 2 个 InputDevice 部分和 InputDevice 条目)

/etc/X11/xorg.conf

Section "ServerLayout"
Identifier "layout"
Screen  "ScreenU"
EndSection

Section "Device"
Identifier "nvidia"
Driver "nvidia"
EndSection
   
Section "Screen"
Identifier "ScreenU"
EndSection

Section "Device"
Identifier     "intel"
Driver         "modesetting"
BusID          "PCI:0:2:0"
EndSection

查看

prime-select query

并根据需要进行调整:

prime-select on-demand

您可以使用 xrandr 设置和定位显示器,并且可以将这些命令放入 ~.profile 中

结果应该是这样的:

xrandr --listproviders 
Providers: number : 2
Provider 0: id: 0x1b8 cap: 0x1, Source Output crtcs: 4 outputs: 8 associated providers: 1 name:NVIDIA-0
Provider 1: id: 0x204 cap: 0x6, Sink Output, Source Offload crtcs: 3 outputs: 1 associated providers: 1 name:modesetting

相关内容