9
3
2019
20

NVIDIA PRIME 配置笔记

本文来自依云's Blog,转载请注明。

这是由 NVIDIA 官方提供的新的双显卡配置方案(官方文档),需要最新的驱动及 Xorg 支持。其中 nvidia 驱动已经位于 Arch Linux 官方仓库中(版本号 435.21)。相关 Xorg 补丁还在 git 上,并没有新版本放出,所以需要自行编译包含补丁的版本。这里有现成的 PKGBUILD。我打包好的版本也提供下载

2019年11月25日更新:xorg-server 1.20.6 已经进入 Arch Linux 官方仓库,包含需要的补丁了。

2020年02月14日更新:现在也可以通过安装 nvidia-prime 直接配置好,就不用搞下边那些配置了。记得安装 nvidia(或者 nvidia-dkms 等)驱动包哦~

我的硬件是 ThinkPad T470p,Intel Corporation HD Graphics 630 核显和 GeForce 940MX 独显。核显的特点是:省电、支持视频编解码加速。独显的特点是:Minecraft 能开光影,FPS 也要高一点。用来跑火狐的话可以正确渲染 FishGL

配置方法如下。

首先把 bbswitch 啥的都卸载了吧。虽然注意点不卸载也没事,但是毕竟装着没意义还容易出问题。然后看看 /etc/modprobe.d 下有没有黑名单 nvidia 的驱动,给它取消了。我有一个 options nvidia_drm modeset=1 的配置,不知道有没有影响。

Xorg 这边要加一段配置。就保存在 /etc/X11/xorg.conf.d/nvidia.conf 好了。

Section "ServerLayout"
  Identifier "layout"
  Screen 0 "iGPU"
  Option "AllowNVIDIAGPUScreens"
EndSection

Section "Device"
  Identifier "iGPU"
  Driver "modesetting"
  BusID "PCI:0:2:0"
EndSection

Section "Screen"
  Identifier "iGPU"
  Device "iGPU"
EndSection

Section "Device"
  Identifier "dGPU"
  Driver "nvidia"
EndSection

那个 BusID 的值要自己看着 lspci | grep VGA 来改。

如果你之前是用N卡跑 Xorg 的,需要把 xrandr --setprovideroutputsource modesetting NVIDIA-0 之类的设置去掉。

然后重启系统就可以了。请做好通过 tty 或者 ssh 修复配置的准备。

默认情况下,Xorg 及其上的程序运行于i卡。使用 __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia 环境变量来指定使用N卡。为了方便起见,做一个别名好了:

alias nvrun="__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia"

然后就可以 nvrun minecraft-launcher 啦~

Minecraft BSL 光影效果

对了,要注意一下的是,这两个环境变量对视频硬解也是有效的。比如我如果给 mpv 使用这两个环境变量的话,mpv 就会黑屏(我的N卡不支持硬解……

Category: Linux | Tags: linux nvidia 显卡驱动 | Read Count: 278870
TripleHeadMonster 说:
Sep 04, 2019 08:09:09 AM

话说能在不用的时候把n卡关掉吗?还是说要自开机起一直给n卡通电?

Avatar_small
依云 说:
Sep 04, 2019 11:20:08 AM

得一直开着,不用的时候处于待机状态。

lyman 说:
Oct 03, 2019 01:02:48 AM

感谢分享,这个方案比 nvidia-xrun 更方便

Tee 说:
Oct 06, 2019 06:26:42 PM

感谢分享!这个方案比 optimus-manager 更方便(gdm+gnome shell)

Tee 说:
Oct 08, 2019 10:05:27 AM

似乎目前还不支持 扩展显示器 https://devtalk.nvidia.com/default/topic/1061293/linux/-435-17-am-i-observing-the-proper-results-with-the-new-prime-/post/5375031/#5375031

Avatar_small
依云 说:
Oct 08, 2019 02:33:22 PM

链接没提到扩展显示器呀。

Tee 说:
Oct 09, 2019 10:25:43 AM

emmm 我英文比较差劲,可能误会意思了,看见后面的楼层写着“have an issue with external (HDMI) displays”以为跟我一样的问题

out 说:
Oct 09, 2019 06:01:37 PM

mpv 应该可以设置 hwdec=vaapi-copy ,让N卡使用I卡的硬解。(在nvidia-xrun上没问题)

Avatar_small
依云 说:
Oct 10, 2019 12:48:26 AM

嗯,是可以的。CPU 使用率35%左右。使用I卡的时候是40%左右。而我使用默认的 vaapi(不 copy)只有7%。所以还是不要用N卡放视频啦。

LXYan 说:
Nov 27, 2019 12:14:46 AM

完全放弃折腾nVidia了,bbswitch直接关死。
哪怕有btrfs快照,我也不会把生命浪费在nVidia上了。就当多花几千块钱给笔电加了块配重吧。
看现在Linux对AMD越来越友好,也许(很久以后)选笔电就选AMD了?

firefoxuser 说:
Dec 28, 2019 05:58:47 PM

用970m独显,使用火狐非常卡,滚屏基本就是一秒一卡那种,。根据我的试验流畅度 970m+linux< gtx1650 +linux<intel HD Graphics P530+linux<intel HD Graphics 4400+windows10<<gtx1650+windows10。 只有win10+nvidia才能称得上流畅,能跟chromium 相比。你的体验如何呢?

Avatar_small
依云 说:
Dec 28, 2019 11:16:27 PM

之前用 optirun 和只用 N 卡的时候跑火狐没感觉太大的区别。现在 prime offload 方案,火狐会报错,然后就 fallback 到一个好像是没 GPU 的渲染方案了。

因为太少使用,我并没有在 Win10 那边安装火狐,不知道那边情况如何。

Arsh 说:
Feb 07, 2020 03:11:54 AM

https://download.nvidia.com/XFree86/Linux-x86_64/440.44/README/primerenderoffload.html

你好我想问一下,这里面有个步骤是:

__NV_PRIME_RENDER_OFFLOAD=1 vkcube
__NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME=nvidia glxinfo | grep vendor

这个格式是啥意思啊?

在/etc/environment里面添加环境变量应该是“KEY=VAL"的格式,为啥上面的存在"KEY=VAL VAL"形式呢?

Avatar_small
依云 说:
Feb 07, 2020 01:02:23 PM

因为这是 shell 的语法。你可以去学一下 bash 的基础。「KEY=VAL CMD」就是仅为这一条命令设置环境变量。

Arsh 说:
Feb 10, 2020 12:21:11 AM

谢谢了,我电脑已经完全弄好了,但是每次开机/usr/lib/Xorg是运行在独显里面的。我的显卡是GTX1050。最开始我是设置的仅独显,没有用核显,不知道是不是之前的设置没有完全清除的原因。还有就是archlinux我用的kde,我每次休眠根本不是休眠,而是关机,反正下次我打开电脑就完全是重启,如果是休眠的话我再次打开电脑桌面应该是恢复到之前的状态,不知道这个是不是也是清理之前的“仅用独显”的配置没清理干净,导致了xorg运行在独显里面,而独显的电源管理又不行的原因。我看文档PRIME只支持图灵一代也就是RTX系列的电脑进行电源管理。

Avatar_small
依云 说:
Feb 10, 2020 12:47:15 AM

你可以去 Arch Linux 中文论坛提问,详细说明情况。

c 说:
Apr 13, 2020 12:54:54 PM

依云如果用 firejail 的话,可以直接在对应的 profile 里写环境变量,比如
/etc/firejail/steam.local
```
env __NV_PRIME_RENDER_OFFLOAD=1
env __VK_LAYER_NV_optimus=NVIDIA_only
env __GLX_VENDOR_LIBRARY_NAME=nvidia
```
这样就不用每次在前面加 prime-run 了,另外如果用 zsh 的话也可以添加个 widget 来方便使用,比如:
```
nvidia-prime() {
[[ -z $BUFFER ]] && zle up-history
[[ $BUFFER != prime-run\ * ]] && LBUFFER="prime-run $LBUFFER"
}
zle -N nvidia-prime
bindky "\e\ep" nvidia-prime # (optional)
```
这样 Alt-X 输 nvidia<Tab> 就可以,或者绑定快捷键 <esc><esc>p

Avatar_small
依云 说:
Apr 13, 2020 01:47:38 PM

是的,这样省力的方式有很多,按需要用就可以了。我有个 mc-wrapper 脚本,配置给 multimc 使用,所以也是不用自己每次输入的啦。

junix 说:
Jun 25, 2020 08:19:46 PM

https://github.com/levinit/itnotes/blob/master/linux/laptop%E7%AC%94%E8%AE%B0%E6%9C%AC%E7%9B%B8%E5%85%B3.md#intel_pstate

Hibanaw 说:
Mar 20, 2021 09:50:57 PM

成功力,感谢!!


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

Mastodon | Theme: Aeros 2.0 by TheBuckmaker.com