我的台式电脑上安装了两个显示器,运行的是 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-1
和DP-4
一个临时的解决方案是将以下命令设置为启动应用程序:
xrandr --output DP-4 --rotate right --pos 1920x0 --output DVI-I-1 --pos 0x840
但是我发现这个解决方案不能令人满意,因为这应该由 Ubuntu 和/或 Nvidia 驱动程序来处理,以便配置在启动时立即正确,而不是等待这个命令运行。
对于那些有同样问题的人,有两个显示器具有相同的分辨率Hres
x Vres
,左边的显示器水平,右边的显示器垂直:
使用以下方法查找您的显示器名称:
xrandr | grep " connected"
现在我们假设它们被称为Mon1
和Mon2
(在后续命令中用您自己的名字替换)。
计算垂直位置
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 -------------------
使用以下命令创建一个启动应用程序(在 Ubuntu 搜索中搜索“startup”)(将
mon1
和替换mon2
为您的显示器名称、Hres
显示器水平分辨率以及Vpos
您在步骤 2 中计算出的数字):xrandr --output mon2 --rotate right --pos Hresx0 --output mon1 --pos 0xVpos
您应该能够轻松地推广到具有不同分辨率或不同对齐的显示器。