nvidia-xrun
nvidia-xrun 是一个实用程序,允许启用 NVIDIA Optimus 的笔记本电脑按需使用独立的 NVIDIA 显卡运行 X server。此解决方案提供完整的 GPU 利用率、兼容性以及比 Bumblebee 更好的性能。
X server 只能与集成显卡或独立 NVIDIA 显卡一起使用,但不能同时使用两者,因此用户可能希望切换到单独的 虚拟控制台 并使用与第一个 X server 不同的显卡启动另一个 X server。
安装
安装:
- nvidia - 如果使用旧驱动程序,您必须编辑 nvidia-xrun 的 PKGBUILD 并删除 NVIDIA 依赖项
- nvidia-xrun-gitAUR(推荐)或 nvidia-xrunAUR (旧方法,使用 bumblebee 关闭独立显卡)
- 任何 窗口管理器,因为不建议像
nvidia-xrun application
那样直接运行应用程序。
配置
设置正确的总线 ID
/etc/X11/nvidia-xorg.conf
中自动设置。 确保总线 ID 已正确设置,否则请更改它(您可以使用 lspci
命令找到正确的总线 ID)。 在某些情况下,您需要将 lspci
的十六进制输出转换为十进制以用于 nvidia-xorg.conf
,例如 3b:00.0
变为 "PCI:59:0:0"
。查找您的显示设备总线 ID
$ lspci | grep -i nvidia | awk '{print $1}'
它可能会返回类似于 01:00.0
的内容。 然后创建一个文件(例如 /etc/X11/nvidia-xorg.conf.d/30-nvidia.conf
)以设置正确的总线 ID
/etc/X11/nvidia-xorg.conf.d/30-nvidia.conf
Section "Device" Identifier "nvidia" Driver "nvidia" BusID "PCI:1:0:0" # Option "DPI" "96 x 96" EndSection
通过这种方式,您还可以在遇到问题时调整一些 NVIDIA 设置
/etc/X11/nvidia-xorg.conf.d/30-nvidia.conf
Section "Screen" Identifier "nvidia" Device "nvidia" # Option "AllowEmptyInitialConfiguration" "Yes" # Option "UseDisplayDevice" "none" EndSection
外部 GPU 设置
您也可以在外部 GPU 设置中使用此方法。 确保加载 nvidia-modeset 和 nvidia-drm 模块,并将选项 Option "AllowExternalGpus" "true"
添加到 "Device" 部分。
更改自动生成的配置以在具有多个 NVIDIA 显卡的设备上使用内置显示器
/etc/X11/nvidia-xorg.conf.d/30-nvidia.conf
Section "ServerLayout" Identifier "layout" Screen 0 "nvidia" 0 0 Inactive "intel" Option "AutoAddGPU" "false" EndSection Section "Device" Identifier "nvidia" Driver "nvidia" BusID "PCI:9:0:0" Option "AllowExternalGpus" "true" Option "ProbeAllGpus" "false" Option "HardDPMS" "false" Option "NoLogo" "true" Option "UseEDID" "false" # Option "UseDisplayDevice" "none" EndSection Section "Screen" Identifier "nvidia" Device "nvidia" Option "AllowEmptyInitialConfiguration" "Yes" # Option "UseDisplayDevice" "None" EndSection
请记住将总线 ID 设置为正确的显卡。
自动运行窗口管理器
为了方便起见,您可以创建一个包含您喜欢的窗口管理器的 $XDG_CONFIG_HOME/X11/nvidia-xinitrc
文件。(如果使用 nvidia-xrun < v.0.3.79,则创建 $HOME/.nvidia-xinitrc
)
if [ $# -gt 0 ]; then $* else your-window-manager fi
有了它,您无需指定应用程序,只需执行
$ nvidia-xrun
由于此方法启动了一个隔离的 X server,因此最好复制您位于 /etc/X11/xorg.conf.d/
中的所有其他配置文件,但您的先前标准集成 GPU 配置除外。
使用 bbswitch 管理 NVIDIA 显卡
当不需要 NVIDIA 显卡时,可以使用 bbswitch 将其关闭。 nvidia-xrun 脚本将自动负责运行窗口管理器和唤醒 NVIDIA 显卡。 为了实现这一点,您需要
在启动时加载 bbswitch
模块
# echo 'bbswitch' > /etc/modules-load.d/bbswitch.conf
在启动时禁用 nvidia
模块
# echo 'options bbswitch load_state=0 unload_state=1' > /etc/modprobe.d/bbswitch.conf
重启后,NVIDIA 显卡将被关闭。 可以通过查询 bbswitch
的状态来查看这一点
$ cat /proc/acpi/bbswitch
要分别强制显卡打开/关闭,请运行
# echo OFF > /proc/acpi/bbswitch # echo ON > /proc/acpi/bbswitch
有关 bbswitch 的更多信息,请参阅 Bumblebee-Project/bbswitch。
用法
开机启动
启用 nvidia-xrun-pm.service
- 这将在启动期间关闭 NVIDIA 显卡。
系统启动后,从虚拟控制台登录到您的用户,然后运行 nvidia-xrun application
。
如果上述方法不起作用,请切换到未使用的虚拟控制台并重试。
如前所述,直接使用 nvidia-xrun application
运行应用程序效果不佳,因此最好创建一个如前所述的 nvidia-xinitrc
文件,并使用 nvidia-xrun
启动您的窗口管理器。
故障排除
NVIDIA GPU 无法关闭或被设置为默认
请参阅 #使用 bbswitch 管理 NVIDIA 显卡。
如果 NVIDIA GPU 仍然无法关闭,或者在您使用或不使用 nvidia-xrun
时不知何故被设置为默认,那么您可能需要将特定模块列入黑名单(这些模块以前被 Bumblebee 列入黑名单)。 创建此文件并重启您的系统
/usr/lib/modprobe.d/nvidia-xrun.conf
blacklist nvidia blacklist nvidia-drm blacklist nvidia-modeset blacklist nvidia-uvm blacklist nouveau
nvidia-xrun-pm.service
和 systemd-modules-load.service
之间似乎存在竞争条件,后者加载 nvidia
模块。 如果后者先运行,则 nvidia-xrun-pm
将在设备移除期间挂起(实际上是 tee
命令)。 如果另一方面 nvidia-xrun-pm
先运行,那么它将成功,然后模块将加载失败并显示错误(这是无害的,但很难看)。 因此,最好始终将上述模块列入黑名单。
应启用 DRM 内核模式设置以使 PRIME 同步工作(例如在仅 Intel GPU 连接到输出的 muxless 设备上)。 但是,如果出现问题,请考虑禁用它。 请参阅 NVIDIA#DRM 内核模式设置
在某些硬件上,NVIDIA GPU 在 PCI 总线上公开两个设备:一个 3D 控制器和一个音频设备。 在这种情况下,需要从总线中移除这两个设备,GPU 才能完全断电。 这可以通过简单地在 /etc/default/nvidia-xrun
中为音频设备总线 ID 添加一行,并在 /usr/bin/nvidia-xrun
中的函数 turn_off_gpu
中添加相应的行来删除第二个设备。