首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只有一个X屏幕工作;如何获得两个X屏幕?

只有一个X屏幕工作;如何获得两个X屏幕?
EN

Unix & Linux用户
提问于 2020-04-22 04:03:46
回答 2查看 6.7K关注 0票数 2

nvidia-settings内部(以sudo提升的权限运行),我无法获得第二个X屏幕。下面是我尝试过的一件事的一步一步的描述:

  1. 在左边,选择"X显示配置“
  2. 选择辅助显示器(接收端的显示器)
  3. 在“配置”下拉菜单中选择"New屏幕(需要X重新启动)“
  4. 选择“应用”
  5. 当弹出“无法应用”对话框解释必须将配置保存到X配置文件时,请选择“应用什么是可能的”(然后可能需要在15秒内选择"OK“以保持更改)
  6. 选择“保存到X配置文件”和“保存”

要重新启动X Server以使更改生效,我尝试了几种方法,例如重新启动计算机和通过以下方法重新启动X Server进程:

代码语言:javascript
复制
sudo systemctl restart display-manager

然而,经过多次试验,只有一个X屏幕存在。我通过journalctl -e _COMM=gdm-x-session查看了D18杂志的内容。以下是一段有趣的节选:

代码语言:javascript
复制
(II) NVIDIA(0): Validated MetaModes:
(II) NVIDIA(0):     "DP-0:nvidia-auto-select+0+0"
(II) NVIDIA(0): Virtual screen size determined to be 2560 x 1440
(--) NVIDIA(0): DPI set to (108, 107); computed from "UseEdidDpi" X config
(--) NVIDIA(0):     option
(EE) NVIDIA(G0): GeForce GTX 960 (GPU-0) already has an X screen assigned;
(EE) NVIDIA(G0):     skipping this GPU screen
(EE) NVIDIA(G0): Failing initialization of X screen

以下是一段有点有趣的节选:

代码语言:javascript
复制
(II) Loading sub module "glxserver_nvidia"
(II) LoadModule: "glxserver_nvidia"
(II) Loading /usr/lib64/xorg/modules/extensions/libglxserver_nvidia.so
(II) Module glxserver_nvidia: vendor="NVIDIA Corporation"
        compiled for 1.6.99.901, module version = 1.0.0
        Module class: X.Org Server Extension
(II) NVIDIA GLX Module  440.82  Wed Apr  1 19:47:36 UTC 2020
(II) NVIDIA: The X server supports PRIME Render Offload.
(WW) NVIDIA(0): Failed to initialize Base Mosaic!  Reason: Only one GPU
(WW) NVIDIA(0):     detected.  Only one GPU will be used for this X screen.

下面是一个不那么有趣的节选:

代码语言:javascript
复制
(II) Initializing extension GLX
(II) Indirect GLX disabled.
(II) GLX: Another vendor is already registered for screen 0

关于消息GeForce GTX 960 (GPU-0) already has an X screen assigned; skipping this GPU screen Failing initialization of X screen,如果这确实是根本原因,我不明白为什么在我重新安装Fedora 31之前,这不是一个问题。我检查了/etc/X11/xorg.conf并验证了当前定义了两个GPU设备--文件中的每个X屏幕都有一个GPU设备(尽管它们指向相同的物理设备)。下面是整个/etc/X11/xorg.conf

代码语言:javascript
复制
# nvidia-settings: X configuration file generated by nvidia-settings
# nvidia-settings:  version 440.82

Section "ServerLayout"
    Identifier     "Layout0"
    Screen      0  "Screen0" 0 2160
    Screen      1  "Screen1" Above "Screen0"
    InputDevice    "Keyboard0" "CoreKeyboard"
    InputDevice    "Mouse0" "CorePointer"
    Option         "Xinerama" "0"
EndSection

Section "Files"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Mouse0"
    Driver         "mouse"
    Option         "Protocol" "auto"
    Option         "Device" "/dev/input/mice"
    Option         "Emulate3Buttons" "no"
    Option         "ZAxisMapping" "4 5"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Keyboard0"
    Driver         "kbd"
EndSection

Section "Monitor"
    # HorizSync source: edid, VertRefresh source: edid
    Identifier     "Monitor0"
    VendorName     "Unknown"
    ModelName      "Dell S2716DG"
    HorizSync       34.0 - 209.0
    VertRefresh     30.0 - 144.0
    Option         "DPMS"
EndSection

Section "Monitor"
    # HorizSync source: edid, VertRefresh source: edid
    Identifier     "Monitor1"
    VendorName     "Unknown"
    ModelName      "DENON, Ltd. DENON-AVR"
    HorizSync       30.0 - 136.0
    VertRefresh     58.0 - 121.0
    Option         "DPMS"
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce GTX 960"
    BusID          "PCI:1:0:0"
    Screen          0
EndSection

Section "Device"
    Identifier     "Device1"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce GTX 960"
    BusID          "PCI:1:0:0"
    Screen          1
EndSection

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option         "Stereo" "0"
    Option         "nvidiaXineramaInfoOrder" "DFP-1"
    Option         "metamodes" "DP-0: nvidia-auto-select +0+0"
    Option         "SLI" "Off"
    Option         "MultiGPU" "Off"
    Option         "BaseMosaic" "off"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

Section "Screen"
    Identifier     "Screen1"
    Device         "Device1"
    Monitor        "Monitor1"
    DefaultDepth    24
    Option         "Stereo" "0"
    Option         "metamodes" "HDMI-0: nvidia-auto-select +0+0 {AllowGSYNC=Off}"
    Option         "SLI" "Off"
    Option         "MultiGPU" "Off"
    Option         "BaseMosaic" "off"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

系统信息

  • Fedora 31的新安装
  • 一张带有专有Nvidia驱动程序的图形卡(GeForce GTX 960),通过软件中心安装于“Fedora 31 -非免费- NVIDIA驱动程序”存储库
  • 连接到显卡的两个监视器
    • 通过DisplayPort显示主计算机(转到Dell计算机监视器)
    • 二次显示+通过HDMI输出声音(转到DENON接收器)

问题

有人知道如何让多个X屏幕再次工作吗?如果我能提供更多有用的技术信息,请告诉我(非常感谢相关的shell命令)。

附加背景:拥有两个X屏幕

的动机

计算机坚持任何连接到HDMI的显示器对于某些活动都是“主”的,无论在nvidia-settings中选择哪个监视器作为“主显示器”,或者在xorg.conf中是如何排序的。我相信这是图形卡固件的一个特点,因为如果连接到HDMI上,则POST消息、GRUB2菜单和其他低级软件总是显示在HDMI之上。这是不可配置的。

在运行操作系统时,这种“默认到HDMI”的现象会导致在辅助显示上打开新窗口时出现重大问题。新的窗口是不可见的,因为连接到接收器的电视几乎总是关闭的,而接收器本身则是为了提供声音。我了解到,我可以使用shift + window btn + arrow btn快捷方式将活动窗口显示到我选择的屏幕上,而不必打开电视通过图形用户界面将其拖动过来;这稍微有所帮助。除了恼人之外,新打开的窗口有时会被忽略,甚至更糟:一些全屏应用程序(例如游戏)无法移动到正确的显示,或者只能跨越这两种显示。这一直是一个主要的可用性问题。

在某种程度上,我想出了以下解决方案:创建一个新的X屏幕,并为每个监视器分配自己的X屏幕。当然,这只是解决了我在操作系统中遇到的问题,但这是一个相当令人满意的解决方案。游戏正常工作,窗口永远不会出现错误的显示,等等。

现在的问题是,在刚安装Fedora之后,我无法让Screens再次运行两个X屏幕。

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2020-06-11 02:50:15

经过大量的研究和实验(使用.conf文件等),我始终无法确定这个问题的根本原因。我最终通过完全重新安装Fedora并在安装专有的Nvidia驱动程序时格外勤快地完成了两个X屏幕的工作。这个问题可能与第一次安装Nvidia驱动程序的细微差别有关。我最好的理论是,当Nvidia驱动程序提示我运行Xconfig实用程序时,我可能选择了“是”。不幸的是,我不记得我的选择,所以我不确定这是否是问题所在。

下面,我描述了最近一次安装Nvidia驱动程序的方法,它导致了预期的X屏幕设置行为。这个过程包含了我的一些个人偏好,它们实际上与驱动程序安装无关,但是因为我做了这些选择而被记录下来(这些个人偏好被标记为这样)。步骤1是我在完全新安装之后所做的第一件事。

专有Nvidia驱动程序安装在Fedora /Linux上:

  1. sudo dnf upgrade
  2. 重新启动计算机sudo shutdown -r now
  3. sudo dnf install kernel-devel kernel-headers gcc make dkms acpid libglvnd-glx libglvnd-opengl libglvnd-devel pkgconfig
  4. sudo vi /etc/default/grub
    1. GRUB_CMDLINE_LINUX条目中,删除rhgh quiet (这是我个人的偏好)
    2. 仍然在GRUB_CMDLINE_LINUX条目中,添加rd.driver.blacklist=nouveaunouveau.modeset=0
    3. GRUB_TIMEOUT行之后,添加新行"GRUB_TIMEOUT_STYLE=menu“(这是我个人的首选)
    4. :wq保存和退出vi

  5. sudo grub2-editenv - unset menu_auto_hide (这是我个人的喜好)
  6. 我已经启动了UEFI,并且正在运行Fedora,因此为了重新生成我的GRUB2配置,我使用:sudo grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg (对于传统引导或其他发行版来说,这通常是不同的)
  7. 重新启动计算机sudo shutdown -r now (显示将是低分辨率和低质量)
  8. sudo init 3将操作系统切换到运行级3
  9. 在提示符下登录
  10. cd到包含从Nvidia下载的.run文件的目录(对我来说是~/Downloads)
  11. sudo ./NVIDIA_driver_file_name.run (可能需要执行sudo chmod +x [file_name]使其可执行)
  12. 当提示时,请安装DKMS并安装32位兼容性库。
  13. 提示时,不要运行Xconfig实用程序。
  14. 重新启动计算机sudo shutdown -r now
票数 3
EN

Unix & Linux用户

发布于 2020-04-22 06:34:56

让我给出一个配置文件的示例,我正在两个屏幕上成功地在CentOS7和CentOS8上使用该文件。它们与您正在使用的Fedora非常相似。在以前的系统(CentOS5)中,我使用了xorg.conf,但现在我将其应用到/etc/X11/xorg.conf.d/20-nvidia-graphics.conf中:

代码语言:javascript
复制
Section "ServerLayout"
    Identifier     "Default Layout"
    Screen         0 "Screen0" 0 0
    Screen         1 "Screen1" LeftOf "Screen0"
    InputDevice    "Keyboard0" "CoreKeyboard"
    InputDevice    "Mouse0" "CorePointer"
    Option         "Xinerama" "0"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Keyboard0"
    Driver         "kbd"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Mouse0"
    Driver         "mouse"
    Option         "Protocol" "auto"
    Option         "Device" "/dev/input/mice"
    Option         "Emulate3Buttons" "no"
    Option         "ZAxisMapping" "4 5"
EndSection

Section "Device"
    Identifier     "Device1"
    Driver         "nvidia"
    Screen         1
    Option         "UseDisplayDevice" "DFP-1"
    Option         "ConnectedMonitor" "DFP-0, DFP-1"
    Option         "CustomEDID" "DFP-1:/etc/X11/ADP361.bin; DFP-0:/etc/X11/0.bin"
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    Screen         0
    Option         "UseDisplayDevice" "DFP-0"
    Option         "ConnectedMonitor" "DFP-0, DFP-1"
EndSection

Section "Screen"
    Identifier     "Screen1"
    Device         "Device1"
    DefaultDepth    24
    Option         "metamodes" "DFP-1: 1200x1920 +0+0"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    DefaultDepth    24
    Option         "metamodes" "DFP-0: 2048x2048 +0+0"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

这个文件在我的电脑上创建了两个屏幕,我甚至可以在每个屏幕上运行不同的窗口管理器。我想你会在这两种情况下运行相同的窗口管理器。我认为其中的一个窍门就是禁用连接所有屏幕的鑫joins。

您应该调整配置文件,直到正确为止。我相信,我的样本是一个很好的开始,因为它对我有用。

也许您可以使用read-edid来读取监视器EDID并将其提供给文件。这样,驱动程序认为哪些驱动程序是连接的并不重要,因为它将使用从文件中提供的EDID。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/581682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档