重启时双显示器屏幕旋转不保留(nvidia-settings)

重启时双显示器屏幕旋转不保留(nvidia-settings)

我的台式电脑上安装了两个显示器,运行的是 Ubuntu 18.04,配有 NVIDIA GTX 960 显卡。我运行的是专有的 NVIDIA 驱动程序。

首先,我打开nvidia-settings并调整显示器,使它们排列如下图所示。

在此处输入图片描述

然后我使用“保存到 X 配置”按钮创建一个新/etc/X11/xorg.conf文件。结果/etc/X11/xorg.conf如下所示。

# nvidia-settings: X configuration file generated by nvidia-settings
# nvidia-settings:  version 410.79

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

Section "Files"
EndSection

Section "Module"
    Load           "dbe"
    Load           "extmod"
    Load           "type1"
    Load           "freetype"
    Load           "glx"
EndSection

Section "InputDevice"
    # generated from default
    Identifier     "Mouse0"
    Driver         "mouse"
    Option         "Protocol" "auto"
    Option         "Device" "/dev/psaux"
    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 U2414H"
    HorizSync       30.0 - 83.0
    VertRefresh     56.0 - 76.0
    Option         "DPMS"
EndSection

Section "Device"
    Identifier     "Device0"
    Driver         "nvidia"
    VendorName     "NVIDIA Corporation"
    BoardName      "GeForce GTX 960"
EndSection

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option         "Stereo" "0"
    Option         "nvidiaXineramaInfoOrder" "DFP-0"
    Option         "metamodes" "DP-4: nvidia-auto-select +1920+0 {rotation=left}, DVI-I-1: nvidia-auto-select +0+840"
    Option         "SLI" "Off"
    Option         "MultiGPU" "Off"
    Option         "BaseMosaic" "off"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection

重新启动后,右显示器不再旋转,如 nvidia-settings 中所示。

在此处输入图片描述

重要的是,左显示器通过 DVI-I(DVI-I-1)连接,右显示器通过 DisplayPort(DP-4)连接。

我尝试过的方法

首先,我检查/usr/share/X11/xorg.conf文件是否存在,我相信该文件优先于/etc/X11/xorg.conf/usr/share/X11/xorg.conf不存在。

接下来,我尝试完全删除/etc/X11/xorg.conf,然后通过 nvidia-settings 工具重新创建该文件。行为与以前相同。

如果我删除/etc/X11/xorg.conf文件,则监视器位置将被交换,这表明正在加载配置,因为当存在 nvidia-settings xorg.conf 文件时行为会有所不同。

(核选项)我还尝试在额外的内部硬盘上安装 Ubuntu 18.04 的新副本。行为与以前相同。

有人知道为什么会发生这种情况吗?每次启动系统时都必须更改显示器旋转,这很烦人。

答案1

对于您来说,使用命名的监视器DVI-I-1DP-4一个临时的解决方案是将以下命令设置为启动应用程序:

xrandr --output DP-4 --rotate right --pos 1920x0 --output DVI-I-1 --pos 0x840

但是我发现这个解决方案不能令人满意,因为这应该由 Ubuntu 和/或 Nvidia 驱动程序来处理,以便配置在启动时立即正确,而不是等待这个命令运行。

对于那些有同样问题的人,有两个显示器具有相同的分辨率Hresx Vres,左边的显示器水平,右边的显示器垂直:

  1. 使用以下方法查找您的显示器名称:

    xrandr | grep " connected"

现在我们假设它们被称为Mon1Mon2(在后续命令中用您自己的名字替换)。

  1. 计算垂直位置Vpos,即水平显示器顶部与垂直显示器顶部之间的距离。您可以在下面看到,这是这样定义的,因为原点位于左上角。如果您只知道Vshift从底部开始的垂直偏移,则可以轻松计算Vpos如下:

    Vpos = Vres - Hres - Vshift

       0                        Hres           Hres + Vres
    0                            -------------------
                                 |                 |
                                 |                 |
                                 |                 |
                                 |     Mon2        |
  Vpos    -----------------------|                 |
          |                      |  Vres x Hres    |
          |                      |                 |
          |         Mon1         |                 |
          |                      |                 |
          |     Hres x Vres      |                 |
          |                      |                 |
Vpos+Hres -----------------------|                 |
                     ^           |                 |
             Vshift  |           |                 |
  Vres               v           -------------------
  1. 使用以下命令创建一个启动应用程序(在 Ubuntu 搜索中搜索“startup”)(将mon1和替换mon2为您的显示器名称、Hres显示器水平分辨率以及Vpos您在步骤 2 中计算出的数字):

    xrandr --output mon2 --rotate right --pos Hresx0 --output mon1 --pos 0xVpos

您应该能够轻松地推广到具有不同分辨率或不同对齐的显示器。

相关内容