我使用的是 Nvidia GTX 950 GPU 台式机系统,连接了三台显示器。一台显示器连接在 HDMI 输出端口上,另外两台显示器连接在 DisplayPort 端口上。
默认行为是关闭其中一个“辅助”显示器会导致 xrandr 调整虚拟桌面大小并重新排列所有窗口以适合剩余的显示器。
有没有办法让 xrandr 忽略 HDMI 电缆和/或相关显示器的移除,以便它保持“虚拟桌面”不变(即使窗口不在屏幕上且难以访问),而不是重新排列它所做的将所有活动窗口合并到幸存的显示器中?此外,重新插入电缆和同一台显示器并重新点亮它?
Ubuntu 16.04 和 16.10 似乎具有相同的基本行为。我两者都有启动选项。谢谢。
编辑 2017:我找到了一些 bash 和 python 脚本,尝试自动重新排列屏幕外窗口。这些脚本可能有助于应对这种情况。即使使用 Ubuntu 17.04(全新安装格式),这个一般问题对我来说仍然存在。脚本讨论:断开第二台显示器后如何恢复屏幕外窗口?和使用命令行将窗口移动到特定屏幕
答案1
这可能适用于 HDMI/VGA 端口,但不适用于 DP,因为 DP 的某些标准应始终通过检测事件。
我可以在配备 VGA/DP 的 Dell E6410 上测试这一点。现在从 VGA 上拔下电缆不会触发 xrandr 重置和移动窗口。
gksu nvidia-settings
- 转到 X 配置选项卡然后导出配置
- 仅复制设备部分
sudo mkdir /etc/X11/xorg.conf.d/
sudo nano /etc/X11/xorg.conf.d/90_my_nvidia_hacks.conf
粘贴设备部分
Section "Device" Identifier "Device0" Driver "nvidia" VendorName "NVIDIA Corporation" BoardName "NVS 3100M" EndSection
添加此行
Option "UseHotplugEvents" "false"
Section "Device" Identifier "Device0" Driver "nvidia" VendorName "NVIDIA Corporation" BoardName "NVS 3100M" Option "UseHotplugEvents" "false" EndSection
重新启动或重启 lightdm
sudo systemctl restart lightdm
您可能也会发现这很有用,Option "AllowEmptyInitialConfiguration" "true"
即使在 X 启动时没有连接任何屏幕,它也会创建空的监视器部分。
参考:
当我插入或拔下显示器,或者关闭显示器电源然后再次打开时,我的显示器会以意外的方式重新配置。
这是“我在 nvidia-settings 中配置的显示设置不持久”中描述的问题的一个特例。一些包含高级显示配置工具的桌面环境将自动配置显示布局以响应检测到的配置更改。例如,当插入新显示器时,这样的桌面环境可能会尝试恢复当前连接的显示器组使用的先前布局,或者可能根据其自己的策略配置默认布局。
在支持 RandR 1.2 或更高版本的 X 服务器上,当显示器连接和断开连接时,NVIDIA X 驱动程序会通过 RandR 向 X 服务器报告显示器热插拔事件。这些热插拔事件可能会触发具有高级显示管理功能的桌面环境来更改显示配置。这些更改可能会影响设置,例如活动显示器集、它们的分辨率和相对位置、每个显示器的色彩校正设置等。
除了连接或断开显示器时产生的热插拔事件外,DisplayPort 显示器在关闭时也会产生热拔出事件,在打开时也会产生热插拔事件,即使没有发生物理插入或拔出。这可能会导致热插拔引起的显示器配置更改,而无需进行任何实际的热插拔操作。
如果显示热插拔事件导致不希望的配置更改,请尝试“我在 nvidia-settings 中配置的显示设置不持久。”中列出的解决方案和解决方法。另一个解决方法是使用 UseHotplugEvents X 配置选项禁用 NVIDIA X 驱动程序对热插拔事件的报告。请注意,此选项对 DisplayPort 设备没有影响,因为 DisplayPort 设备必须报告所有热插拔事件才能确保正常运行。
Option "UseHotplugEvents" "boolean"
启用此选项后,当显示器插入或拔出 NVIDIA GPU 时,NVIDIA X 驱动程序将生成 RandR 显示更改事件。某些桌面环境将监听这些事件,并在添加或移除显示器时动态重新配置桌面。
禁用此选项可抑制非 DisplayPort 显示器(即通过 VGA、DVI 或 HDMI 连接的显示器)生成这些 RandR 事件。无法抑制通过 DisplayPort 连接的显示器的热插拔事件。
请注意,无论此选项是启用还是禁用,探测显示配置(例如使用 xrandr 或 nvidia-settings)都可能导致生成 RandR 显示更改事件。此外,某些 VGA 端口无法进行热插拔检测:在此类端口上,只能通过重新探测显示配置来检测显示器的添加或移除。
默认值:开启。当添加或移除显示器时,驱动程序将生成 RandR 事件。
Option "AllowEmptyInitialConfiguration" "boolean"
通常情况下,如果 NVIDIA X 驱动程序无法找到连接到 NVIDIA GPU 的任何显示设备,它将无法启动。AllowEmptyInitialConfiguration 会覆盖该行为,这样即使没有连接显示设备,X 服务器也会启动。
在启动 X 服务器时,如果预计没有显示设备连接到 NVIDIA GPU,但稍后可能会连接,则在配置中启用此选项是有意义的。例如,某些显示器在关闭时不会显示为已连接,即使它们物理连接到 GPU。
另一种有用的情况是基于 Optimus 的笔记本电脑,其中 RandR 1.4 显示卸载(参见第 33 章,使用 RandR 1.4 卸载图形显示)用于在非 NVIDIA 内部显示面板上显示屏幕,但稍后可能会连接外部显示器。
默认:关闭。如果驱动程序无法找到至少一个连接的显示设备,它将拒绝启动。