如何使用 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 驱动程序模块:xserver-xorg-video-nvidia-legacy-390xx
如果你问我为什么这样做:我用一个软件通过以太网将虚拟屏幕传输到另一台机器上,实现两台笔记本的双显示器。 (https://github.com/B-LechCode/sooScreenShare)
更新:现在有一个建议的解决方案适用于我的机器,但它无法添加新模式,例如 1920x1200。也许有人有想法?
答案1
我有一个适合我的解决方案,尽管它缺少选择完全任意分辨率的能力。需要明确的是,这仅适用于专有的 nvidia 驱动程序;开源 nouveau 驱动程序的工作方式与其他显卡驱动程序不同。
简短的版本是:使用ConnectedMonitor
nvidia 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-0
的DP-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
。