如何使用 Nvidia 专有驱动程序添加虚拟显示器

如何使用 Nvidia 专有驱动程序添加虚拟显示器

如何使用 Nvidia 专有驱动程序添加虚拟显示器?之前我使用了带有此解决方案的英特尔卡,效果很好:将虚拟输出添加到 Xorg

现在我想切换到新硬件,而不是英特尔卡。中提到的解决方案VNC-Server作为虚拟X11显示器来扩展屏幕在我的情况下不起作用。当我想将模式添加到输出时,xrandr会抛出错误。

xrandr --newmode test 173.00  1920 2048 2248 2576  1080 1083 1088 1120 -hsync +vsync
xrandr --addmode "DP-1" test
X Error of failed request:  BadMatch (invalid parameter attributes)
  Major opcode of failed request:  140 (RANDR)
  Minor opcode of failed request:  18 (RRAddOutputMode)
  Serial number of failed request:  41
  Current serial number in output stream:  42

基本数据:

  • 硬件:HP ZBook 15 G3,配置为独立显卡(Optimus 不起作用!)
  • 软件:Debian 10.0.2;内核:4.19.0,Nvidia 驱动程序模块:xser​​ver-xorg-video-nvidia-legacy-390xx

如果你问我为什么这样做:我用一个软件通过以太网将虚拟屏幕传输到另一台机器上,实现两台笔记本的双显示器。 (https://github.com/B-LechCode/sooScreenShare

更新:现在有一个建议的解决方案适用于我的机器,但它无法添加新模式,例如 1920x1200。也许有人有想法?

答案1

我有一个适合我的解决方案,尽管它缺少选择完全任意分辨率的能力。需要明确的是,这仅适用于专有的 nvidia 驱动程序;开源 nouveau 驱动程序的工作方式与其他显卡驱动程序不同。

简短的版本是:使用ConnectedMonitornvidia xorg.conf Screen 选项来激活除主显示器之外的额外输出。

这是长版本:

运行xrandr --query以获取主要输出的名称以及计划用于虚拟屏幕的未连接输出的名称。例如,我得到以下输出:

LVDS-0接初级1440x900+0+0(正常左倒右x轴y轴)331mm x 207mm
   [各种监控模式已省略]
DP-0断开(正常左倒右x轴y轴)
DP-1断开(正常左倒右x轴y轴)
DP-2断开(正常左倒右x轴y轴)
DP-3断开(正常左倒右x轴y轴)
DP-4断开(正常左倒右x轴y轴)
DP-5断开(正常左倒右x轴y轴)

所以就我而言,笔记本电脑的屏幕是LVDS-0可用DP-0DP-5。和你一样,我会选择DP-1虚拟屏幕。

您将需要添加 xorg.conf 屏幕配置以及供屏幕使用的设备部分。它可以在 xorg 能找到它的任何地方。我把我的放进去/etc/X11/xorg.conf.d/30-virtscreen.conf。在该文件中,最小设置是:

“设备”部分
    标识符“nvidiagpu”
    驱动程序“nvidia”
结束部分

“屏幕”部分
    标识符“nvidiascreen”
    设备“nvidiagpu”
    选项“ConnectedMonitor”“LVDS-0,DP-1”
结束部分

这告诉驱动程序使用DP-1输出,即使它没有检测到连接到它的监视器。请注意,如果您想使用您的笔记本电脑显示器(或真实的物理显示器),您也必须列出它!如果只列出虚拟输出,驱动程序将不是激活任何其他输出,即使它检测到连接到它们的监视器。

现在重新启动 X。您应该看到两个活动监视器xrandr以及其他显示查询程序。

在我的系统上,新激活的虚拟输出有多种可用分辨率。我可以选择其中任何一个(例如 via xrandr --output DP-1 --mode 1600x900),虚拟输出将自行调整大小。但是,我无法添加新模式(例如,如果我想要 1920x1080 分辨率)。这仍然给我“无效的参数属性”错误。幸运的是,我可以接受我可以使用的模式。幸运的话,您还会获得一些有用的预设。

答案2

https://askubuntu.com/a/803053/1568608解决嗜ASCII码问题,但您无法将分辨率更改为例如 1920x1080(asciiphil 答案中的无效参数属性问题)。要解决此问题,只需在“屏幕”部分添加第二个选项:

Section "Screen"
    Identifier  "nvidiascreen"
    Device      "nvidiagpu"
    Option      "ConnectedMonitor" "LVDS-0,DP-1"
    Option      "ModeValidation" "NoDFPNativeResolutionCheck,NoVirtualSizeCheck,NoMaxPClkCheck,NoHorizSyncCheck,NoVertRefreshCheck,NoWidthAlignmentCheck"
EndSection

答案3

如果您想连接虚拟显示器,只需使用

Option         "ConnectedMonitor" "HDMI-0"

将 HDMI-0 替换为您希望显卡用于虚拟显示的任何显示端口到 xorg.conf 的“屏幕”部分。添加以下行将禁用所有必要的检查,以允许您在较新的 NVIDIA 显卡上设置任何不受支持的分辨率。在“屏幕”部分下:

Option         "UseEDIDFreqs" "False"
Option         "ModeValidation" "NoDFPNativeResolutionCheck,NoVirtualSizeCheck,NoMaxPClkCheck,NoHorizSyncCheck,NoVertRefreshCheck,NoWidthAlignmentCheck AllowNonEdidModes"

然后使用 cvt 的结果添加模式,一切就绪了!如果您仍然无法设置分辨率,则可以将 ModeLine 添加到监视器部分,并将模式添加到显示部分以加载它。更完整的示例:

Section "Monitor"
Modeline "2560x1440_120.00" <cvt output stuff>
EndSection

Section "Screen"
    SubSection     "Display"
        Depth       24
        Modes      "2560x1440_120.00"
    EndSubSection
    Option         "ConnectedMonitor" "HDMI-0"
    Option         "UseEDIDFreqs" "False"
    Option         "ModeValidation" "NoDFPNativeResolutionCheck,NoVirtualSizeCheck,NoMaxPClkCheck,NoHorizSyncCheck,NoVertRefreshCheck,NoWidthAlignmentCheck AllowNonEdidModes"
EndSection

这些选项应添加到您通过运行生成的配置文件中nvidia-xconfig,并不代表完整的或功能性的xorg.conf

相关内容