无法使用 bbswitch 关闭 NVIDIA GPU

无法使用 bbswitch 关闭 NVIDIA GPU

我有一台配备 GeForce GT 650M 的笔记本电脑。我最近安装了 Kubuntu 20.04 并安装了 nvidia-prime。

我可以在 nvidia-settings 中选择 PRIME 配置文件,并且我有“NVIDIA(性能)”、“NVIDIA On-Demand”和 Intel(省电模式)”。

当我选择英特尔时,我怀疑我的 NVIDIA 卡仍然处于活动状态,因为笔记本电脑似乎比应有的温度高并且电池寿命很差。

在 Kubuntu 18.04 中,我可以使用 bbswitch 关闭 NVIDIA 卡。但是,现在这行不通了。当我尝试 modprobe 时,我收到错误。

$ sudo modprobe bbswitch
modprobe: ERROR: could not insert 'bbswitch': No such device

事实上,dmesg 显示:

[12360.793484] bbswitch: version 0.8
[12360.793498] bbswitch: Found integrated VGA device 0000:00:02.0: \_SB_.PCI0.GFX0
[12360.793509] bbswitch: No discrete VGA device found

来自 lspci:

$ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09)

这里仅显示英特尔卡。

所以看起来我的 GPU 根本就不存在。

但是,如果我将 PRIME 配置文件更改为任何 NVIDIA 配置文件,lspci 会显示 NVIDIA GPU,glxinfo 和 friends 会显示正在使用的 NVIDIA 卡。所以它确实有效!

所以我的问题是,Kubuntu 20.04 是否会采取某种措施将 GPU 从 PCI 总线上移除以关闭它(并且无法关闭它)?

最终,我想彻底关闭它(BIOS 中没有选项)。我尝试过使用 bbswitch 方式,但如果还有其他方法,那也行得通。

答案1

好的,我找到了一种不使用 bbswitch 关闭 NVIDIA 卡的方法。我仍然不知道为什么lspci当我使用 Intel 配置文件而不是任何 NVIDIA 配置文件时 NVIDIA 卡会消失。

Arch 维基非常有用。我使用那里的信息编写了一个脚本,当我使用 ACPI 调用使用 Intel 卡时,该脚本会关闭 NVIDIA GPU。

首先,安装ACPI调用模块。

$ sudo apt install acpi-call-dkms

然后编辑“/etc/modules-load.d/modules.conf”并acpi_call在末尾附加。这将在启动时加载模块并激活“/proc/acpi/call”。

下一步是找到 GPU 所需的 ACPI 调用。acpi-call-dkms 软件包附带了一个示例脚本,该脚本可以完成此操作。运行它以找到显示“有效”的代码。

$ sudo /usr/share/doc/acpi-call-dkms/examples/turn_off_gpu.sh

就我的情况而言,它显示我的 NVIDIA GeForce GT 650M 为“\_SB.PCI0.PEG0.PEGP._OFF”。

然后我编写了一个脚本来关闭 GPU,但前提是 PRIME 配置文件“Intel”处于活动状态。对于其他配置文件,该脚本不执行任何操作并保持 NVIDIA GPU 处于活动状态。这样,我仍然可以通过 prime-select 正常使用 NVIDIA GPU。我将脚本保存为“/usr/bin/turn_off_gpu.sh”。

#!/bin/bash

# Change this to whatever /usr/share/doc/acpi-call-dkms/examples/turn_off_gpu.sh tells you
ACPI_CODE="\_SB.PCI0.PEG0.PEGP._OFF"

GPU_IN_USE=$(prime-select query)

if [[ $GPU_IN_USE == "intel" ]]; then
  echo $ACPI_CODE > /proc/acpi/call
  result=$(cat /proc/acpi/call | tr '\0' '\n')
  case "$result" in
    Error*)
      echo "Failed to turn off discrete GPU. Possible wrong ACPI_CODE?"
      exit 1
      ;;
    *)
      echo "GPU has been turned off"
      exit 0
      ;;
    esac
fi

echo "Discrete GPU is in use, keeping it on"
exit 0

请注意,此脚本需要以 root 身份运行。

最后,我想在启动时运行这个脚本,所以我在“/etc/systemd/system/gpuoff.service”为它创建了一个 systemd 文件:

[Unit]
Description=Turn off GPU if using Intel

[Service]
Type=oneshot
ExecStart=/usr/bin/turn_off_gpu.sh

[Install]
WantedBy=multi-user.target

并启用此功能

$ sudo systemctl enable gpuoff

现在重新启动,当使用 Intel PRIME 配置文件时,GPU 将关闭,而当使用任何其他配置文件时,GPU 将打开。

相关内容