虽然说manjaro安装nvidia的闭源驱动非常简单(KDE系统设置->硬件设定->Auto Install Proprietary Driver)。但是后面也避免不了不少问题。

前情提要:

最近新入手了一块2k大屏,准备用作笔记本的拓展屏幕(_程序员必备竖屏_)。插电(接线),开机。唔,不愧是即插即用,一次性点亮(拓展屏,笔记本内置屏同时显示)。然而后面问题却没有我想象中的那么简单。

问题一:

原计划拓展屏内容作为竖屏显示。然后我就发现这做不到——无论是用系统设定中的显示设置(设置后无效), xrandr -o left (报错),还是arandr (显示器方向的选项卡里只能设置normal(其他选项均为灰色)),都无法更改显示内容的方向。

唔,也许是这块屏幕的linux兼容性不太行。没法旋转就算了(自认倒霉,放弃)。

问题二:

一段时间的使用后感觉拓展屏的显示有明显的掉帧现象。至少在窗口拖动的显示无法达到60fps的丝滑体验。对于一个注重日常体验(强迫症)的人来说,这种掉帧怎么能够忍受!

仔细研究了一下,发现似乎外接屏幕连接的是intel核心显卡。唔,众所周知intel核显拉垮。于是就尝试让外接屏幕直连N卡。

Debug:

因为问题比较冷门,国内的linux圈本来就小众。在一点点搜索引擎查询后,以及在ArchWiki(NVIDIA(简体中文))上猛补知识后,大概知道了问题出在/etc/X11/xorg.conf 即xorg配置文件(没有没关系)上。由于已经装过了N卡驱动,直接用用偷懒自动xorg生成命令# nvidia-xconfig (需要root权限,xorg配置修改均需root权限,下同)

注意:xorg配置文件修改后需要注销/重启后才能生效。

重启后,外接屏的问题一次性都解决了,在nvidia-settings里也能操作这块屏幕了(更改内容显示方向等设置),显示的帧率也上来了。可惜,新的问题又来了。

问题三:

笔记本多屏幕配置xorg.conf后,笔记本内置屏不显示桌面(不识别)。

长话短说,又是很长很长时间的google后,终于找到了问题的答案。

根据国外网友(的猜测)笔记本内置屏是直接连接到intel核显的,打了n卡驱动后,n卡仅负责3d渲染,把渲染的内容传递给核显,核显再把画面传递到笔记本内置屏。

我看了一下前面的nvidia-xconf生成的xorg.conf文件后发现,n卡似乎不能识别到笔记本内置屏,配置文件中仅有一块屏幕的配置信息。可以粗略证明前面的观点。在xorg里可以指定显示器使用的显卡驱动。因此需要手动添加配置信息,指定内置屏幕使用intel核显驱动。

由于我对xorg.conf文件的理解不到位。至今还无法理解里面的一些语句的意义,和配置的原理。。。所以就不再具体的解释(胡乱的猜测)了。直接放上最终解决方案(并非最完美,仅为目前我在网络上找到的最完美的解决方案)

最终解决方案:

手动配置# vim /etc/X11/xorg.conf ,参考代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
Section “ServerLayout”
Identifier “Layout0”
Screen 0 “Screen0” 0 0
InputDevice “Keyboard0” “CoreKeyboard”
InputDevice “Mouse0” “CorePointer”
EndSection

Section “Files”
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”
Identifier “Monitor0”
VendorName “Unknown”
ModelName “Unknown”
Option “DPMS”
EndSection

Section “Device”
Identifier “Device0”
Driver “nvidia”
VendorName “NVIDIA Corporation”
BusID “PCI:1:0:0”
EndSection

Section “Screen”
Identifier “Screen0”
Device “Device0”
Monitor “Monitor0”
DefaultDepth 24
SubSection “Display”
Depth 24
EndSubSection
EndSection

Section “Device”
Identifier “intel”
Driver “modesetting”
Option “AccelMethod” “none”
BusID “PCI:0:2:0”
EndSection

Section “Screen”
Identifier “Screen1”
Device “intel”
Monitor “Monitor0”
DefaultDepth 24
SubSection “Display”
Depth 24
EndSubSection
EndSection

Not a real solution but manually editing the xorg.conf file at least makes nvidia-drivers work without problem and the laptop screen is working even the external monitor is not attached.

https://forums.developer.nvidia.com/

这个配置可能还要需要一定的小修改以适配你的电脑。

另外,建议参考一下ArchWiki Xorg学习一下xorg配置方法。

后记:

即便配置完成后,由于nvidia默认的自动功耗调整(节电),可能还是没法完全体验到完美的桌面丝滑体验(60fps+)。可能还需要手动在nvidia-settings里设置GPUPowerMizerMode

附上shell脚本:

1
2
#!/bin/bash
nvidia-settings -a ' [gpu:0]/GPUPowerMizerMode=1'

至于shell脚本如何自动开机自动执行,有好多好多方法。这里就不一一列出了。

方法其一:kde的系统设置->开机和关机->自动启动->Login Scripts里添加sh脚本。

#EOF. Thanks for your reading!